diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..f17311098f --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ +This file makes sure that Github Pages doesn't process mdBook's output. diff --git a/404.html b/404.html new file mode 100644 index 0000000000..962befa69a --- /dev/null +++ b/404.html @@ -0,0 +1,228 @@ + + + + + + Page not found - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Document not found (404)

+

This URL is invalid, sorry. Please use the navigation bar or search to continue.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/FontAwesome/css/font-awesome.css b/FontAwesome/css/font-awesome.css new file mode 100644 index 0000000000..540440ce89 --- /dev/null +++ b/FontAwesome/css/font-awesome.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.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} diff --git a/FontAwesome/fonts/FontAwesome.ttf b/FontAwesome/fonts/FontAwesome.ttf new file mode 100644 index 0000000000..35acda2fa1 Binary files /dev/null and b/FontAwesome/fonts/FontAwesome.ttf differ diff --git a/FontAwesome/fonts/fontawesome-webfont.eot b/FontAwesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000..e9f60ca953 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.eot differ diff --git a/FontAwesome/fonts/fontawesome-webfont.svg b/FontAwesome/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000..855c845e53 --- /dev/null +++ b/FontAwesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FontAwesome/fonts/fontawesome-webfont.ttf b/FontAwesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000..35acda2fa1 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.ttf differ diff --git a/FontAwesome/fonts/fontawesome-webfont.woff b/FontAwesome/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000..400014a4b0 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.woff differ diff --git a/FontAwesome/fonts/fontawesome-webfont.woff2 b/FontAwesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000..4d13fc6040 Binary files /dev/null and b/FontAwesome/fonts/fontawesome-webfont.woff2 differ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..733c072369 --- /dev/null +++ b/LICENSE @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program 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. + + This program 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 this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/about/Changelog.html b/about/Changelog.html new file mode 100644 index 0000000000..d1f16ea747 --- /dev/null +++ b/about/Changelog.html @@ -0,0 +1,269 @@ + + + + + + Changelog - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Changelog

+

5.0.1

+

Android version release, minor fixes

+

New in version 5.0.0

+

Architecture

+

No more typescript or react native. Backend is completely in Rust, frontend is in native.

+

Building

+

Dependencies

+

Number of dependencies was greatly reduced; no npm/yarn/nodejs/cocoapods, etc. All dependencies are handled by:

+
    +
  • Cargo (rust packages)
  • +
  • Xcode (only default iOS frameworks are used)
  • +
  • Gradle
  • +
+

Rust backend

+

Rust libraries were moved back into the repository. Crypto functions are imported from Substrate. All logic and most of storage is written in Rust. An important hack here is that rust/signer crate has 2 versions of Cargo.toml for android and iOS architectures, as target library features could not be adjusted by normal means.

+

Native frontend

+

Frontend for both iOS and Android re-written in native frameworks. Thus, standard out-of-the-box build scripts could be used for building once Rust libraries are built and linked

+

Features

+

Secure seed storage

+

Secrets are stored in devices' encrypted storage and some effort is made to prevent them leaking in system memory. Thus, all is as safe as the phone is - the same credentials used for unlocking the phone are used to unlock seeds. User is responsible to keep them adequate.

+

Transaction preview

+

Transactions content is shown before signing; no hash signing is allowed, but signing messages is possible.

+

History feature

+

The Vault now logs all operations it performs. It it important to remember that this is not log of account operations, but log of device history. This history could be cleared if needed, but not modified by other means. Detected presence of network connection is also logged.

+

N+1 derivation

+

Much requested feature that makes Vault automatically increment numbered seeds on creation.

+

Network and metadata updates

+

All network data updates now could be performed through scanning QR codes. Whenever some update is needed, most probably you should just scan some QR video. Don't worry about skipped frames, it's fountain code so you only need enough frames.

+

All updates could be signed, and signing key will be trusted on first use, so Vault device should be linked to single source of authority on correct metadata.

+

Key re-use in different networks

+

Keys could be used only in one network. Need to re-use key in another network? Just create key with the same derivation path in that network to allow re-use and it will work.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/about/FAQ.html b/about/FAQ.html new file mode 100644 index 0000000000..bc2d19fe70 --- /dev/null +++ b/about/FAQ.html @@ -0,0 +1,296 @@ + + + + + + FAQ - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

FAQ

+ +

About

+

What is Vault?

+

Vault is an app for an air-gapped device, it turns an offline device — usually a smartphone — into a secure hardware wallet. Vault offers you a way to securely generate, store, manage and use your blockchain credentials.

+

Should I use Vault?

+

Vault is optimized for the highest security requirements. If you already manage many accounts on multiple networks, Vault is great for you. If you have little experience with blockchain networks but still want good security affordances, you might find the learning curve steep. We strive to make Vault as intuitive as possible; get in touch via signer@parity.io or GitHub Issues if you can help us get there!

+

How does an offline device communicate with the outside world?

+

Communication happens through scanning and generating QR codes. Scanned with Vault input-QRs interact with keys stored in Vault to, generate response-QRs on behalf of those keys. Usually, input-QR is a blockchain transaction, and a response-QR is a signature for this transaction. There are tried and true cryptographic algorithms that power these QR codes, as well as some smart engineering that make your dedicated device safe to use.

+

How do I keep my keys secure?

+

Vault is a safe way to use your keys. However, that alone won't be enough to keep your keys secure. Devices break and get lost. This is why we always recommend backing up your seed phrases and derivation paths on paper. We are such big fans of paper backups that we even support a special tool to power your paper backup game by splitting your backups into shards called Banana Split.

+

How do I know I am not interacting with malicious apps or actors?

+

The Vault does not interact with a network. The app itself does not have a way to check if an app or an account you're interacting with is malicious. +If you use Vault with PolkadotJS Browser Extension, PolkadotJS Apps, or Signer Component Browser Extension they will rely on a community-driven curated list of potentially less-than-honest operators: https://polkadot.js.org/phishing/# to prevent you from interacting with certain sites and addresses. However, there are no limitations on the use of Vault with other tools.

+

I want to play with Vault to get a better feeling of how it works. Is there a way to do it without spending valuable tokens?

+

Yes. In Vault, you should add a key for an address on Westend network and request test tokens for that address, see the step-by-step guide on Polkadot Network Wiki.

+

You can use test tokens in the same way you would use value-bearing tokens.

+

For example with PolkadotJS Apps you can create a transaction on behalf of your account, generate a signature with Vault and submit it to the network. All of this without keys ever leaving your offline device.

+

Networks

+

What networks does Vault support?

+

From-the-shelf Polkadot Vault supports Polkadot, Kusama, and Westend networks. But it's not limited to these networks. More experienced users can generate metadata for any network to expand the capability of Polkadot Vault.

+

How can I update metadata version for a network?

+

Parity verifies and publishes recent metadata versions on Metadata Update Portal. With off-the-shelf Vault you can scan one of the multipart QR-"movies" same way you scan transaction QR:
+in Vault open scanner, scan the QR for the respective network and accept new metadata.

+

Currently, Metadata Update Portal follows Polkadot, Kusama, and Westend network metadata updates. Parity is open to collaboration with participants of other networks and is currently exploring safe and more decentralized ways of publishing verified metadata.

+

If you want to update networks that you've added manually, please follow the Add Metadata steps in Add New Network guide.

+

Why do I need to update network metadata versions at all?

+

It's a safety feature. Substrate-based blockchain networks can be updated and otherwise changed; without recent metadata version of a network Vault won't be able to parse a transaction correctly, and you won't be able to read it and verify what you sign. Given that Vault is an app for an air-gapped device, you have to update the network version by using camera.

+

How can I add a new network to Vault?

+

Parity verifies and publishes network specs on Metadata Update Portal. To add one of the listed networks, in Metadata Update Portal click "Chain Specs", scan the network specs QR same way you scan transaction QR: in Vault open scanner, scan the QR and accept new network spec. Then scan the multipart QR-"movie" containing recent metadata for this network.

+

Can I add a network that does not have network specs and metadata QR published anywhere?

+

Yes. Follow the Add New Network step-by-step guide.

+

Currently, the process requires you to have rust, subkey and parity-signer repository on your machine.

+

Seeds and keys

+

Can I import my keys from polkadot{.js} apps or extension to Polkadot Vault?

+

Yes. Keys are compatible between polkadot{.js} and Polkadot Vault, except for the keys generated with Ledger (BIP39). To import seed keys into Polkadot Vault, you need to know:

+
    +
  1. Seed phrase
    +It should always be backed up in paper!
  2. +
  3. Network you are adding address to and whether Polkadot Vault installed on your device has metadata for the respective network.
    +If (2) is not one of the default built-in networks, you will need to add network yourself or find a distribution center for adding networks.
  4. +
  5. Derivation path
    +Only if you are importing a derived key, usually keys generated with polkadot{.js} are seed keys.
  6. +
+

In Polkadot Vault go to Keys, then press "Plus" icon in the top right of the screen, select "Recover seed", enter display name to identify your seed, press "Next", enter the seed phrase. Done, you've got your seed key imported!
+If you are importing a derived key select the seed from which your key is derived, select account's network, press "Plus" icon next to "Derived keys", enter your derivation path.

+

What is the difference between seed key and derived key? Why should I use derived keys?

+

A seed key is a single key pair generated from a seed phrase. You can “grow” as many derived keys from a single seed by adding derivation paths to your seed phrase.

+

Learn more about types of derivation paths on substrate.io.

+

Derivation path is sensitive information, but knowing the derivation path is not enough to recover a key. Derived keys cannot be backed up without both of the ingredients: seed phrase (can be shared between multiple keys) and a derivation path (unique for each of the keys “grown” from that seed).

+

The main reason to use derived keys is how easy it is to back up (and restore from a backup) a derivation path compared to seed phrase.

+

What is an identicon, the image next to my keys?

+

An identicon is a visual hash of a public key — a unique picture generated from your public key. The same public key should have the same identicon regardless of the application. It is a good tool to distinguish quickly between keys. However, when interacting with keys, i.g. verifying a recipient of a transaction, do not rely only on identicons, it is better to check the full public address.

+

How can I rename one of my seeds?

+

Due to security considerations, you cannot rename a seed. Please back up the seed and derived keys, remove it and add the seed again with a new name instead.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/about/Security-And-Privacy.html b/about/Security-And-Privacy.html new file mode 100644 index 0000000000..884ad2ebf8 --- /dev/null +++ b/about/Security-And-Privacy.html @@ -0,0 +1,283 @@ + + + + + + Security-And-Privacy - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Security and Privacy

+

Device security

+

Polkadot Vault is built to be used offline. The mobile device used to run the app will hold important information that needs to be kept securely stored. It is therefore advised to:

+
    +
  • Get a separate mobile device.
  • +
  • Make a factory reset.
  • +
  • Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices).
  • +
  • Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords.
  • +
  • Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device.
  • +
  • Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.
  • +
+

How to get it and use it?

+

Install the app

+

The app is available in beta for Android and iOS :

+ +

Please double check carefully the origin of the app, and make sure that the company distributing it is Parity Technologies. Usual security advice apply to this air-gapped wallet:

+
    +
  • When creating an account using Polkadot Vault Mobile app, make sure to write down the recovery phrase and store it in safe places.
  • +
  • Always double check the information of the transactions you are about to sign or send.
  • +
  • Make sure to first transfer a small amount of Ether with the app and verify that everything is working as expected before transferring larger amounts of Ether.
  • +
+

How to update Polkadot Vault securely

+

Once Polkadot Vault is installed, your device should never go online. This would put your private keys at threat. To update, you will need to :

+
    +
  1. Make sure you possess the recovery phrase for each of your accounts. You can find it on Polkadot Vault by :
  2. +
+
    +
  • v4.0 choosing an identity > click the user icon at the top right > “Show Recovery Phrase”
  • +
  • v2.2 tapping an account > 3 dots menu at the top right > “Backup Recovery Phrase”
  • +
  • v2.0 tapping an account > tap on the account address > “Backup Recovery Phrase”
  • +
+
    +
  1. Factory reset the device.
  2. +
  3. Enable full-disk encryption on the device and set a strong password (might not be on by default, for example for older Android devices).
  4. +
  5. Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords.
  6. +
  7. Install Polkadot Vault from the Apple store or Android store or download the APK from Polkadot Vault's Github repository (make sure you are on the right website and verify the checksum)
  8. +
  9. Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth, and any other connection ability the device has.
  10. +
  11. Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.
  12. +
  13. Recover your accounts.
  14. +
+

What data does it collect?

+

None, it's as simple as that. The Polkadot Vault Mobile Android and iOS apps do not send any sort of data to Parity Technologies or any partner and work completely offline once installed.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/ace.js b/ace.js new file mode 100644 index 0000000000..e8435a507d --- /dev/null +++ b/ace.js @@ -0,0 +1,43 @@ +/* +Copyright (c) 2010, Ajax.org B.V. +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 Ajax.org B.V. 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 AJAX.ORG B.V. 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. +*/ + +(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE = "ace",e=function(){return this}();!e&&typeof window!="undefined"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!="undefined")return;var t=function(e,n,r){if(typeof e!="string"){t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t=="string"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)==="[object Array]"){var o=[];for(var u=0,a=t.length;u1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;et.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n=0?parseFloat((i.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=i.match(/ Gecko\/\d+/),t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",t.isWebKit=parseFloat(i.split("WebKit/")[1])||undefined,t.isChrome=parseFloat(i.split(" Chrome/")[1])||undefined,t.isEdge=parseFloat(i.split(" Edge/")[1])||undefined,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isAndroid=i.indexOf("Android")>=0,t.isChromeOS=i.indexOf(" CrOS ")>=0,t.isIOS=/iPad|iPhone|iPod/.test(i)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIPad||t.isAndroid}),ace.define("ace/lib/dom",["require","exports","module","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("./useragent"),i="http://www.w3.org/1999/xhtml";t.buildDom=function o(e,t,n){if(typeof e=="string"&&e){var r=document.createTextNode(e);return t&&t.appendChild(r),r}if(!Array.isArray(e))return e;if(typeof e[0]!="string"||!e[0]){var i=[];for(var s=0;s=1.5:!0;if(typeof document!="undefined"){var s=document.createElement("div");t.HI_DPI&&s.style.transform!==undefined&&(t.HAS_CSS_TRANSFORMS=!0),!r.isEdge&&typeof s.style.animationName!="undefined"&&(t.HAS_CSS_ANIMATION=!0),s=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform="translate("+Math.round(t)+"px, "+Math.round(n)+"px)"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+"px",e.style.left=Math.round(t)+"px"}}),ace.define("ace/lib/oop",["require","exports","module"],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define("ace/lib/keys",["require","exports","module","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./oop"),i=function(){var e={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,"super":8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*"}},t,n;for(n in e.FUNCTION_KEYS)t=e.FUNCTION_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);for(n in e.PRINTABLE_KEYS)t=e.PRINTABLE_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e["return"],e.escape=e.esc,e.del=e["delete"],e[173]="-",function(){var t=["cmd","ctrl","alt","shift"];for(var n=Math.pow(2,t.length);n--;)e.KEY_MODS[n]=t.filter(function(t){return n&e.KEY_MODS[t]}).join("-")+"-"}(),e.KEY_MODS[0]="",e.KEY_MODS[-1]="input-",e}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return typeof t!="string"&&(t=String.fromCharCode(e)),t.toLowerCase()}}),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function a(e,t,n){var a=u(t);if(!i.isMac&&s){t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(a|=8);if(s.altGr){if((3&a)==3)return;s.altGr=0}if(n===18||n===17){var f="location"in t?t.location:t.keyLocation;if(n===17&&f===1)s[n]==1&&(o=t.timeStamp);else if(n===18&&a===3&&f===2){var l=t.timeStamp-o;l<50&&(s.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),a&8&&n>=91&&n<=93&&(n=-1);if(!a&&n===13){var f="location"in t?t.location:t.keyLocation;if(f===3){e(t,a,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&a&8){e(t,a,n);if(t.defaultPrevented)return;a&=-9}return!!a||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,a,n):!1}function f(){s=Object.create(null)}var r=e("./keys"),i=e("./useragent"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent("on"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type=="dblclick"?0:e.type=="contextmenu"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",i,!0),t.removeListener(document,"dragstart",i,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",i,!0),t.addListener(document,"dragstart",i,!0),i},t.addTouchMoveListener=function(e,n){var r,i;t.addListener(e,"touchstart",function(e){var t=e.touches,n=t[0];r=n.clientX,i=n.clientY}),t.addListener(e,"touchmove",function(e){var t=e.touches;if(t.length>1)return;var s=t[0];e.wheelX=r-s.clientX,e.wheelY=i-s.clientY,r=s.clientX,i=s.clientY,n(e)})},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):"onwheel"in e?t.addListener(e,"wheel",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,"DOMMouseScroll",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){function c(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s]("mousedown",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}function h(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s]("mousedown",e),r[s](l[o],e)}var o=0,u,a,f,l={2:"dblclick",3:"tripleclick",4:"quadclick"};Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,"mousedown",c),i.isOldIE&&t.addListener(e,"dblclick",h)})};var u=!i.isMac||!i.isOpera||"KeyboardEvent"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[u(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var o=null;r(e,"keydown",function(e){o=e.keyCode}),r(e,"keypress",function(e){return a(n,e,o)})}else{var u=null;r(e,"keydown",function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=a(n,e,e.keyCode);return u=e.defaultPrevented,t}),r(e,"keypress",function(e){u&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),u=null)}),r(e,"keyup",function(e){s[e.keyCode]=null}),s||(f(),r(window,"focus",f))}};if(typeof window=="object"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r="zero-timeout-message-"+l++,i=function(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,"message",i),e())};t.addListener(n,"message",i),n.postMessage(r,"*")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout(function r(){t.$idleBlocked?setTimeout(r,100):e()},n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout(function(){t.$idleBlocked=!1},e||100)},t.nextFrame=typeof window=="object"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.row0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n63,l=400,c=e("../lib/keys"),h=c.KEY_MODS,p=i.isIOS,d=p?/\s/:/\n/,v=function(e,t){function W(){x=!0,n.blur(),n.focus(),x=!1}function V(e){e.keyCode==27&&n.value.lengthC&&T[s]=="\n")o=c.end;else if(rC&&T.slice(0,s).split("\n").length>2)o=c.down;else if(s>C&&T[s-1]==" ")o=c.right,u=h.option;else if(s>C||s==C&&C!=N&&r==s)o=c.right;r!==s&&(u|=h.shift),o&&(t.onCommandKey(null,u,o),N=r,C=s,A(""))};document.addEventListener("selectionchange",s),t.on("destroy",function(){document.removeEventListener("selectionchange",s)})}var n=s.createElement("textarea");n.className="ace_text-input",n.setAttribute("wrap","off"),n.setAttribute("autocorrect","off"),n.setAttribute("autocapitalize","off"),n.setAttribute("spellcheck",!1),n.style.opacity="0",e.insertBefore(n,e.firstChild);var v=!1,m=!1,g=!1,y=!1,b="",w=!0,E=!1;i.isMobile||(n.style.fontSize="1px");var S=!1,x=!1,T="",N=0,C=0;try{var k=document.activeElement===n}catch(L){}r.addListener(n,"blur",function(e){if(x)return;t.onBlur(e),k=!1}),r.addListener(n,"focus",function(e){if(x)return;k=!0;if(i.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),i.isEdge?setTimeout(A):A()}),this.$focusScroll=!1,this.focus=function(){if(b||f||this.$focusScroll=="browser")return n.focus({preventScroll:!0});var e=n.style.top;n.style.position="fixed",n.style.top="0px";try{var t=n.getBoundingClientRect().top!=0}catch(r){return}var i=[];if(t){var s=n.parentElement;while(s&&s.nodeType==1)i.push(s),s.setAttribute("ace_nocontext",!0),!s.parentElement&&s.getRootNode?s=s.getRootNode().host:s=s.parentElement}n.focus({preventScroll:!0}),t&&i.forEach(function(e){e.removeAttribute("ace_nocontext")}),setTimeout(function(){n.style.position="",n.style.top=="0px"&&(n.style.top=e)},0)},this.blur=function(){n.blur()},this.isFocused=function(){return k},t.on("beforeEndOperation",function(){if(t.curOp&&t.curOp.command.name=="insertstring")return;g&&(T=n.value="",z()),A()});var A=p?function(e){if(!k||v&&!e||y)return;e||(e="");var r="\n ab"+e+"cde fg\n";r!=n.value&&(n.value=T=r);var i=4,s=4+(e.length||(t.selection.isEmpty()?0:1));(N!=i||C!=s)&&n.setSelectionRange(i,s),N=i,C=s}:function(){if(g||y)return;if(!k&&!D)return;g=!0;var e=t.selection,r=e.getRange(),i=e.cursor.row,s=r.start.column,o=r.end.column,u=t.session.getLine(i);if(r.start.row!=i){var a=t.session.getLine(i-1);s=r.start.rowi+1?f.length:o,o+=u.length+1,u=u+"\n"+f}u.length>l&&(s=T.length&&e.value===T&&T&&e.selectionEnd!==C},M=function(e){if(g)return;v?v=!1:O(n)&&(t.selectAll(),A())},_=null;this.setInputHandler=function(e){_=e},this.getInputHandler=function(){return _};var D=!1,P=function(e,r){D&&(D=!1);if(m)return A(),e&&t.onPaste(e),m=!1,"";var i=n.selectionStart,s=n.selectionEnd,o=N,u=T.length-C,a=e,f=e.length-i,l=e.length-s,c=0;while(o>0&&T[c]==e[c])c++,o--;a=a.slice(c),c=1;while(u>0&&T.length-c>N-1&&T[T.length-c]==e[e.length-c])c++,u--;return f-=c-1,l-=c-1,a=a.slice(0,a.length-c+1),!r&&f==a.length&&!o&&!u&&!l?"":(y=!0,a&&!o&&!u&&!f&&!l||S?t.onTextInput(a):t.onTextInput(a,{extendLeft:o,extendRight:u,restoreStart:f,restoreEnd:l}),y=!1,T=e,N=i,C=s,a)},H=function(e){if(g)return U();var t=n.value,r=P(t,!0);(t.length>l+100||d.test(r))&&A()},B=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(!r||u)return;var i=a||n?"Text":"text/plain";try{return t?r.setData(i,t)!==!1:r.getData(i)}catch(e){if(!n)return B(e,t,!0)}},j=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);B(e,s)?(p&&(A(s),v=s,setTimeout(function(){v=!1},10)),i?t.onCut():t.onCopy(),r.preventDefault(e)):(v=!0,n.value=s,n.select(),setTimeout(function(){v=!1,A(),i?t.onCut():t.onCopy()}))},F=function(e){j(e,!0)},I=function(e){j(e,!1)},q=function(e){var s=B(e);typeof s=="string"?(s&&t.onPaste(s,e),i.isIE&&setTimeout(A),r.preventDefault(e)):(n.value="",m=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,"select",M),r.addListener(n,"input",H),r.addListener(n,"cut",F),r.addListener(n,"copy",I),r.addListener(n,"paste",q),(!("oncut"in n)||!("oncopy"in n)||!("onpaste"in n))&&r.addListener(e,"keydown",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:I(e);break;case 86:q(e);break;case 88:F(e)}});var R=function(e){if(g||!t.onCompositionStart||t.$readOnly)return;g={};if(S)return;setTimeout(U,0),t.on("mousedown",W);var r=t.getSelectionRange();r.end.row=r.start.row,r.end.column=r.start.column,g.markerRange=r,g.selectionStart=N,t.onCompositionStart(g),g.useTextareaForIME?(n.value="",T="",N=0,C=0):(n.msGetInputContext&&(g.context=n.msGetInputContext()),n.getInputContext&&(g.context=n.getInputContext()))},U=function(){if(!g||!t.onCompositionUpdate||t.$readOnly)return;if(S)return W();if(g.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;P(e),g.markerRange&&(g.context&&(g.markerRange.start.column=g.selectionStart=g.context.compositionStartOffset),g.markerRange.end.column=g.markerRange.start.column+C-g.selectionStart)}},z=function(e){if(!t.onCompositionEnd||t.$readOnly)return;g=!1,t.onCompositionEnd(),t.off("mousedown",W),e&&H()},X=o.delayedCall(U,50).schedule.bind(null,null);r.addListener(n,"compositionstart",R),r.addListener(n,"compositionupdate",U),r.addListener(n,"keyup",V),r.addListener(n,"keydown",X),r.addListener(n,"compositionend",z),this.getElement=function(){return n},this.setCommandMode=function(e){S=e,n.readOnly=!1},this.setReadOnly=function(e){S||(n.readOnly=e)},this.setCopyWithEmptySelection=function(e){E=e},this.onContextMenu=function(e){D=!0,A(),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){b||(b=n.style.cssText),n.style.cssText=(o?"z-index:100000;":"")+(i.isIE?"opacity:0.1;":"")+"text-indent: -"+(N+C)*t.renderer.characterWidth*.5+"px;";var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+"px",n.style.top=Math.min(e.clientY-f-2,c)+"px"};h(e);if(e.type!="mousedown")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout($),i.isWin&&r.capture(t.container,h,J)},this.onContextMenuClose=J;var $,K=function(e){t.textInput.onContextMenu(e),J()};r.addListener(n,"mouseup",K),r.addListener(n,"mousedown",function(e){e.preventDefault(),J()}),r.addListener(t.renderer.scroller,"contextmenu",K),r.addListener(n,"contextmenu",K),p&&Q(e,t,n)};t.TextInput=v}),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/useragent"],function(e,t,n){"use strict";function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e));var n=["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function u(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function a(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e("../lib/useragent"),i=0,s=550;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var i=this.editor,s=e.getButton();if(s!==0){var o=i.getSelectionRange(),u=o.isEmpty();(u||s==1)&&i.selection.moveToPosition(n),s==2&&(i.textInput.onContextMenu(e.domEvent),r.isMozilla||e.preventDefault());return}this.mousedownEvent.time=Date.now();if(t&&!i.isFocused()){i.focus();if(this.$focusTimeout&&!this.$clickSelection&&!i.inMultiSelectMode){this.setState("focusWait"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;if(!this.mousedownEvent)return;this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select")},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=a(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=a(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>i||t-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,r=e.domEvent.timeStamp,i=r-n.t,o=i?e.wheelX/i:n.vx,u=i?e.wheelY/i:n.vy;i=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(f=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(f=!0);if(f)n.allowed=r;else if(r-n.allowedt.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join("
"),i.setHtml(f),i.show(),t._signal("showGutterTooltip",i),t.on("mousewheel",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+"px",v.top=d.bottom+"px"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t._signal("hideGutterTooltip",i),t.removeEventListener("mousewheel",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i=="foldWidgets")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState("selectByLines"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,"mouseout",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on("changeSession",c)}function a(e){o.call(this,e)}var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.moveCursorToPosition(e),S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,"mousemove",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.selection.fromOrientedRange(m),t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,"mousemove",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e=="text/plain"||e=="Text"})}function _(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],r=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o="none";return r&&t.indexOf(i)>=0?o="copy":n.indexOf(i)>=0?o="move":t.indexOf(i)>=0&&(o="copy"),o}var t=e.editor,n=r.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var f=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData("Text",t.session.getTextRange()),w=!0,this.setState("drag")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n=="move"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case"move":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case"copy":m=t.moveText(m,g,!0)}else{var r=n.getData("Text");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,"dragstart",this.onDragStart.bind(e)),i.addListener(c,"dragend",this.onDragEnd.bind(e)),i.addListener(c,"dragenter",this.onDragEnter.bind(e)),i.addListener(c,"dragover",this.onDragOver.bind(e)),i.addListener(c,"dragleave",this.onDragLeave.bind(e)),i.addListener(c,"drop",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e("../lib/dom"),i=e("../lib/event"),s=e("../lib/useragent"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=s.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state=="dragReady"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state==="dragWait"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;"unselectable"in o&&(o.unselectable="on");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement("script");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState=="loaded"||i.readyState=="complete")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o1&&(i=n[n.length-2]);var o=a[t+"Path"];return o==null?o=a.basePath:r=="/"&&(t=r=""),o&&o.slice(-1)!="/"&&(o+="/"),o+t+r+i+this.get("suffix")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit("load.module",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a),f()};var f=function(){!a.basePath&&!a.workerPath&&!a.modePath&&!a.themePath&&!Object.keys(a.$moduleUrls).length&&(console.error("Unable to infer path to ace from script src,","use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes","or with webpack use ace/webpack-resolver"),f=function(){})};t.init=l}),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,u=e("./mouse_event").MouseEvent,a=e("./dragdrop_handler").DragdropHandler,f=e("../config"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,"click",this.onMouseEvent.bind(this,"click")),r.addListener(u,"mousemove",this.onMouseMove.bind(this,"mousemove")),r.addMultiMouseDownListener([u,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var f=e.renderer.$gutter;r.addListener(f,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),r.addListener(f,"click",this.onMouseEvent.bind(this,"gutterclick")),r.addListener(f,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),r.addListener(f,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),r.addListener(u,"mousedown",n),r.addListener(f,"mousedown",n),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,"mousedown",n),r.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle("default"):s.setCursorStyle("")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor,s=this.editor.renderer;s.$keepTextAreaAtCursor&&(s.$keepTextAreaAtCursor=null);var o=this,a=function(e){if(!e)return;if(i.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new u(e,o.editor),o.$mouseMoved=!0},f=function(e){n.off("beforeEndOperation",c),clearInterval(h),l(),o[o.state+"End"]&&o[o.state+"End"](e),o.state="",s.$keepTextAreaAtCursor==null&&(s.$keepTextAreaAtCursor=!0,s.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent("mouseup",e),n.endOperation()},l=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type=="dblclick")return setTimeout(function(){f(e)});var c=function(e){if(!o.releaseMouse)return;n.curOp.command.name&&n.curOp.selectionChanged&&(o[o.state+"End"]&&o[o.state+"End"](),o.state="",o.releaseMouse())};n.on("beforeEndOperation",c),n.startOperation({command:{name:"mouse"}}),o.$onCaptureMouseMove=a,o.releaseMouse=r.capture(this.editor.container,a,f);var h=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!="contextmenu")return;this.editor.off("nativecontextmenu",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(l.prototype),f.defineOptions(l.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimeout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),ace.define("ace/mouse/fold_handler",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";function i(e){e.on("click",function(t){var n=t.getDocumentPosition(),i=e.session,s=i.getFoldAt(n.row,n.column,1);s&&(t.getAccelKey()?i.removeFold(s):i.expandFold(s),t.stop());var o=t.domEvent&&t.domEvent.target;o&&r.hasCssClass(o,"ace_inline_button")&&r.hasCssClass(o,"ace_toggle_wrap")&&(i.setOption("wrap",!0),e.renderer.scrollCursorIntoView())}),e.on("gutterclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on("gutterdblclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}var r=e("../lib/dom");t.FoldHandler=i}),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,n){"use strict";var r=e("../lib/keys"),i=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e=="function"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||""}).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command=="null"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return!o&&e==-1&&(s={command:"insertstring"},o=u.exec("insertstring",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal("keyboardActivity",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s}),ace.define("ace/lib/bidiutil",["require","exports","module"],function(e,t,n){"use strict";function F(e,t,n,r){var i=s?d:p,c=null,h=null,v=null,m=0,g=null,y=null,b=-1,w=null,E=null,T=[];if(!r)for(w=0,r=[];w0)if(g==16){for(w=b;w-1){for(w=b;w=0;C--){if(r[C]!=N)break;t[C]=s}}}function I(e,t,n){if(o=e){u=i+1;while(u=e)u++;for(a=i,l=u-1;a=t.length||(o=n[r-1])!=b&&o!=w||(c=t[r+1])!=b&&c!=w)return E;return u&&(c=w),c==o?c:E;case k:o=r>0?n[r-1]:S;if(o==b&&r+10&&n[r-1]==b)return b;if(u)return E;p=r+1,h=t.length;while(p=1425&&d<=2303||d==64286;o=t[p];if(v&&(o==y||o==T))return y}if(r<1||(o=t[r-1])==S)return E;return n[r-1];case S:return u=!1,f=!0,s;case x:return l=!0,E;case O:case M:case D:case P:case _:u=!1;case H:return E}}function R(e){var t=e.charCodeAt(0),n=t>>8;return n==0?t>191?g:B[t]:n==5?/[\u0591-\u05f4]/.test(e)?y:g:n==6?/[\u0610-\u061a\u064b-\u065f\u06d6-\u06e4\u06e7-\u06ed]/.test(e)?A:/[\u0660-\u0669\u066b-\u066c]/.test(e)?w:t==1642?L:/[\u06f0-\u06f9]/.test(e)?b:T:n==32&&t<=8287?j[t&255]:n==254?t>=65136?T:E:E}function U(e){return e>="\u064b"&&e<="\u0655"}var r=["\u0621","\u0641"],i=["\u063a","\u064a"],s=0,o=0,u=!1,a=!1,f=!1,l=!1,c=!1,h=!1,p=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],d=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],v=0,m=1,g=0,y=1,b=2,w=3,E=4,S=5,x=6,T=7,N=8,C=9,k=10,L=11,A=12,O=13,M=14,_=15,D=16,P=17,H=18,B=[H,H,H,H,H,H,H,H,H,x,S,x,N,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,S,S,S,x,N,E,E,L,L,L,E,E,E,E,E,k,C,k,C,C,b,b,b,b,b,b,b,b,b,b,C,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,H,H,H,H,H,H,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,C,E,L,L,L,L,E,E,E,E,g,E,E,H,E,E,L,L,b,b,E,g,E,E,E,b,g,E,E,E,E,E],j=[N,N,N,N,N,N,N,N,N,N,N,H,H,H,g,y,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N,S,O,M,_,D,P,C,L,L,L,L,L,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,C,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,N];t.L=g,t.R=y,t.EN=b,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT="\u00b7",t.doBidiReorder=function(e,n,r){if(e.length<2)return{};var i=e.split(""),o=new Array(i.length),u=new Array(i.length),a=[];s=r?m:v,F(i,a,i.length,n);for(var f=0;fT&&n[f]0&&i[f-1]==="\u0644"&&/\u0622|\u0623|\u0625|\u0627/.test(i[f])&&(a[f-1]=a[f]=t.R_H,f++);i[i.length-1]===t.DOT&&(a[i.length-1]=t.B),i[0]==="\u202b"&&(a[0]=t.RLE);for(var f=0;f=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n,r=this.session.$getRowCacheIndex(t,this.currentRow);while(this.currentRow-e>0){n=this.session.$getRowCacheIndex(t,this.currentRow-e-1);if(n!==r)break;r=n,e++}}else e=this.currentRow;return e},this.updateRowLine=function(e,t){e===undefined&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1,s=n?this.EOF:this.EOL;this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.$isRtl||this.line.charAt(0)===this.RLE;if(this.session.$useWrapMode){var o=this.session.$wrapData[e];o&&(t===undefined&&(t=this.getSplitIndex()),t>0&&o.length?(this.wrapIndent=o.indent,this.wrapOffset=this.wrapIndent*this.charWidths[r.L],this.line=tt?this.session.getOverwrite()?e:e-1:t,i=r.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[i]%2!==0&&i++;for(var u=0;ut&&s[i]%2===0&&(o+=this.charWidths[s[i]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n=this.bidiMap,r=n.bidiLevels,i,s=[],o=0,u=Math.min(e,t)-this.wrapIndent,a=Math.max(e,t)-this.wrapIndent,f=!1,l=!1,c=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var h,p=0;p=u&&hn+s/2){n+=s;if(r===i.length-1){s=0;break}s=this.charWidths[i[++r]]}return r>0&&i[r-1]%2!==0&&i[r]%2===0?(e0&&i[r-1]%2===0&&i[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===i.length-1&&s===0&&i[r-1]%2===0||!this.isRtlDir&&r===0&&i[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&i[r-1]%2!==0&&s!==0&&r--,t=this.bidiMap.logicalFromVisual[r]),t===0&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o}),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/lang"),s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on("change",function(e){t.$cursorChanged=!0,t.$silent||t._emit("changeCursor"),!t.$isEmpty&&!t.$silent&&t._emit("changeSelection"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.anchor.on("change",function(){t.$anchorChanged=!0,!t.$isEmpty&&!t.$silent&&t._emit("changeSelection")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,r=t?e.start:e.end;this.$setSelection(n.row,n.column,r.row,r.column)},this.$setSelection=function(e,t,n,r){var i=this.$isEmpty,s=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,r),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit("changeCursor"),(this.$cursorChanged||this.$anchorChanged||i!=this.$isEmpty||s)&&this._emit("changeSelection")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t=="undefined"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e=="number"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var r=e.column,i=e.column+t;return n<0&&(r=e.column-t,i=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(r,i).split(" ").length-1==t},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(e,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i){this.moveCursorTo(i.end.row,i.end.column);return}this.session.nonTokenRe.exec(r)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t));if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e0&&this.moveCursorWordLeft();return}this.session.tokenRe.exec(s)&&(t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t=0,n,r=/\s/,i=this.session.tokenRe;i.lastIndex=0;if(this.session.tokenRe.exec(e))t=this.session.tokenRe.lastIndex;else{while((n=e[t])&&r.test(n))t++;if(t<1){i.lastIndex=0;while((n=e[t])&&!i.test(n)){i.lastIndex=0,t++;if(r.test(n)){if(t>2){t--;break}while((n=e[t])&&r.test(n))t++;if(t>2)break}}}}return i.lastIndex=0,t},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column),r;t===0&&(e!==0&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(r=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(r/this.session.$bidiHandler.charWidths[0])):r=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var i=this.session.screenToDocumentPosition(n.row+e,n.column,r);e!==0&&t===0&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||e>0)&&i.row++,this.moveCursorTo(i.row,i.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0;var i=this.session.getLine(e);/[\uDC00-\uDFFF]/.test(i.charAt(t))&&i.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList&&e.length>1){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),ace.define("ace/tokenizer",["require","exports","module","ace/config"],function(e,t,n){"use strict";var r=e("./config"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",u=[];for(var a=0;a1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\d/.test(f.regex)?l=f.regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!="string"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push("$")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp("("+r.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n=="string")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;il){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;yi){c>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(l1&&n[0]!==r&&n.unshift("#tmp",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new r(this.$row,t,this.$row,t+e.value.length)}}).call(i.prototype),t.TokenIterator=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c={'"':'"',"'":"'"},h=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},p=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},d=function(e){this.add("braces","insertion",function(t,n,r,i,s){var u=r.getCursorPosition(),a=i.doc.getLine(u.row);if(s=="{"){h(r);var l=r.getSelectionRange(),c=i.doc.getTextRange(l);if(c!==""&&c!=="{"&&r.getWrapBehavioursEnabled())return p(l,c,"{","}");if(d.isSaneInsertion(r,i))return/[\]\}\)]/.test(a[u.column])||r.inMultiSelectMode||e&&e.braces?(d.recordAutoInsert(r,i,"}"),{text:"{}",selection:[1,1]}):(d.recordMaybeInsert(r,i,"{"),{text:"{",selection:[1,1]})}else if(s=="}"){h(r);var v=a.substring(u.column,u.column+1);if(v=="}"){var m=i.$findOpeningBracket("}",{column:u.column+1,row:u.row});if(m!==null&&d.isAutoInsertedClosing(u,a,s))return d.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(s=="\n"||s=="\r\n"){h(r);var g="";d.isMaybeInsertedClosing(u,a)&&(g=o.stringRepeat("}",f.maybeInsertedBrackets),d.clearMaybeInsertedClosing());var v=a.substring(u.column,u.column+1);if(v==="}"){var y=i.findMatchingBracket({row:u.row,column:u.column+1},"}");if(!y)return null;var b=this.$getIndent(i.getLine(y.row))}else{if(!g){d.clearMaybeInsertedClosing();return}var b=this.$getIndent(a)}var w=b+i.getTabString();return{text:"\n"+w+"\n"+b+g,selection:[1,w.length,1,w.length]}}d.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return p(s,o,"(",")");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return p(s,o,"[","]");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){var s=r.$mode.$quotes||c;if(i.length==1&&s[i]){if(this.lineCommentStart&&this.lineCommentStart.indexOf(i)!=-1)return;h(n);var o=i,u=n.getSelectionRange(),a=r.doc.getTextRange(u);if(a!==""&&(a.length!=1||!s[a])&&n.getWrapBehavioursEnabled())return p(u,a,o,o);if(!a){var f=n.getCursorPosition(),l=r.doc.getLine(f.row),d=l.substring(f.column-1,f.column),v=l.substring(f.column,f.column+1),m=r.getTokenAt(f.row,f.column),g=r.getTokenAt(f.row,f.column+1);if(d=="\\"&&m&&/escape/.test(m.type))return null;var y=m&&/string|escape/.test(m.type),b=!g||/string|escape/.test(g.type),w;if(v==o)w=y!==b,w&&/string\.end/.test(g.type)&&(w=!1);else{if(y&&!b)return null;if(y&&b)return null;var E=r.$mode.tokenRe;E.lastIndex=0;var S=E.test(d);E.lastIndex=0;var x=E.test(d);if(S||x)return null;if(v&&!/[\s;,.})\]\\]/.test(v))return null;w=!0}return{text:w?o+o:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.$mode.$quotes||c,o=r.doc.getTextRange(i);if(!i.isMultiLine()&&s.hasOwnProperty(o)){h(n);var u=r.doc.getLine(i.start.row),a=u.substring(i.start.column+1,i.start.column+2);if(a==o)return i.end.column++,i}})};d.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},d.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},d.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},d.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},d.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},d.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},d.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},d.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(d,i),t.CstyleBehaviour=d}),ace.define("ace/unicode",["require","exports","module"],function(e,t,n){"use strict";var r=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],i=0,s=[];for(var o=0;o2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\S/);n!==-1?(ne.length&&(E=e.length)}),u==Infinity&&(u=E,s=!1,o=!1),l&&u%f!=0&&(u=Math.floor(u/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new f(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,a=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new l(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new f(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new l(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);a.start.row==c&&(a.start.column+=h),a.end.row==c&&(a.end.column+=h),t.selection.fromOrientedRange(a)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)if(e[t]){var n=e[t],i=n.prototype.$id,s=r.$modes[i];s||(r.$modes[i]=s=new n),r.$modes[t]||(r.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s}var o=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(var t=0;t=0&&t.row=0&&t.column<=e[t.row].length}function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.action must be 'insert' or 'remove'"),t.lines instanceof Array||r(t,"delta.lines must be an Array"),(!t.start||!t.end)&&r(t,"delta.start/end must be an present");var n=t.start;i(e,t.start)||r(t,"delta.start must be contained in document");var s=t.end;t.action=="remove"&&!i(e,s)&&r(t,"delta.end must contained in document for 'remove' actions");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,"delta.range must match delta lines")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||"";switch(t.action){case"insert":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case"remove":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.columnthis.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=e("./anchor").Anchor,a=function(e){this.$lines=[""],e.length===0?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:"insert",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,r=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action=="insert";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,r==-1&&(r=t),s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action=="remove")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=r.state+""?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+""==e+"")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:"");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e("../range").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row=r)break}if(e.action=="insert"){var f=i-r,l=-t.column+n.column;for(;or)break;a.start.row==r&&a.start.column>=t.column&&(a.start.column!=t.column||!this.$insertRight)&&(a.start.column+=l,a.start.row+=f);if(a.end.row==r&&a.end.column>=t.column){if(a.end.column==t.column&&this.$insertRight)continue;a.end.column==t.column&&l>0&&oa.start.column&&a.end.column==s[o+1].start.column&&(a.end.column-=l),a.end.column+=l,a.end.row+=f}}}else{var f=r-i,l=t.column-n.column;for(;oi)break;if(a.end.rowt.column)a.end.column=t.column,a.end.row=t.row}else a.end.column+=l,a.end.row+=f;else a.end.row>i&&(a.end.row+=f);if(a.start.rowt.column)a.start.column=t.column,a.start.row=t.row}else a.start.column+=l,a.start.row+=f;else a.start.row>i&&(a.start.row+=f)}}if(f!=0&&o=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i=t){u=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e=="number"?n=new r(e,0,e,this.getLine(e).length):"row"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk(function(e,t,n,u){if(tl)break}while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return f.end.row=i.getCurrentTokenRow(),f.end.column=i.getCurrentTokenColumn()+s.value.length-2,f}},this.foldAll=function(e,t,n){n==undefined&&(n=1e5);var r=this.foldWidgets;if(!r)return;t=t||this.getLength(),e=e||0;for(var i=e;i=e){i=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==e)return;this.$foldStyle=e,e=="manual"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation");if(!e||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s=="start"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n==="end"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range))return this.removeFold(s),s}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold("...",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action=="remove")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e("../range").Range,i=e("./fold_line").FoldLine,s=e("./fold").Fold,o=e("../token_iterator").TokenIterator;t.Folding=u}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,n){"use strict";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n=="")return null;var r=n.match(/([\(\[\{])|([\)\]\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{","<":">",">":"<"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,u),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):" "},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption("navigateWithinSoftTabs",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))var i=/\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(oe&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;ao){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=e.length-1;n!=-1;n--){var r=e[n];r.action=="insert"||r.action=="remove"?this.doc.revertDelta(r):r.folds&&this.addFolds(r.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=0;ne.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,f=s.start,o=f.row-a.row,u=f.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new l(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new l(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal("changeWrapMode")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n==="remove"){this[t?"$wrapData":"$rowLengthCache"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n==="remove"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),o=this.$wrapData,u=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,o){var u;if(e!=null){u=this.$getDisplayTokens(e,a.length),u[0]=n;for(var f=1;fr-b){var w=f+r-b;if(e[w-1]>=c&&e[w]>=c){y(w);continue}if(e[w]==n||e[w]==s){for(w;w!=f-1;w--)if(e[w]==n)break;if(w>f){y(w);continue}w=f+r;for(w;w>2)),f-1);while(w>E&&e[w]E&&e[w]E&&e[w]==a)w--}else while(w>E&&e[w]E){y(++w);continue}w=f+r,e[w]==t&&w--,y(w-b)}return o},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o39&&u<48||u>57&&u<64?i.push(a):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0)var u=f[l],i=this.$docRowCache[l],h=e>f[c-1];else var h=!c;var p=this.getLength()-1,d=this.getNextFoldLine(i),v=d?d.start.row:Infinity;while(u<=e){a=this.getRowLength(i);if(u+a>e||i>=p)break;u+=a,i++,i>v&&(i=d.end.row+1,d=this.getNextFoldLine(i,d),v=d?d.start.row:Infinity),h&&(this.$docRowCache.push(i),this.$screenRowCache.push(u))}if(d&&d.start.row<=i)r=this.getFoldDisplayLine(d),i=d.start.row;else{if(u+a<=e||i>p)return{row:p,column:this.getLine(p).length};r=this.getLine(i),d=null}var m=0,g=Math.floor(e-u);if(this.$useWrapMode){var y=this.$wrapData[i];y&&(o=y[g],g>0&&y.length&&(m=y.indent,s=y[g-1]||y[y.length-1],r=r.substring(s)))}return n!==undefined&&this.$bidiHandler.isBidiRow(u+g,i,g)&&(t=this.$bidiHandler.offsetToCol(n)),s+=this.$getStringScreenWidth(r,t-m)[1],this.$useWrapMode&&s>=o&&(s=o-1),d?d.idxToPosition(s):{row:i,column:s}},this.documentToScreenPosition=function(e,t){if(typeof t=="undefined")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d="";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;ro&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(t,n,r){if(n===0)return[0,0];n||(n=Infinity),r=r||0;var i,s;for(s=0;sn)break}return[r,s]}},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=m}.call(d.prototype),e("./edit_session/folding").Folding.call(d.prototype),e("./edit_session/bracket_match").BracketMatch.call(d.prototype),o.defineOptions(d.prototype,"session",{wrap:{set:function(e){!e||e=="off"?e=!1:e=="free"?e=!0:e=="printMargin"?e=-1:typeof e=="string"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e=="number"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e=e=="auto"?this.$mode.type!="text":e!="text",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:"auto"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){e=parseInt(e);if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize")},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=d}),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";function u(e,t){function n(e){return/\w/.test(e)||t.regExp?"\\b":""}return n(e[0])+e+n(e[e.length-1])}var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i,o){return r=new s(e,n,i,o),n==o&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start)?(r=null,!1):!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;hv)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;gE&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g=u;n--)if(c(n,Number.MAX_VALUE,e))return;if(t.wrap==0)return;for(n=a,u=o.row;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return};else var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n+=1;n<=a;n++)if(c(n,0,e))return;if(t.wrap==0)return;for(n=u,a=o.row;n<=a;n++)if(c(n,0,e))return};if(t.$isMultiLine)var l=n.length,c=function(t,i,s){var o=r?t-l+1:t;if(o<0)return;var u=e.getLine(o),a=u.search(n[0]);if(!r&&ai)return;if(s(o,a,o+l-1,c))return!0};else if(r)var c=function(t,r,i){var s=e.getLine(t),o=[],u,a=0;n.lastIndex=0;while(u=n.exec(s)){var f=u[0].length;a=u.index;if(!f){if(a>=s.length)break;n.lastIndex=a+=1}if(u.index+f>r)break;o.push(u.index,f)}for(var l=o.length-1;l>=0;l-=2){var c=o[l-1],f=o[l];if(i(t,c,t,c+f))return!0}};else var c=function(t,r,i){var s=e.getLine(t),o,u;n.lastIndex=r;while(u=n.exec(s)){var a=u[0].length;o=u.index;if(i(t,o,t,o+a))return!0;if(!a){n.lastIndex=o+=1;if(o>=s.length)return!1}}};return{forEach:f}}}).call(o.prototype),t.Search=o}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function o(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e("../lib/keys"),i=e("../lib/useragent"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e=="object"&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e=="string"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e=="object"&&e&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t=="function")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split("|").forEach(function(e){var r="";if(e.indexOf(" ")!=-1){var i=e.split(/\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?" ":"")+n,this._addCommandToBinding(r,"chainKeys")},this),r+=" "}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!="number"&&(r=e(n));var o=i[t];for(s=0;sr)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n=="string")return this.bindKey(n,t);typeof n=="function"&&(n={exec:n});if(typeof n!="object")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]=="shift")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!="undefined"&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){if(r<0)return;var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=" "+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o=="chainKeys"||o[o.length-1]=="chainKeys")return e.$keyChain=e.$keyChain||i,{command:"null"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=""}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e=="string"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(this.$checkCommandState!=0&&e.isAvailable&&!e.isAvailable(t))return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit("exec",i),this._signal("afterExec",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t=="string"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!="string"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,t,n){"use strict";function o(e,t){return{win:e,mac:t}}var r=e("../lib/lang"),i=e("../config"),s=e("../range").Range;t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){i.loadModule("ace/ext/settings_menu",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","F4"),exec:function(e){i.loadModule("./ext/error_marker",function(t){t.showErrorMarker(e,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Shift-F4"),exec:function(e){i.loadModule("./ext/error_marker",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",description:"Select all",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",description:"Center selection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",description:"Go to line...",bindKey:o("Ctrl-L","Command-L"),exec:function(e,t){typeof t=="number"&&!isNaN(t)&&e.gotoLine(t),e.prompt({$type:"gotoLine"})},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",description:"Fold all",bindKey:o(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",description:"Fold other",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",description:"Unfold all",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",description:"Find next",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",description:"Find previous",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",description:"Select or find next",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",description:"Select or find previous",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",description:"Find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e)})},readOnly:!0},{name:"overwrite",description:"Overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",description:"Select to start",bindKey:o("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",description:"Go to start",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",description:"Select up",bindKey:o("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",description:"Go line up",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",description:"Select to end",bindKey:o("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",description:"Go to end",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",description:"Select down",bindKey:o("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",description:"Go line down",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",description:"Select word left",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",description:"Go to word left",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",description:"Select to line start",bindKey:o("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",description:"Go to line start",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",description:"Select left",bindKey:o("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",description:"Go to left",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",description:"Select word right",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",description:"Go to word right",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",description:"Select to line end",bindKey:o("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",description:"Go to line end",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",description:"Select right",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",description:"Go to right",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",description:"Select page down",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",description:"Page down",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",description:"Go to page down",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",description:"Select page up",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",description:"Page up",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",description:"Go to page up",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",description:"Scroll up",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",description:"Scroll down",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",description:"Select line start",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",description:"Select line end",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",description:"Toggle recording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",description:"Replay macro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",description:"Jump to matching",bindKey:o("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",description:"Select to matching",bindKey:o("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",description:"Expand to matching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",description:"Pass keys to browser",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",description:"Copy",exec:function(e){},readOnly:!0},{name:"cut",description:"Cut",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty(),n=t?e.selection.getLineRange():e.selection.getRange();e._emit("cut",n),n.isEmpty()||e.session.remove(n),e.clearSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",description:"Paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",description:"Remove line",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",description:"Duplicate selection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",description:"Sort lines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",description:"Toggle comment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",description:"Toggle block comment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",description:"Modify number up",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",description:"Modify number down",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",description:"Replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e,!0)})}},{name:"undo",description:"Undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",description:"Redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",description:"Copy lines up",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",description:"Move lines up",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",description:"Copy lines down",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",description:"Move lines down",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",description:"Delete",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",description:"Backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",description:"Cut or delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",description:"Remove to line start",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",description:"Remove to line end",bindKey:o("Alt-Delete","Ctrl-K|Command-Delete"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestarthard",description:"Remove to line start hard",bindKey:o("Ctrl-Shift-Backspace",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineendhard",description:"Remove to line end hard",bindKey:o("Ctrl-Shift-Delete",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",description:"Remove word left",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",description:"Remove word right",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",description:"Outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",description:"Indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",description:"Block outdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",description:"Block indent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",description:"Insert string",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",description:"Insert text",exec:function(e,t){e.insert(r.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",description:"Split line",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",description:"Transpose letters",bindKey:o("Alt-Shift-X","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",description:"To uppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",description:"To lowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",description:"Expand to line",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",description:"Join lines",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\n\s*/," ").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=" "+c),f+=c}i.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",description:"Invert selection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n=="animate"&&this.renderer.animateScrolling(this.curOp.scrollTop)}var s=this.selection.toJSON();this.curOp.selectionAfter=s,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(s),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name=="insertstring"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\s/.test(i)||/\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!="always"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e=="string"&&e!="ace"){this.$keybindingId=e;var n=this;g.loadModule(["keybinding",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||i.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,"ace_bracket","text"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf("tag-open")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value=="<"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,"ace_active-line","screenLine"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column,r=t.end.column,i=e.getLine(t.start.row),s=i.substring(n,r);if(s.length>5e3||!/[\w\d]/.test(s))return;var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s}),u=i.substring(n-1,r+1);if(!o.test(u))return;return o},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;var r=this.selection.getAllRanges();for(var i=0;is.length||i.length<2||!i[1])return this.commands.exec("insertstring",this,t);for(var o=s.length;o--;){var u=s[o];u.isEmpty()||r.remove(u),r.insert(u.start,i[o])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),"insertion",this,n,e);s&&(e!==s.text&&(this.inVirtualSelectionMode||(this.session.mergeUndoDeltas=!1,this.mergeNextCommand=!1)),e=s.text)}e==" "&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()&&e.indexOf("\n")==-1){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e=="\n"||e=="\r\n"){var u=n.getLine(i.row);if(i.column>u.search(/\S|$/)){var a=u.substr(i.column).search(/\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:"insertstring"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){if(t.extendLeft||t.extendRight){var n=this.selection.getRange();n.start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),!e&&!n.isEmpty()&&this.remove()}(e||!this.selection.isEmpty())&&this.insert(e,!0);if(t.restoreStart||t.restoreEnd){var n=this.selection.getRange();n.start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n)}},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&(e=="left"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,"deletion",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]=="\n"){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.selection.isEmpty()&&this.selection.selectLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;tt.toLowerCase()?1:0});var i=new p(0,0,0,0);for(var r=e.first;r<=e.last;r++){var s=t.getLine(r);i.start.row=r,i.end.row=r,i.end.column=s.length,t.replace(i,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n=u&&o<=a&&(n=t,f.selection.clearSelection(),f.moveCursorTo(e,u+r),f.selection.selectTo(e,a+r)),u=a});var l=this.$toggleWordPairs,c;for(var h=0;hp+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection());var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g))for(;f=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e=="string"||e instanceof RegExp?t.needle=e:typeof e=="object"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var i=this.$scrollAnchor;i.style.cssText="position:absolute",this.container.insertBefore(i,this.container.firstChild);var s=this.on("changeSelection",function(){r=!0}),o=this.renderer.on("beforeRender",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on("afterRender",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.topwindow.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+"px",i.style.left=s.left+"px",i.style.height=o.lineHeight+"px",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",u),this.renderer.off("beforeRender",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!="wide",i.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e))},this.prompt=function(e,t,n){var r=this;g.loadModule("./ext/prompt",function(i){i.prompt(r,e,t,n)})}}.call(w.prototype),g.defineOptions(w.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?E.attach(this):E.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?E.attach(this):E.detach(this)}},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",displayIndentGuides:"renderer",showGutter:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",hasCssTransforms:"renderer",maxPixelHeight:"renderer",useTextareaForIME:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimeout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",navigateWithinSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"});var E={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?"\u00b7":""))+""},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on("changeSelection",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off("changeSelection",this.update),this.update(null,e)}};t.Editor=w}),ace.define("ace/undomanager",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){for(var n=t;n--;){var r=e[n];if(r&&!r[0].ignore){while(n0){a.row+=i,a.column+=a.row==r.row?s:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}}function f(e){return{row:e.row,column:e.column}}function l(e){return{start:f(e.start),end:f(e.end),action:e.action,lines:e.lines.slice()}}function c(e){e=e||this;if(Array.isArray(e))return e.map(c).join("\n");var t="";e.action?(t=e.action=="insert"?"+":"-",t+="["+e.lines+"]"):e.value&&(Array.isArray(e.value)?t=e.value.map(h).join("\n"):t=h(e.value)),e.start&&(t+=h(e));if(e.id||e.rev)t+=" ("+(e.id||e.rev)+")";return t}function h(e){return e.start.row+":"+e.start.column+"=>"+e.end.row+":"+e.end.column}function p(e,t){var n=e.action=="insert",r=t.action=="insert";if(n&&r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}else if(!n&&r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(!n&&!r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}return[t,e]}function d(e,t){for(var n=e.length;n--;)for(var r=0;r=0?m(e,t,-1):o(e.start,t.start)<=0?m(t,e,1):(m(e,s.fromPoints(t.start,e.start),-1),m(t,e,1));else if(!n&&r)o(t.start,e.end)>=0?m(t,e,-1):o(t.start,e.start)<=0?m(e,t,1):(m(t,s.fromPoints(e.start,t.start),-1),m(e,t,1));else if(!n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0)){var i,u;return o(e.start,t.start)<0&&(i=e,e=y(e,t.start)),o(e.end,t.end)>0&&(u=y(e,t.end)),g(t.end,e.start,e.end,-1),u&&!i&&(e.lines=u.lines,e.start=u.start,e.end=u.end,u=e),[t,i,u].filter(Boolean)}m(e,t,-1)}return[t,e]}function m(e,t,n){g(e.start,t.start,t.end,n),g(e.end,t.start,t.end,n)}function g(e,t,n,r){e.row==(r==1?t:n).row&&(e.column+=r*(n.column-t.column)),e.row+=r*(n.row-t.row)}function y(e,t){var n=e.lines,r=e.end;e.end=f(t);var i=e.end.row-e.start.row,s=n.splice(i,n.length),o=i?t.column:t.column-e.start.column;n.push(s[0].substring(0,o)),s[0]=s[0].substr(o);var u={start:f(t),end:r,lines:s,action:e.action};return u}function b(e,t){t=l(t);for(var n=e.length;n--;){var r=e[n];for(var i=0;i0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){e==undefined&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?c(e):c(this.$undoStack)+"\n---\n"+c(this.$redoStack)}}).call(r.prototype);var s=e("./range").Range,o=s.comparePoints,u=s.comparePoints;t.UndoManager=r}),ace.define("ace/layer/lines",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=function(e,t){this.element=e,this.canvasHeight=t||5e5,this.element.style.height=this.canvasHeight*2+"px",this.cells=[],this.cellCache=[],this.$offsetCoefficient=0};(function(){this.moveContainer=function(e){r.translate(this.element,0,-(e.firstRowScreen*e.lineHeight%this.canvasHeight)-e.offset*this.$offsetCoefficient)},this.pageChanged=function(e,t){return Math.floor(e.firstRowScreen*e.lineHeight/this.canvasHeight)!==Math.floor(t.firstRowScreen*t.lineHeight/this.canvasHeight)},this.computeLineTop=function(e,t,n){var r=t.firstRowScreen*t.lineHeight,i=Math.floor(r/this.canvasHeight),s=n.documentToScreenRow(e,0)*t.lineHeight;return s-i*this.canvasHeight},this.computeLineHeight=function(e,t,n){return t.lineHeight*n.getRowLength(e)},this.getLength=function(){return this.cells.length},this.get=function(e){return this.cells[e]},this.shift=function(){this.$cacheCell(this.cells.shift())},this.pop=function(){this.$cacheCell(this.cells.pop())},this.push=function(e){if(Array.isArray(e)){this.cells.push.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;ns&&(a=i.end.row+1,i=t.getNextFoldLine(a,i),s=i?i.start.row:Infinity);if(a>r){while(this.$lines.getLength()>u+1)this.$lines.pop();break}o=this.$lines.get(++u),o?o.row=a:(o=this.$lines.createCell(a,e,this.session,f),this.$lines.push(o)),this.$renderCell(o,e,i,a),a++}this._signal("afterRender"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,r=t.$firstLineNumber,i=this.$lines.last()?this.$lines.last().text:"";if(this.$fixedWidth||t.$useWrapMode)i=t.getLength()+r-1;var s=n?n.getWidth(t,i,e):i.toString().length*e.characterWidth,o=this.$padding||this.$computePadding();s+=o.left+o.right,s!==this.gutterWidth&&!isNaN(s)&&(this.gutterWidth=s,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._signal("changeGutterWidth",s))},this.$updateCursorRow=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.getCursor();if(this.$cursorRow===e.row)return;this.$cursorRow=e.row},this.updateLineHighlight=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.cursor.row;this.$cursorRow=e;if(this.$cursorCell&&this.$cursorCell.row==e)return;this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ",""));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n=this.$cursorRow){if(r.row>this.$cursorRow){var i=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&i&&i.start.row==t[n-1].row))break;r=t[n-1]}r.element.className="ace_gutter-active-line "+r.element.className,this.$cursorCell=r;break}}},this.scrollLines=function(e){var t=this.config;this.config=e,this.$updateCursorRow();if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),r=this.oldLastRow;this.oldLastRow=n;if(!t||r0;i--)this.$lines.shift();if(r>n)for(var i=this.session.getFoldedRowCount(n+1,r);i>0;i--)this.$lines.pop();e.firstRowr&&this.$lines.push(this.$renderLines(e,r+1,n)),this.updateLineHighlight(),this._signal("afterRender"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){var r=[],i=t,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>n)break;var u=this.$lines.createCell(i,e,this.session,f);this.$renderCell(u,e,s,i),r.push(u),i++}return r},this.$renderCell=function(e,t,n,i){var s=e.element,o=this.session,u=s.childNodes[0],a=s.childNodes[1],f=o.$firstLineNumber,l=o.$breakpoints,c=o.$decorations,h=o.gutterRenderer||this.$renderer,p=this.$showFoldWidgets&&o.foldWidgets,d=n?n.start.row:Number.MAX_VALUE,v="ace_gutter-cell ";this.$highlightGutterLine&&(i==this.$cursorRow||n&&i=d&&this.$cursorRow<=n.end.row)&&(v+="ace_gutter-active-line ",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace("ace_gutter-active-line ","")),this.$cursorCell=e)),l[i]&&(v+=l[i]),c[i]&&(v+=c[i]),this.$annotations[i]&&(v+=this.$annotations[i].className),s.className!=v&&(s.className=v);if(p){var m=p[i];m==null&&(m=p[i]=o.getFoldWidget(i))}if(m){var v="ace_fold-widget ace_"+m;m=="start"&&i==d&&in.right-t.right)return"foldWidgets"}}).call(a.prototype),t.Gutter=a}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../range").Range,i=e("../lib/dom"),s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=this.i!=-1&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement("div"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(!e)return;this.config=e,this.i=0;var t;for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type=="fullLine"?this.drawFullLineMarker(t,i,r.clazz,e):r.type=="screenLine"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type=="text"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+" ace_start"+" ace_br15",e)}if(this.i!=-1)while(this.ip,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||"";if(this.session.$bidiHandler.isBidiRow(t.start.row)){var f=t.clone();f.end.row=f.start.row,f.end.column=this.session.getLine(f.start.row).length,this.drawBidiSingleLineMarker(e,f,n+" ace_br1 ace_start",r,null,i)}else this.elt(n+" ace_br1 ace_start","height:"+o+"px;"+"right:0;"+"top:"+u+"px;left:"+a+"px;"+(i||""));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var f=t.clone();f.start.row=f.end.row,f.start.column=0,this.drawBidiSingleLineMarker(e,f,n+" ace_br12",r,null,i)}else{u=this.$getTop(t.end.row,r);var l=t.end.column*r.characterWidth;this.elt(n+" ace_br12","height:"+o+"px;"+"width:"+l+"px;"+"top:"+u+"px;"+"left:"+s+"px;"+(i||""))}o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var c=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(c?" ace_br"+c:""),"height:"+o+"px;"+"right:0;"+"top:"+u+"px;"+"left:"+s+"px;"+(i||""))},this.drawSingleLineMarker=function(e,t,n,r,i,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,r,i,s);var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;this.elt(n,"height:"+o+"px;"+"width:"+u+"px;"+"top:"+a+"px;"+"left:"+f+"px;"+(s||""))},this.drawBidiSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=this.$getTop(t.start.row,r),a=this.$padding,f=this.session.$bidiHandler.getSelections(t.start.column,t.end.column);f.forEach(function(e){this.elt(n,"height:"+o+"px;"+"width:"+e.width+(i||0)+"px;"+"top:"+u+"px;"+"left:"+(a+e.left)+"px;"+(s||""))},this)},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),this.elt(n,"height:"+o+"px;"+"top:"+s+"px;"+"left:0;right:0;"+(i||""))},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;this.elt(n,"height:"+o+"px;"+"top:"+s+"px;"+"left:0;right:0;"+(i||""))}}).call(s.prototype),t.Marker=s}),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/layer/lines","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("./lines").Lines,u=e("../lib/event_emitter").EventEmitter,a=function(e){this.dom=i,this.element=this.dom.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)};(function(){r.implement(this,u),this.EOF_CHAR="\u00b6",this.EOL_CHAR_LF="\u00ac",this.EOL_CHAR_CRLF="\u00a4",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="\u2014",this.SPACE_CHAR="\u00b7",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t=e.getNewLineCharacter()=="\n"&&e.getNewLineMode()!="windows",n=t?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=n)return this.EOL_CHAR=n,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;nl&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),l=a?a.start.row:Infinity);if(u>i)break;var c=s[o++];if(c){this.dom.removeChildren(c),this.$renderLine(c,u,u==l?a:!1);var h=e.lineHeight*this.session.getRowLength(u)+"px";c.style.height!=h&&(f=!0,c.style.height=h)}u++}if(f)while(o0;i--)this.$lines.shift();if(t.lastRow>e.lastRow)for(var i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)this.$lines.pop();e.firstRowt.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){var r=[],s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=this.$lines.createCell(s,e,this.session),f=a.element;this.dom.removeChildren(f),i.setStyle(f.style,"height",this.$lines.computeLineHeight(s,e,this.session)+"px"),i.setStyle(f.style,"top",this.$lines.computeLineTop(s,e,this.session)+"px"),this.$renderLine(f,s,s==u?o:!1),this.$useLineGroups()?f.className="ace_line_group":f.className="ace_line",r.push(a),s++}return r},this.update=function(e){this.$lines.moveContainer(e),this.config=e;var t=e.firstRow,n=e.lastRow,r=this.$lines;while(r.getLength())r.pop();r.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/(\t)|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\uFEFF\uFFF9-\uFFFC]+)|(\u3000)|([\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3001-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]|[\uD800-\uDBFF][\uDC00-\uDFFF])/g,u=this.dom.createFragment(this.element),a,f=0;while(a=o.exec(r)){var l=a[1],c=a[2],h=a[3],p=a[4],d=a[5];if(!i.showInvisibles&&c)continue;var v=f!=a.index?r.slice(f,a.index):"";f=a.index+a[0].length,v&&u.appendChild(this.dom.createTextNode(v,this.element));if(l){var m=i.session.getScreenTabSize(t+a.index);u.appendChild(i.$tabStrings[m].cloneNode(!0)),t+=m-1}else if(c)if(i.showInvisibles){var g=this.dom.createElement("span");g.className="ace_invisible ace_invisible_space",g.textContent=s.stringRepeat(i.SPACE_CHAR,c.length),u.appendChild(g)}else u.appendChild(this.com.createTextNode(c,this.element));else if(h){var g=this.dom.createElement("span");g.className="ace_invisible ace_invisible_space ace_invalid",g.textContent=s.stringRepeat(i.SPACE_CHAR,h.length),u.appendChild(g)}else if(p){var y=i.showInvisibles?i.SPACE_CHAR:"";t+=1;var g=this.dom.createElement("span");g.style.width=i.config.characterWidth*2+"px",g.className=i.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",g.textContent=i.showInvisibles?i.SPACE_CHAR:"",u.appendChild(g)}else if(d){t+=1;var g=this.dom.createElement("span");g.style.width=i.config.characterWidth*2+"px",g.className="ace_cjk",g.textContent=d,u.appendChild(g)}}u.appendChild(this.dom.createTextNode(f?r.slice(f):r,this.element));if(!this.$textToken[n.type]){var b="ace_"+n.type.replace(/\./g," ace_"),g=this.dom.createElement("span");n.type=="fold"&&(g.style.width=n.value.length*this.config.characterWidth+"px"),g.className=b,g.appendChild(u),e.appendChild(g)}else e.appendChild(u);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);if(r<=0||r>=n)return t;if(t[0]==" "){r-=r%this.tabSize;var i=r/this.tabSize;for(var s=0;s=o)u=this.$renderToken(a,u,l,c.substring(0,o-r)),c=c.substring(o-r),r=o,a=this.$createLineElement(),e.appendChild(a),a.appendChild(this.dom.createTextNode(s.stringRepeat("\u00a0",n.indent),this.element)),i++,u=0,o=n[i]||Number.MAX_VALUE;c.length!=0&&(r+=c.length,u=this.$renderToken(a,u,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;sthis.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,r,i);n=this.$renderToken(e,n,r,i)}},this.$renderOverflowMessage=function(e,t,n,r){this.$renderToken(e,t,n,r.slice(0,this.MAX_LINE_LENGTH-t));var i=this.dom.createElement("span");i.className="ace_inline_button ace_keyword ace_toggle_wrap",i.style.position="absolute",i.style.right="0",i.textContent="",e.appendChild(i)},this.$renderLine=function(e,t,n){!n&&n!=0&&(n=this.session.getFoldLine(t));if(n)var r=this.$getFoldLineTokens(t,n);else var r=this.session.getTokens(t);var i=e;if(r.length){var s=this.session.getRowSplitData(t);if(s&&s.length){this.$renderWrappedLine(e,r,s);var i=e.lastChild}else{var i=e;this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i)),this.$renderSimpleLine(i,r)}}else this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i));if(this.showInvisibles&&i){n&&(t=n.end.row);var o=this.dom.createElement("span");o.className="ace_invisible ace_invisible_eol",o.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,i.appendChild(o)}},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.lengthn-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(sn?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:"fold",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(a.prototype),t.Text=a}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)r.setStyle(t[n].style,"opacity",e?"":"0")},this.$startCssAnimation=function(){var e=this.cursors;for(var t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+"ms";setTimeout(function(){r.addCssClass(this.element,"ace_animate-blinking")}.bind(this))},this.$stopCssAnimation=function(){r.removeCssClass(this.element,"ace_animate-blinking")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible){this.$stopCssAnimation();return}this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));if(r.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.isCursorInView=function(e,t){return e.top>=0&&e.tope.height+e.offset||o.top<0)&&n>1)continue;var u=this.cursors[i++]||this.addCursor(),a=u.style;this.drawCursor?this.drawCursor(u,o,e,t[n],this.session):this.isCursorInView(o,e)?(r.setStyle(a,"display","block"),r.translate(u,o.left,o.top),r.setStyle(a,"width",Math.round(e.characterWidth)+"px"),r.setStyle(a,"height",e.lineHeight+"px")):r.setStyle(a,"display","none")}while(this.cursors.length>i)this.removeCursor();var f=this.session.getOverwrite();this.$setOverwrite(f),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(i.prototype),t.Cursor=i}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,u=32768,a=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(a.prototype);var f=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px",this.$minWidth=0};r.inherits(f,a),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){this.scrollTop=this.element.scrollTop;if(this.coeff!=1){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>u?(this.coeff=u/e,e=u):this.coeff!=1&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(f.prototype);var l=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};r.inherits(l,a),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=f,t.ScrollBarV=f,t.ScrollBarH=l,t.VScrollBar=f,t.HScrollBar=l}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,n){"use strict";var r=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;t&&(r.blockIdle(100),n.changes=0,n.onRender(t));if(n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(r.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(i.prototype),t.RenderLoop=i}),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/event"),u=e("../lib/useragent"),a=e("../lib/event_emitter").EventEmitter,f=256,l=typeof ResizeObserver=="function",c=200,h=t.FontMetrics=function(e){this.el=i.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=s.stringRepeat("X",f),this.$characterSize={width:0,height:0},l?this.$addObserver():this.checkForSizeChanges()};(function(){r.implement(this,a),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",u.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(e){e===undefined&&(e=this.$measureSizes());if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver(function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/f})}),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle(function t(){e.checkForSizeChanges(),o.onIdle(t,500)},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/f};return t.width===0||t.height===0?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,f);var t=this.$main.getBoundingClientRect();return t.width/f},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return["div",{style:"position: absolute;top:"+e+"px;left:"+t+"px;"}]};this.els=i.buildDom([e(0,0),e(c,0),e(0,c),e(c,c)],this.el)},this.transformCoordinates=function(e,t){function r(e,t,n){var r=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/r,(+e[1]*n[0]-e[0]*n[1])/r]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function s(e,t){return[e[0]+t[0],e[1]+t[1]]}function o(e,t){return[e*t[0],e*t[1]]}function u(e){var t=e.getBoundingClientRect();return[t.left,t.top]}if(e){var n=this.$getZoom(this.el);e=o(1/n,e)}this.els||this.$initTransformMeasureNodes();var a=u(this.els[0]),f=u(this.els[1]),l=u(this.els[2]),h=u(this.els[3]),p=r(i(h,f),i(h,l),i(s(f,l),s(h,a))),d=o(1+p[0],i(f,a)),v=o(1+p[1],i(l,a));if(t){var m=t,g=p[0]*m[0]/c+p[1]*m[1]/c+1,y=s(o(m[0],d),o(m[1],v));return s(o(1/g/c,y),a)}var b=i(e,a),w=r(i(d,o(p[0],b)),i(v,o(p[1],b)),b);return o(c,w)}}).call(h.prototype)}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./config"),o=e("./layer/gutter").Gutter,u=e("./layer/marker").Marker,a=e("./layer/text").Text,f=e("./layer/cursor").Cursor,l=e("./scrollbar").HScrollBar,c=e("./scrollbar").VScrollBar,h=e("./renderloop").RenderLoop,p=e("./layer/font_metrics").FontMetrics,d=e("./lib/event_emitter").EventEmitter,v='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}',m=e("./lib/useragent"),g=m.isIE;i.importCssString(v,"ace_editor.css");var y=function(e,t){var n=this;this.container=e||i.createElement("div"),i.addCssClass(this.container,"ace_editor"),i.HI_DPI&&i.addCssClass(this.container,"ace_hidpi"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.$gutter.setAttribute("aria-hidden",!0),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new u(this.content);var r=this.$textLayer=new a(this.content);this.canvas=r.element,this.$markerFront=new u(this.content),this.$cursorLayer=new f(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new c(this.container,this),this.scrollBarH=new l(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!m.isIOS,this.$loop=new h(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,d),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var s=0,o=this.$size,u={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};r&&(e||o.height!=r)&&(o.height=r,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",s|=this.CHANGE_SCROLL);if(n&&(e||o.width!=n)){s|=this.CHANGE_SIZE,o.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,i.setStyle(this.scrollBarH.element.style,"left",t+"px"),i.setStyle(this.scroller.style,"left",t+this.margin.left+"px"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),i.setStyle(this.$gutter.style,"left",this.margin.left+"px");var a=this.scrollBarV.getWidth()+"px";i.setStyle(this.scrollBarH.element.style,"right",a),i.setStyle(this.scroller.style,"right",a),i.setStyle(this.scroller.style,"bottom",this.scrollBarH.getHeight());if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)s|=this.CHANGE_FULL}return o.$dirty=!n||!r,s&&this._signal("resize",u),s},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){var e=this.textarea.style;if(!this.$keepTextAreaAtCursor){i.translate(this.textarea,-100,0);return}var t=this.$cursorLayer.$pixelPos;if(!t)return;var n=this.$composition;n&&n.markerRange&&(t=this.$cursorLayer.getPixelPosition(n.markerRange.start,!0));var r=this.layerConfig,s=t.top,o=t.left;s-=r.offset;var u=n&&n.useTextareaForIME?this.lineHeight:g?0:1;if(s<0||s>r.height-u){i.translate(this.textarea,0,0);return}var a=1;if(!n)s+=this.lineHeight;else if(n.useTextareaForIME){var f=this.textarea.value;a=this.characterWidth*this.session.$getStringScreenWidth(f)[0],u+=2}else s+=this.lineHeight+2;o-=this.scrollLeft,o>this.$size.scrollerWidth-a&&(o=this.$size.scrollerWidth-a),o+=this.gutterWidth+this.margin.left,i.setStyle(e,"height",u+"px"),i.setStyle(e,"width",a+"px"),i.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-a),Math.min(s,this.$size.height-u))},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.setMargin=function(e,t,n,r){var i=this.margin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig()|this.$loop.clear();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),i.translate(this.content,-this.scrollLeft,-n.offset);var s=n.width+2*this.$padding+"px",o=n.minHeight+"px";i.setStyle(this.content.style,"width",s),i.setStyle(this.content.style,"height",o)}e&this.CHANGE_H_SCROLL&&(i.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal("afterRender");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal("afterRender");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var r=n<=2*this.lineHeight,i=!r&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var s=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,s,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=t.scrollerHeight+this.lineHeight,l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l;var c=this.scrollMargin;this.session.setScrollTop(Math.max(-c.top,Math.min(this.scrollTop,i-t.scrollerHeight+c.bottom))),this.session.setScrollLeft(Math.max(-c.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+c.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop>c.top),p=a!==h;p&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var d=this.scrollTop%this.lineHeight,v=Math.ceil(f/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-d)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),f=t.scrollerHeight+e.getRowLength(g)*w+b,d=this.scrollTop-y*w;var S=0;if(this.layerConfig.width!=s||u)S=this.CHANGE_H_SCROLL;if(u||p)S|=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),p&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:f,maxHeight:i,offset:d,gutterOffset:w?Math.max(0,Math.ceil((d+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(s-this.$padding),S},this.$updateLines=function(){if(!this.$changedLines)return;var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(tthis.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(this.$size.scrollerHeight===0)return;var r=this.$cursorLayer.getPixelPosition(e),i=r.left,s=r.top,o=n&&n.top||0,u=n&&n.bottom||0,a=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;a+o>s?(t&&a+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-ui?(i=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),u=this.$blockCursor?Math.floor(s):Math.round(s);return{row:o,column:u,side:s-u>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=this.$blockCursor?Math.floor(s):Math.round(s),u=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(u,Math.max(o,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+(this.session.$bidiHandler.isBidiRow(r.row,e)?this.session.$bidiHandler.getPosLeft(r.column):Math.round(r.column*this.characterWidth)),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText,e.keepTextAreaAtCursor=this.$keepTextAreaAtCursor),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display="none"):e.markerId=this.session.addMarker(e.markerRange,"ace_composition_marker","text")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,"composition_placeholder",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display=""},this.addToken=function(e,t,n,r){var i=this.session;i.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=i.getTokens(n);if(r==null)o.push(s);else{var u=0;for(var a=0;a50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e})}}).call(f.prototype);var l=function(e,t,n){var r=null,i=!1,u=Object.create(s),a=[],l=new f({messageBuffer:a,terminate:function(){},postMessage:function(e){a.push(e);if(!r)return;i?setTimeout(c):c()}});l.setEmitSync=function(e){i=e};var c=function(){var e=a.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};return u.postMessage=function(e){l.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],function(e){r=new e[n](u);while(a.length)c()}),l};t.UIWorkerClient=l,t.WorkerClient=f,t.createWorker=a}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;this.updateAnchors(e),i&&(this.length+=n);if(i&&!this.session.$fromUndo)if(e.action==="insert")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.insertMergedLines(a,e.lines)}else if(e.action==="remove")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(this.$updating)return;var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)return;var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal("removeRange",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.cursor),s=this.session.documentToScreenPosition(this.anchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column0)g--;if(g>0){var y=0;while(r[y].isEmpty())y++}for(var b=g;b>=y;b--)r[b].isEmpty()&&r.splice(b,1)}return r}}.call(s.prototype);var d=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction=="forEach"?r=n.forEachSelection(t,e.args):t.multiSelectAction=="forEachLine"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction=="single"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges(),u.ranges[0]&&u.fromOrientedRange(u.ranges[0]);var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join("\n")+"\n"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),io?e.insert(r,a.stringRepeat(" ",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(" ",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),st[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?"start":t=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++tf){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a=="start"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',t.$id="ace/theme/textmate";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./range").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(!n||!e.action)return;var r=e.data,i=r.start.row,s=r.end.row,o=e.action=="add";for(var u=i+1;u0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+"px";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+"px";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+"px",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+"px"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+"px":u.el.style.right=""}}}).call(o.prototype),t.LineWidgets=o}),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?"unshift":"push"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e("../line_widgets").LineWidgets,i=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type=="errorMarker"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!="number"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div"),type:"errorMarker"},p=h.el.appendChild(i.createElement("div")),d=h.el.appendChild(i.createElement("div"));d.className="error_widget_arrow "+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",p.className="error_widget "+l.className,p.innerHTML=l.text.join("
"),p.appendChild(i.createElement("div"));var m=function(e,t,n){if(t===0&&(n==="esc"||n==="return"))return h.destroy(),{command:"null"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/range","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./range").Range,o=e("./editor").Editor,u=e("./edit_session").EditSession,a=e("./undomanager").UndoManager,f=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,typeof define=="function"&&(t.define=define),t.edit=function(e,n){if(typeof e=="string"){var s=e;e=document.getElementById(s);if(!e)throw new Error("ace.edit can't find div #"+s)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var u="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;u=a.value,e=r.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(u=e.textContent,e.innerHTML="");var l=t.createEditSession(u),c=new o(new f(e),l,n),h={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(h.textarea=a),i.addListener(window,"resize",h.onResize),c.on("destroy",function(){i.removeListener(window,"resize",h.onResize),h.editor.container.env=null}),c.container.env=c.env=h,c},t.createEditSession=function(e,t){var n=new u(e,t);return n.setUndoManager(new a),n},t.Range=s,t.Editor=o,t.EditSession=u,t.UndoManager=a,t.VirtualRenderer=f,t.version="1.4.4"}); (function() { + ace.require(["ace/ace"], function(a) { + if (a) { + a.config.init(true); + a.define = ace.define; + } + if (!window.ace) + window.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + window.ace[key] = a[key]; + window.ace["default"] = window.ace; + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = window.ace; + } + }); + })(); diff --git a/ayu-highlight.css b/ayu-highlight.css new file mode 100644 index 0000000000..32c9432224 --- /dev/null +++ b/ayu-highlight.css @@ -0,0 +1,78 @@ +/* +Based off of the Ayu theme +Original by Dempfi (https://github.com/dempfi/ayu) +*/ + +.hljs { + display: block; + overflow-x: auto; + background: #191f26; + color: #e6e1cf; +} + +.hljs-comment, +.hljs-quote { + color: #5c6773; + font-style: italic; +} + +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-attr, +.hljs-regexp, +.hljs-link, +.hljs-selector-id, +.hljs-selector-class { + color: #ff7733; +} + +.hljs-number, +.hljs-meta, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #ffee99; +} + +.hljs-string, +.hljs-bullet { + color: #b8cc52; +} + +.hljs-title, +.hljs-built_in, +.hljs-section { + color: #ffb454; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-symbol { + color: #ff7733; +} + +.hljs-name { + color: #36a3d9; +} + +.hljs-tag { + color: #00568d; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #91b362; +} + +.hljs-deletion { + color: #d96c75; +} diff --git a/book.js b/book.js new file mode 100644 index 0000000000..aa12e7eccf --- /dev/null +++ b/book.js @@ -0,0 +1,697 @@ +"use strict"; + +// Fix back button cache problem +window.onunload = function () { }; + +// Global variable, shared between modules +function playground_text(playground, hidden = true) { + let code_block = playground.querySelector("code"); + + if (window.ace && code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + return editor.getValue(); + } else if (hidden) { + return code_block.textContent; + } else { + return code_block.innerText; + } +} + +(function codeSnippets() { + function fetch_with_timeout(url, options, timeout = 6000) { + return Promise.race([ + fetch(url, options), + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)) + ]); + } + + var playgrounds = Array.from(document.querySelectorAll(".playground")); + if (playgrounds.length > 0) { + fetch_with_timeout("https://play.rust-lang.org/meta/crates", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + }) + .then(response => response.json()) + .then(response => { + // get list of crates available in the rust playground + let playground_crates = response.crates.map(item => item["id"]); + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates)); + }); + } + + function handle_crate_list_update(playground_block, playground_crates) { + // update the play buttons after receiving the response + update_play_button(playground_block, playground_crates); + + // and install on change listener to dynamically update ACE editors + if (window.ace) { + let code_block = playground_block.querySelector("code"); + if (code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + editor.addEventListener("change", function (e) { + update_play_button(playground_block, playground_crates); + }); + // add Ctrl-Enter command to execute rust code + editor.commands.addCommand({ + name: "run", + bindKey: { + win: "Ctrl-Enter", + mac: "Ctrl-Enter" + }, + exec: _editor => run_rust_code(playground_block) + }); + } + } + } + + // updates the visibility of play button based on `no_run` class and + // used crates vs ones available on https://play.rust-lang.org + function update_play_button(pre_block, playground_crates) { + var play_button = pre_block.querySelector(".play-button"); + + // skip if code is `no_run` + if (pre_block.querySelector('code').classList.contains("no_run")) { + play_button.classList.add("hidden"); + return; + } + + // get list of `extern crate`'s from snippet + var txt = playground_text(pre_block); + var re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g; + var snippet_crates = []; + var item; + while (item = re.exec(txt)) { + snippet_crates.push(item[1]); + } + + // check if all used crates are available on play.rust-lang.org + var all_available = snippet_crates.every(function (elem) { + return playground_crates.indexOf(elem) > -1; + }); + + if (all_available) { + play_button.classList.remove("hidden"); + } else { + play_button.classList.add("hidden"); + } + } + + function run_rust_code(code_block) { + var result_block = code_block.querySelector(".result"); + if (!result_block) { + result_block = document.createElement('code'); + result_block.className = 'result hljs language-bash'; + + code_block.append(result_block); + } + + let text = playground_text(code_block); + let classes = code_block.querySelector('code').classList; + let edition = "2015"; + if(classes.contains("edition2018")) { + edition = "2018"; + } else if(classes.contains("edition2021")) { + edition = "2021"; + } + var params = { + version: "stable", + optimize: "0", + code: text, + edition: edition + }; + + if (text.indexOf("#![feature") !== -1) { + params.version = "nightly"; + } + + result_block.innerText = "Running..."; + + fetch_with_timeout("https://play.rust-lang.org/evaluate.json", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + body: JSON.stringify(params) + }) + .then(response => response.json()) + .then(response => { + if (response.result.trim() === '') { + result_block.innerText = "No output"; + result_block.classList.add("result-no-output"); + } else { + result_block.innerText = response.result; + result_block.classList.remove("result-no-output"); + } + }) + .catch(error => result_block.innerText = "Playground Communication: " + error.message); + } + + // Syntax highlighting Configuration + hljs.configure({ + tabReplace: ' ', // 4 spaces + languages: [], // Languages used for auto-detection + }); + + let code_nodes = Array + .from(document.querySelectorAll('code')) + // Don't highlight `inline code` blocks in headers. + .filter(function (node) {return !node.parentElement.classList.contains("header"); }); + + if (window.ace) { + // language-rust class needs to be removed for editable + // blocks or highlightjs will capture events + code_nodes + .filter(function (node) {return node.classList.contains("editable"); }) + .forEach(function (block) { block.classList.remove('language-rust'); }); + + code_nodes + .filter(function (node) {return !node.classList.contains("editable"); }) + .forEach(function (block) { hljs.highlightBlock(block); }); + } else { + code_nodes.forEach(function (block) { hljs.highlightBlock(block); }); + } + + // Adding the hljs class gives code blocks the color css + // even if highlighting doesn't apply + code_nodes.forEach(function (block) { block.classList.add('hljs'); }); + + Array.from(document.querySelectorAll("code.hljs")).forEach(function (block) { + + var lines = Array.from(block.querySelectorAll('.boring')); + // If no lines were hidden, return + if (!lines.length) { return; } + block.classList.add("hide-boring"); + + var buttons = document.createElement('div'); + buttons.className = 'buttons'; + buttons.innerHTML = ""; + + // add expand button + var pre_block = block.parentNode; + pre_block.insertBefore(buttons, pre_block.firstChild); + + pre_block.querySelector('.buttons').addEventListener('click', function (e) { + if (e.target.classList.contains('fa-eye')) { + e.target.classList.remove('fa-eye'); + e.target.classList.add('fa-eye-slash'); + e.target.title = 'Hide lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.remove('hide-boring'); + } else if (e.target.classList.contains('fa-eye-slash')) { + e.target.classList.remove('fa-eye-slash'); + e.target.classList.add('fa-eye'); + e.target.title = 'Show hidden lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.add('hide-boring'); + } + }); + }); + + if (window.playground_copyable) { + Array.from(document.querySelectorAll('pre code')).forEach(function (block) { + var pre_block = block.parentNode; + if (!pre_block.classList.contains('playground')) { + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var clipButton = document.createElement('button'); + clipButton.className = 'fa fa-copy clip-button'; + clipButton.title = 'Copy to clipboard'; + clipButton.setAttribute('aria-label', clipButton.title); + clipButton.innerHTML = ''; + + buttons.insertBefore(clipButton, buttons.firstChild); + } + }); + } + + // Process playground code blocks + Array.from(document.querySelectorAll(".playground")).forEach(function (pre_block) { + // Add play button + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var runCodeButton = document.createElement('button'); + runCodeButton.className = 'fa fa-play play-button'; + runCodeButton.hidden = true; + runCodeButton.title = 'Run this code'; + runCodeButton.setAttribute('aria-label', runCodeButton.title); + + buttons.insertBefore(runCodeButton, buttons.firstChild); + runCodeButton.addEventListener('click', function (e) { + run_rust_code(pre_block); + }); + + if (window.playground_copyable) { + var copyCodeClipboardButton = document.createElement('button'); + copyCodeClipboardButton.className = 'fa fa-copy clip-button'; + copyCodeClipboardButton.innerHTML = ''; + copyCodeClipboardButton.title = 'Copy to clipboard'; + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title); + + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild); + } + + let code_block = pre_block.querySelector("code"); + if (window.ace && code_block.classList.contains("editable")) { + var undoChangesButton = document.createElement('button'); + undoChangesButton.className = 'fa fa-history reset-button'; + undoChangesButton.title = 'Undo changes'; + undoChangesButton.setAttribute('aria-label', undoChangesButton.title); + + buttons.insertBefore(undoChangesButton, buttons.firstChild); + + undoChangesButton.addEventListener('click', function () { + let editor = window.ace.edit(code_block); + editor.setValue(editor.originalCode); + editor.clearSelection(); + }); + } + }); +})(); + +(function themes() { + var html = document.querySelector('html'); + var themeToggleButton = document.getElementById('theme-toggle'); + var themePopup = document.getElementById('theme-list'); + var themeColorMetaTag = document.querySelector('meta[name="theme-color"]'); + var stylesheets = { + ayuHighlight: document.querySelector("[href$='ayu-highlight.css']"), + tomorrowNight: document.querySelector("[href$='tomorrow-night.css']"), + highlight: document.querySelector("[href$='highlight.css']"), + }; + + function showThemes() { + themePopup.style.display = 'block'; + themeToggleButton.setAttribute('aria-expanded', true); + themePopup.querySelector("button#" + get_theme()).focus(); + } + + function updateThemeSelected() { + themePopup.querySelectorAll('.theme-selected').forEach(function (el) { + el.classList.remove('theme-selected'); + }); + themePopup.querySelector("button#" + get_theme()).classList.add('theme-selected'); + } + + function hideThemes() { + themePopup.style.display = 'none'; + themeToggleButton.setAttribute('aria-expanded', false); + themeToggleButton.focus(); + } + + function get_theme() { + var theme; + try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { } + if (theme === null || theme === undefined) { + return default_theme; + } else { + return theme; + } + } + + function set_theme(theme, store = true) { + let ace_theme; + + if (theme == 'coal' || theme == 'navy') { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = false; + stylesheets.highlight.disabled = true; + + ace_theme = "ace/theme/tomorrow_night"; + } else if (theme == 'ayu') { + stylesheets.ayuHighlight.disabled = false; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = true; + ace_theme = "ace/theme/tomorrow_night"; + } else { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = false; + ace_theme = "ace/theme/dawn"; + } + + setTimeout(function () { + themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor; + }, 1); + + if (window.ace && window.editors) { + window.editors.forEach(function (editor) { + editor.setTheme(ace_theme); + }); + } + + var previousTheme = get_theme(); + + if (store) { + try { localStorage.setItem('mdbook-theme', theme); } catch (e) { } + } + + html.classList.remove(previousTheme); + html.classList.add(theme); + updateThemeSelected(); + } + + // Set theme + var theme = get_theme(); + + set_theme(theme, false); + + themeToggleButton.addEventListener('click', function () { + if (themePopup.style.display === 'block') { + hideThemes(); + } else { + showThemes(); + } + }); + + themePopup.addEventListener('click', function (e) { + var theme; + if (e.target.className === "theme") { + theme = e.target.id; + } else if (e.target.parentElement.className === "theme") { + theme = e.target.parentElement.id; + } else { + return; + } + set_theme(theme); + }); + + themePopup.addEventListener('focusout', function(e) { + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) + if (!!e.relatedTarget && !themeToggleButton.contains(e.relatedTarget) && !themePopup.contains(e.relatedTarget)) { + hideThemes(); + } + }); + + // Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628 + document.addEventListener('click', function(e) { + if (themePopup.style.display === 'block' && !themeToggleButton.contains(e.target) && !themePopup.contains(e.target)) { + hideThemes(); + } + }); + + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (!themePopup.contains(e.target)) { return; } + + switch (e.key) { + case 'Escape': + e.preventDefault(); + hideThemes(); + break; + case 'ArrowUp': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.previousElementSibling) { + li.previousElementSibling.querySelector('button').focus(); + } + break; + case 'ArrowDown': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.nextElementSibling) { + li.nextElementSibling.querySelector('button').focus(); + } + break; + case 'Home': + e.preventDefault(); + themePopup.querySelector('li:first-child button').focus(); + break; + case 'End': + e.preventDefault(); + themePopup.querySelector('li:last-child button').focus(); + break; + } + }); +})(); + +(function sidebar() { + var body = document.querySelector("body"); + var sidebar = document.getElementById("sidebar"); + var sidebarLinks = document.querySelectorAll('#sidebar a'); + var sidebarToggleButton = document.getElementById("sidebar-toggle"); + var sidebarResizeHandle = document.getElementById("sidebar-resize-handle"); + var firstContact = null; + + function showSidebar() { + body.classList.remove('sidebar-hidden') + body.classList.add('sidebar-visible'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', 0); + }); + sidebarToggleButton.setAttribute('aria-expanded', true); + sidebar.setAttribute('aria-hidden', false); + try { localStorage.setItem('mdbook-sidebar', 'visible'); } catch (e) { } + } + + + var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); + + function toggleSection(ev) { + ev.currentTarget.parentElement.classList.toggle('expanded'); + } + + Array.from(sidebarAnchorToggles).forEach(function (el) { + el.addEventListener('click', toggleSection); + }); + + function hideSidebar() { + body.classList.remove('sidebar-visible') + body.classList.add('sidebar-hidden'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', -1); + }); + sidebarToggleButton.setAttribute('aria-expanded', false); + sidebar.setAttribute('aria-hidden', true); + try { localStorage.setItem('mdbook-sidebar', 'hidden'); } catch (e) { } + } + + // Toggle sidebar + sidebarToggleButton.addEventListener('click', function sidebarToggle() { + if (body.classList.contains("sidebar-hidden")) { + var current_width = parseInt( + document.documentElement.style.getPropertyValue('--sidebar-width'), 10); + if (current_width < 150) { + document.documentElement.style.setProperty('--sidebar-width', '150px'); + } + showSidebar(); + } else if (body.classList.contains("sidebar-visible")) { + hideSidebar(); + } else { + if (getComputedStyle(sidebar)['transform'] === 'none') { + hideSidebar(); + } else { + showSidebar(); + } + } + }); + + sidebarResizeHandle.addEventListener('mousedown', initResize, false); + + function initResize(e) { + window.addEventListener('mousemove', resize, false); + window.addEventListener('mouseup', stopResize, false); + body.classList.add('sidebar-resizing'); + } + function resize(e) { + var pos = (e.clientX - sidebar.offsetLeft); + if (pos < 20) { + hideSidebar(); + } else { + if (body.classList.contains("sidebar-hidden")) { + showSidebar(); + } + pos = Math.min(pos, window.innerWidth - 100); + document.documentElement.style.setProperty('--sidebar-width', pos + 'px'); + } + } + //on mouseup remove windows functions mousemove & mouseup + function stopResize(e) { + body.classList.remove('sidebar-resizing'); + window.removeEventListener('mousemove', resize, false); + window.removeEventListener('mouseup', stopResize, false); + } + + document.addEventListener('touchstart', function (e) { + firstContact = { + x: e.touches[0].clientX, + time: Date.now() + }; + }, { passive: true }); + + document.addEventListener('touchmove', function (e) { + if (!firstContact) + return; + + var curX = e.touches[0].clientX; + var xDiff = curX - firstContact.x, + tDiff = Date.now() - firstContact.time; + + if (tDiff < 250 && Math.abs(xDiff) >= 150) { + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) + showSidebar(); + else if (xDiff < 0 && curX < 300) + hideSidebar(); + + firstContact = null; + } + }, { passive: true }); +})(); + +(function chapterNavigation() { + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (window.search && window.search.hasFocus()) { return; } + var html = document.querySelector('html'); + + function next() { + var nextButton = document.querySelector('.nav-chapters.next'); + if (nextButton) { + window.location.href = nextButton.href; + } + } + function prev() { + var previousButton = document.querySelector('.nav-chapters.previous'); + if (previousButton) { + window.location.href = previousButton.href; + } + } + switch (e.key) { + case 'ArrowRight': + e.preventDefault(); + if (html.dir == 'rtl') { + prev(); + } else { + next(); + } + break; + case 'ArrowLeft': + e.preventDefault(); + if (html.dir == 'rtl') { + next(); + } else { + prev(); + } + break; + } + }); +})(); + +(function clipboard() { + var clipButtons = document.querySelectorAll('.clip-button'); + + function hideTooltip(elem) { + elem.firstChild.innerText = ""; + elem.className = 'fa fa-copy clip-button'; + } + + function showTooltip(elem, msg) { + elem.firstChild.innerText = msg; + elem.className = 'fa fa-copy tooltipped'; + } + + var clipboardSnippets = new ClipboardJS('.clip-button', { + text: function (trigger) { + hideTooltip(trigger); + let playground = trigger.closest("pre"); + return playground_text(playground, false); + } + }); + + Array.from(clipButtons).forEach(function (clipButton) { + clipButton.addEventListener('mouseout', function (e) { + hideTooltip(e.currentTarget); + }); + }); + + clipboardSnippets.on('success', function (e) { + e.clearSelection(); + showTooltip(e.trigger, "Copied!"); + }); + + clipboardSnippets.on('error', function (e) { + showTooltip(e.trigger, "Clipboard error!"); + }); +})(); + +(function scrollToTop () { + var menuTitle = document.querySelector('.menu-title'); + + menuTitle.addEventListener('click', function () { + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' }); + }); +})(); + +(function controllMenu() { + var menu = document.getElementById('menu-bar'); + + (function controllPosition() { + var scrollTop = document.scrollingElement.scrollTop; + var prevScrollTop = scrollTop; + var minMenuY = -menu.clientHeight - 50; + // When the script loads, the page can be at any scroll (e.g. if you reforesh it). + menu.style.top = scrollTop + 'px'; + // Same as parseInt(menu.style.top.slice(0, -2), but faster + var topCache = menu.style.top.slice(0, -2); + menu.classList.remove('sticky'); + var stickyCache = false; // Same as menu.classList.contains('sticky'), but faster + document.addEventListener('scroll', function () { + scrollTop = Math.max(document.scrollingElement.scrollTop, 0); + // `null` means that it doesn't need to be updated + var nextSticky = null; + var nextTop = null; + var scrollDown = scrollTop > prevScrollTop; + var menuPosAbsoluteY = topCache - scrollTop; + if (scrollDown) { + nextSticky = false; + if (menuPosAbsoluteY > 0) { + nextTop = prevScrollTop; + } + } else { + if (menuPosAbsoluteY > 0) { + nextSticky = true; + } else if (menuPosAbsoluteY < minMenuY) { + nextTop = prevScrollTop + minMenuY; + } + } + if (nextSticky === true && stickyCache === false) { + menu.classList.add('sticky'); + stickyCache = true; + } else if (nextSticky === false && stickyCache === true) { + menu.classList.remove('sticky'); + stickyCache = false; + } + if (nextTop !== null) { + menu.style.top = nextTop + 'px'; + topCache = nextTop; + } + prevScrollTop = scrollTop; + }, { passive: true }); + })(); + (function controllBorder() { + function updateBorder() { + if (menu.offsetTop === 0) { + menu.classList.remove('bordered'); + } else { + menu.classList.add('bordered'); + } + } + updateBorder(); + document.addEventListener('scroll', updateBorder, { passive: true }); + })(); +})(); diff --git a/clipboard.min.js b/clipboard.min.js new file mode 100644 index 0000000000..02c549e35c --- /dev/null +++ b/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.4 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n .hljs { + color: var(--links); +} + +/* + body-container is necessary because mobile browsers don't seem to like + overflow-x on the body tag when there is a tag. +*/ +#body-container { + /* + This is used when the sidebar pushes the body content off the side of + the screen on small screens. Without it, dragging on mobile Safari + will want to reposition the viewport in a weird way. + */ + overflow-x: clip; +} + +/* Menu Bar */ + +#menu-bar, +#menu-bar-hover-placeholder { + z-index: 101; + margin: auto calc(0px - var(--page-padding)); +} +#menu-bar { + position: relative; + display: flex; + flex-wrap: wrap; + background-color: var(--bg); + border-block-end-color: var(--bg); + border-block-end-width: 1px; + border-block-end-style: solid; +} +#menu-bar.sticky, +.js #menu-bar-hover-placeholder:hover + #menu-bar, +.js #menu-bar:hover, +.js.sidebar-visible #menu-bar { + position: -webkit-sticky; + position: sticky; + top: 0 !important; +} +#menu-bar-hover-placeholder { + position: sticky; + position: -webkit-sticky; + top: 0; + height: var(--menu-bar-height); +} +#menu-bar.bordered { + border-block-end-color: var(--table-border-color); +} +#menu-bar i, #menu-bar .icon-button { + position: relative; + padding: 0 8px; + z-index: 10; + line-height: var(--menu-bar-height); + cursor: pointer; + transition: color 0.5s; +} +@media only screen and (max-width: 420px) { + #menu-bar i, #menu-bar .icon-button { + padding: 0 5px; + } +} + +.icon-button { + border: none; + background: none; + padding: 0; + color: inherit; +} +.icon-button i { + margin: 0; +} + +.right-buttons { + margin: 0 15px; +} +.right-buttons a { + text-decoration: none; +} + +.left-buttons { + display: flex; + margin: 0 5px; +} +.no-js .left-buttons button { + display: none; +} + +.menu-title { + display: inline-block; + font-weight: 200; + font-size: 2.4rem; + line-height: var(--menu-bar-height); + text-align: center; + margin: 0; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.js .menu-title { + cursor: pointer; +} + +.menu-bar, +.menu-bar:visited, +.nav-chapters, +.nav-chapters:visited, +.mobile-nav-chapters, +.mobile-nav-chapters:visited, +.menu-bar .icon-button, +.menu-bar a i { + color: var(--icons); +} + +.menu-bar i:hover, +.menu-bar .icon-button:hover, +.nav-chapters:hover, +.mobile-nav-chapters i:hover { + color: var(--icons-hover); +} + +/* Nav Icons */ + +.nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + + position: fixed; + top: 0; + bottom: 0; + margin: 0; + max-width: 150px; + min-width: 90px; + + display: flex; + justify-content: center; + align-content: center; + flex-direction: column; + + transition: color 0.5s, background-color 0.5s; +} + +.nav-chapters:hover { + text-decoration: none; + background-color: var(--theme-hover); + transition: background-color 0.15s, color 0.15s; +} + +.nav-wrapper { + margin-block-start: 50px; + display: none; +} + +.mobile-nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + width: 90px; + border-radius: 5px; + background-color: var(--sidebar-bg); +} + +/* Only Firefox supports flow-relative values */ +.previous { float: left; } +[dir=rtl] .previous { float: right; } + +/* Only Firefox supports flow-relative values */ +.next { + float: right; + right: var(--page-padding); +} +[dir=rtl] .next { + float: left; + right: unset; + left: var(--page-padding); +} + +/* Use the correct buttons for RTL layouts*/ +[dir=rtl] .previous i.fa-angle-left:before {content:"\f105";} +[dir=rtl] .next i.fa-angle-right:before { content:"\f104"; } + +@media only screen and (max-width: 1080px) { + .nav-wide-wrapper { display: none; } + .nav-wrapper { display: block; } +} + +/* sidebar-visible */ +@media only screen and (max-width: 1380px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; } + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; } +} + +/* Inline code */ + +:not(pre) > .hljs { + display: inline; + padding: 0.1em 0.3em; + border-radius: 3px; +} + +:not(pre):not(a) > .hljs { + color: var(--inline-code-color); + overflow-x: initial; +} + +a:hover > .hljs { + text-decoration: underline; +} + +pre { + position: relative; +} +pre > .buttons { + position: absolute; + z-index: 100; + right: 0px; + top: 2px; + margin: 0px; + padding: 2px 0px; + + color: var(--sidebar-fg); + cursor: pointer; + visibility: hidden; + opacity: 0; + transition: visibility 0.1s linear, opacity 0.1s linear; +} +pre:hover > .buttons { + visibility: visible; + opacity: 1 +} +pre > .buttons :hover { + color: var(--sidebar-active); + border-color: var(--icons-hover); + background-color: var(--theme-hover); +} +pre > .buttons i { + margin-inline-start: 8px; +} +pre > .buttons button { + cursor: inherit; + margin: 0px 5px; + padding: 3px 5px; + font-size: 14px; + + border-style: solid; + border-width: 1px; + border-radius: 4px; + border-color: var(--icons); + background-color: var(--theme-popup-bg); + transition: 100ms; + transition-property: color,border-color,background-color; + color: var(--icons); +} +@media (pointer: coarse) { + pre > .buttons button { + /* On mobile, make it easier to tap buttons. */ + padding: 0.3rem 1rem; + } +} +pre > code { + padding: 1rem; +} + +/* FIXME: ACE editors overlap their buttons because ACE does absolute + positioning within the code block which breaks padding. The only solution I + can think of is to move the padding to the outer pre tag (or insert a div + wrapper), but that would require fixing a whole bunch of CSS rules. +*/ +.hljs.ace_editor { + padding: 0rem 0rem; +} + +pre > .result { + margin-block-start: 10px; +} + +/* Search */ + +#searchresults a { + text-decoration: none; +} + +mark { + border-radius: 2px; + padding-block-start: 0; + padding-block-end: 1px; + padding-inline-start: 3px; + padding-inline-end: 3px; + margin-block-start: 0; + margin-block-end: -1px; + margin-inline-start: -3px; + margin-inline-end: -3px; + background-color: var(--search-mark-bg); + transition: background-color 300ms linear; + cursor: pointer; +} + +mark.fade-out { + background-color: rgba(0,0,0,0) !important; + cursor: auto; +} + +.searchbar-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} + +#searchbar { + width: 100%; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: auto; + margin-inline-end: auto; + padding: 10px 16px; + transition: box-shadow 300ms ease-in-out; + border: 1px solid var(--searchbar-border-color); + border-radius: 3px; + background-color: var(--searchbar-bg); + color: var(--searchbar-fg); +} +#searchbar:focus, +#searchbar.active { + box-shadow: 0 0 3px var(--searchbar-shadow-color); +} + +.searchresults-header { + font-weight: bold; + font-size: 1em; + padding-block-start: 18px; + padding-block-end: 0; + padding-inline-start: 5px; + padding-inline-end: 0; + color: var(--searchresults-header-fg); +} + +.searchresults-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); + border-block-end: 1px dashed var(--searchresults-border-color); +} + +ul#searchresults { + list-style: none; + padding-inline-start: 20px; +} +ul#searchresults li { + margin: 10px 0px; + padding: 2px; + border-radius: 2px; +} +ul#searchresults li.focus { + background-color: var(--searchresults-li-bg); +} +ul#searchresults span.teaser { + display: block; + clear: both; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: 20px; + margin-inline-end: 0; + font-size: 0.8em; +} +ul#searchresults span.teaser em { + font-weight: bold; + font-style: normal; +} + +/* Sidebar */ + +.sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + font-size: 0.875em; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; + overscroll-behavior-y: contain; + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); +} +[dir=rtl] .sidebar { left: unset; right: 0; } +.sidebar-resizing { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.no-js .sidebar, +.js:not(.sidebar-resizing) .sidebar { + transition: transform 0.3s; /* Animation: slide away */ +} +.sidebar code { + line-height: 2em; +} +.sidebar .sidebar-scrollbox { + overflow-y: auto; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + padding: 10px 10px; +} +.sidebar .sidebar-resize-handle { + position: absolute; + cursor: col-resize; + width: 0; + right: 0; + top: 0; + bottom: 0; +} +[dir=rtl] .sidebar .sidebar-resize-handle { right: unset; left: 0; } +.js .sidebar .sidebar-resize-handle { + cursor: col-resize; + width: 5px; +} +/* sidebar-hidden */ +#sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(0px - var(--sidebar-width))); + z-index: -1; +} +[dir=rtl] #sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(var(--sidebar-width)); +} +.sidebar::-webkit-scrollbar { + background: var(--sidebar-bg); +} +.sidebar::-webkit-scrollbar-thumb { + background: var(--scrollbar); +} + +/* sidebar-visible */ +#sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(var(--sidebar-width)); +} +[dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(0px - var(--sidebar-width))); +} +@media only screen and (min-width: 620px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + margin-inline-start: var(--sidebar-width); + } + [dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + } +} + +.chapter { + list-style: none outside none; + padding-inline-start: 0; + line-height: 2.2em; +} + +.chapter ol { + width: 100%; +} + +.chapter li { + display: flex; + color: var(--sidebar-non-existant); +} +.chapter li a { + display: block; + padding: 0; + text-decoration: none; + color: var(--sidebar-fg); +} + +.chapter li a:hover { + color: var(--sidebar-active); +} + +.chapter li a.active { + color: var(--sidebar-active); +} + +.chapter li > a.toggle { + cursor: pointer; + display: block; + margin-inline-start: auto; + padding: 0 10px; + user-select: none; + opacity: 0.68; +} + +.chapter li > a.toggle div { + transition: transform 0.5s; +} + +/* collapse the section */ +.chapter li:not(.expanded) + li > ol { + display: none; +} + +.chapter li.chapter-item { + line-height: 1.5em; + margin-block-start: 0.6em; +} + +.chapter li.expanded > a.toggle div { + transform: rotate(90deg); +} + +.spacer { + width: 100%; + height: 3px; + margin: 5px 0px; +} +.chapter .spacer { + background-color: var(--sidebar-spacer); +} + +@media (-moz-touch-enabled: 1), (pointer: coarse) { + .chapter li a { padding: 5px 0; } + .spacer { margin: 10px 0; } +} + +.section { + list-style: none outside none; + padding-inline-start: 20px; + line-height: 1.9em; +} + +/* Theme Menu Popup */ + +.theme-popup { + position: absolute; + left: 10px; + top: var(--menu-bar-height); + z-index: 1000; + border-radius: 4px; + font-size: 0.7em; + color: var(--fg); + background: var(--theme-popup-bg); + border: 1px solid var(--theme-popup-border); + margin: 0; + padding: 0; + list-style: none; + display: none; + /* Don't let the children's background extend past the rounded corners. */ + overflow: hidden; +} +[dir=rtl] .theme-popup { left: unset; right: 10px; } +.theme-popup .default { + color: var(--icons); +} +.theme-popup .theme { + width: 100%; + border: 0; + margin: 0; + padding: 2px 20px; + line-height: 25px; + white-space: nowrap; + text-align: start; + cursor: pointer; + color: inherit; + background: inherit; + font-size: inherit; +} +.theme-popup .theme:hover { + background-color: var(--theme-hover); +} + +.theme-selected::before { + display: inline-block; + content: "✓"; + margin-inline-start: -14px; + width: 14px; +} diff --git a/css/general.css b/css/general.css new file mode 100644 index 0000000000..e7d20da725 --- /dev/null +++ b/css/general.css @@ -0,0 +1,234 @@ +/* Base styles and content styles */ + +@import 'variables.css'; + +:root { + /* Browser default font-size is 16px, this way 1 rem = 10px */ + font-size: 62.5%; + color-scheme: var(--color-scheme); +} + +html { + font-family: "Open Sans", sans-serif; + color: var(--fg); + background-color: var(--bg); + text-size-adjust: none; + -webkit-text-size-adjust: none; +} + +body { + margin: 0; + font-size: 1.6rem; + overflow-x: hidden; +} + +code { + font-family: var(--mono-font) !important; + font-size: var(--code-font-size); + direction: ltr !important; +} + +/* make long words/inline code not x overflow */ +main { + overflow-wrap: break-word; +} + +/* make wide tables scroll if they overflow */ +.table-wrapper { + overflow-x: auto; +} + +/* Don't change font size in headers. */ +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + font-size: unset; +} + +.left { float: left; } +.right { float: right; } +.boring { opacity: 0.6; } +.hide-boring .boring { display: none; } +.hidden { display: none !important; } + +h2, h3 { margin-block-start: 2.5em; } +h4, h5 { margin-block-start: 2em; } + +.header + .header h3, +.header + .header h4, +.header + .header h5 { + margin-block-start: 1em; +} + +h1:target::before, +h2:target::before, +h3:target::before, +h4:target::before, +h5:target::before, +h6:target::before { + display: inline-block; + content: "»"; + margin-inline-start: -30px; + width: 30px; +} + +/* This is broken on Safari as of version 14, but is fixed + in Safari Technology Preview 117 which I think will be Safari 14.2. + https://bugs.webkit.org/show_bug.cgi?id=218076 +*/ +:target { + /* Safari does not support logical properties */ + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); +} + +.page { + outline: 0; + padding: 0 var(--page-padding); + margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */ +} +.page-wrapper { + box-sizing: border-box; + background-color: var(--bg); +} +.no-js .page-wrapper, +.js:not(.sidebar-resizing) .page-wrapper { + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} +[dir=rtl] .js:not(.sidebar-resizing) .page-wrapper { + transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} + +.content { + overflow-y: auto; + padding: 0 5px 50px 5px; +} +.content main { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} +.content p { line-height: 1.45em; } +.content ol { line-height: 1.45em; } +.content ul { line-height: 1.45em; } +.content a { text-decoration: none; } +.content a:hover { text-decoration: underline; } +.content img, .content video { max-width: 100%; } +.content .header:link, +.content .header:visited { + color: var(--fg); +} +.content .header:link, +.content .header:visited:hover { + text-decoration: none; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} +table td { + padding: 3px 20px; + border: 1px var(--table-border-color) solid; +} +table thead { + background: var(--table-header-bg); +} +table thead td { + font-weight: 700; + border: none; +} +table thead th { + padding: 3px 20px; +} +table thead tr { + border: 1px var(--table-header-bg) solid; +} +/* Alternate background colors for rows */ +table tbody tr:nth-child(2n) { + background: var(--table-alternate-bg); +} + + +blockquote { + margin: 20px 0; + padding: 0 20px; + color: var(--fg); + background-color: var(--quote-bg); + border-block-start: .1em solid var(--quote-border); + border-block-end: .1em solid var(--quote-border); +} + +.warning { + margin: 20px; + padding: 0 20px; + border-inline-start: 2px solid var(--warning-border); +} + +.warning:before { + position: absolute; + width: 3rem; + height: 3rem; + margin-inline-start: calc(-1.5rem - 21px); + content: "ⓘ"; + text-align: center; + background-color: var(--bg); + color: var(--warning-border); + font-weight: bold; + font-size: 2rem; +} + +blockquote .warning:before { + background-color: var(--quote-bg); +} + +kbd { + background-color: var(--table-border-color); + border-radius: 4px; + border: solid 1px var(--theme-popup-border); + box-shadow: inset 0 -1px 0 var(--theme-hover); + display: inline-block; + font-size: var(--code-font-size); + font-family: var(--mono-font); + line-height: 10px; + padding: 4px 5px; + vertical-align: middle; +} + +:not(.footnote-definition) + .footnote-definition, +.footnote-definition + :not(.footnote-definition) { + margin-block-start: 2em; +} +.footnote-definition { + font-size: 0.9em; + margin: 0.5em 0; +} +.footnote-definition p { + display: inline; +} + +.tooltiptext { + position: absolute; + visibility: hidden; + color: #fff; + background-color: #333; + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */ + left: -8px; /* Half of the width of the icon */ + top: -35px; + font-size: 0.8em; + text-align: center; + border-radius: 6px; + padding: 5px 8px; + margin: 5px; + z-index: 1000; +} +.tooltipped .tooltiptext { + visibility: visible; +} + +.chapter li.part-title { + color: var(--sidebar-fg); + margin: 5px 0px; + font-weight: bold; +} + +.result-no-output { + font-style: italic; +} diff --git a/css/print.css b/css/print.css new file mode 100644 index 0000000000..dcf0ba64b9 --- /dev/null +++ b/css/print.css @@ -0,0 +1,50 @@ + +#sidebar, +#menu-bar, +.nav-chapters, +.mobile-nav-chapters { + display: none; +} + +#page-wrapper.page-wrapper { + transform: none; + margin-inline-start: 0px; + overflow-y: initial; +} + +#content { + max-width: none; + margin: 0; + padding: 0; +} + +.page { + overflow-y: initial; +} + +code { + direction: ltr !important; +} + +pre > .buttons { + z-index: 2; +} + +a, a:visited, a:active, a:hover { + color: #4183c4; + text-decoration: none; +} + +h1, h2, h3, h4, h5, h6 { + page-break-inside: avoid; + page-break-after: avoid; +} + +pre, code { + page-break-inside: avoid; + white-space: pre-wrap; +} + +.fa { + display: none !important; +} diff --git a/css/variables.css b/css/variables.css new file mode 100644 index 0000000000..10a7590944 --- /dev/null +++ b/css/variables.css @@ -0,0 +1,277 @@ + +/* Globals */ + +:root { + --sidebar-width: 300px; + --page-padding: 15px; + --content-max-width: 750px; + --menu-bar-height: 50px; + --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace; + --code-font-size: 0.875em /* please adjust the ace font size accordingly in editor.js */ +} + +/* Themes */ + +.ayu { + --bg: hsl(210, 25%, 8%); + --fg: #c5c5c5; + + --sidebar-bg: #14191f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #5c6773; + --sidebar-active: #ffb454; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #0096cf; + + --inline-code-color: #ffb454; + + --theme-popup-bg: #14191f; + --theme-popup-border: #5c6773; + --theme-hover: #191f26; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(210, 25%, 13%); + --table-header-bg: hsl(210, 25%, 28%); + --table-alternate-bg: hsl(210, 25%, 11%); + + --searchbar-border-color: #848484; + --searchbar-bg: #424242; + --searchbar-fg: #fff; + --searchbar-shadow-color: #d4c89f; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #252932; + --search-mark-bg: #e3b171; + + --color-scheme: dark; +} + +.coal { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; +} + +.light { + --bg: hsl(0, 0%, 100%); + --fg: hsl(0, 0%, 0%); + + --sidebar-bg: #fafafa; + --sidebar-fg: hsl(0, 0%, 0%); + --sidebar-non-existant: #aaaaaa; + --sidebar-active: #1f1fff; + --sidebar-spacer: #f4f4f4; + + --scrollbar: #8F8F8F; + + --icons: #747474; + --icons-hover: #000000; + + --links: #20609f; + + --inline-code-color: #301900; + + --theme-popup-bg: #fafafa; + --theme-popup-border: #cccccc; + --theme-hover: #e6e6e6; + + --quote-bg: hsl(197, 37%, 96%); + --quote-border: hsl(197, 37%, 91%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(0, 0%, 95%); + --table-header-bg: hsl(0, 0%, 80%); + --table-alternate-bg: hsl(0, 0%, 97%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #e4f2fe; + --search-mark-bg: #a2cff5; + + --color-scheme: light; +} + +.navy { + --bg: hsl(226, 23%, 11%); + --fg: #bcbdd0; + + --sidebar-bg: #282d3f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505274; + --sidebar-active: #2b79a2; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #161923; + --theme-popup-border: #737480; + --theme-hover: #282e40; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(226, 23%, 16%); + --table-header-bg: hsl(226, 23%, 31%); + --table-alternate-bg: hsl(226, 23%, 14%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #aeaec6; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #5f5f71; + --searchresults-border-color: #5c5c68; + --searchresults-li-bg: #242430; + --search-mark-bg: #a2cff5; + + --color-scheme: dark; +} + +.rust { + --bg: hsl(60, 9%, 87%); + --fg: #262625; + + --sidebar-bg: #3b2e2a; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505254; + --sidebar-active: #e69f67; + --sidebar-spacer: #45373a; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #262625; + + --links: #2b79a2; + + --inline-code-color: #6e6b5e; + + --theme-popup-bg: #e1e1db; + --theme-popup-border: #b38f6b; + --theme-hover: #99908a; + + --quote-bg: hsl(60, 5%, 75%); + --quote-border: hsl(60, 5%, 70%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(60, 9%, 82%); + --table-header-bg: #b3a497; + --table-alternate-bg: hsl(60, 9%, 84%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #dec2a2; + --search-mark-bg: #e69f67; + + --color-scheme: light; +} + +@media (prefers-color-scheme: dark) { + .light.no-js { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + } +} diff --git a/development/Build.html b/development/Build.html new file mode 100644 index 0000000000..d05d2afdf5 --- /dev/null +++ b/development/Build.html @@ -0,0 +1,257 @@ + + + + + + Build - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Build

+

First and foremost, make sure you have the latest Rust installed in your system. Nothing will work without Rust.

+

If you get errors like cargo: feature X is required, it most likely means you have an old version of Rust. Update it by running rustup update stable.

+

iOS

+

1. You probably already have Xcode installed if you are reading this. If not, go get it.

+

2. Compile the core Rust library first:

+
cd scripts && ./build.sh ios
+
+

3. Open the NativeSigner.xcodeproj project from the ios folder in your Xcode and click Run (Cmd+R).

+

4. The first time you start the app, you will need to put your device into Airplane Mode. In the iOS simulator, you can do this by turning off WiFi on your Mac (yes, this is an official apple-recommended way).

+

However, we strongly recommend that you use a real device for development, as some important parts (e.g. camera) may not work in the simulator.

+

Android

+

1. Download Android Studio.

+

2. Open the project from the android directory.

+

3. Install NDK. Go to File -> Project Structure -> SDK Location. Next to the "Android NDK location" section, click "Download Android NDK" button.

+

We highly recommend you to update all existing plugins and SDK's for Kotlin, Gradle, etc even if you just downloaded a fresh Android Studio. It's always a good idea to restart Android Studio after that. This can save you many hours on Stackoverflow trying to fix random errors like "NDK not found".

+

4. Connect your device or create a virtual one. Open Tools -> Device Manager and create a new phone simulator with the latest Android.

+

5. (macOS) Specify path to python in local.properties.

+

rust.pythonCommand=python3

+

6. Run the project (Ctrl+R). It should build the Rust core library automatically.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/development/Development.html b/development/Development.html new file mode 100644 index 0000000000..26e9152553 --- /dev/null +++ b/development/Development.html @@ -0,0 +1,238 @@ + + + + + + Development - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Development

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/development/Ecosystem.html b/development/Ecosystem.html new file mode 100644 index 0000000000..05eb69c8e7 --- /dev/null +++ b/development/Ecosystem.html @@ -0,0 +1,245 @@ + + + + + + Vault ecosystem - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Vault ecosystem

+

Vault repository contains 3 tools that are part of Vault ecosystem

+ +

Greater Vault ecosystem:

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/development/Rustdocs.html b/development/Rustdocs.html new file mode 100644 index 0000000000..728cf4babb --- /dev/null +++ b/development/Rustdocs.html @@ -0,0 +1,246 @@ + + + + + + Rust docs - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/development/Troubleshooting.html b/development/Troubleshooting.html new file mode 100644 index 0000000000..e9ceedd2aa --- /dev/null +++ b/development/Troubleshooting.html @@ -0,0 +1,242 @@ + + + + + + Troubleshooting - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Troubleshooting

+

Rust side builds but app crashes on start (Android) or complains about symbols not found (iOS)

+

One common reason for this is inconsistency in uniffi version - make sure that installed version matches one stated in Cargo.toml

+

Build for Android fails on macOS, build for iOS fails on linux

+

This is a known issue, does not seem to be solvable at the moment. Please use 2 machines, as we do.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/development/UOS.html b/development/UOS.html new file mode 100644 index 0000000000..e10e4492d6 --- /dev/null +++ b/development/UOS.html @@ -0,0 +1,1186 @@ + + + + + + Universal offline signature - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Scope

+

This document provides an interpretation of the UOS format used by Polkadot Vault. The upstream version of the published format has diverged significantly from the actual implementation, so this document represents the current state of the UOS format that is compatible with Polkadot Vault. It only applies to networks compatible with Polkadot Vault, i.e. Substrate-based networks. The document also describes special payloads used to maintain a Polkadot Vault instance.

+

Therefore, this document effectively describes the input and output format for QR codes used by Polkadot Vault.

+

Terminology

+

The Vault receives information over an air-gap as QR codes. These codes are read as u8 vectors and must always be parsed by the Vault before use.

+

QR codes can contain information that a user wants to sign with one of the Vault keys, or they may contain update information to ensure smooth operation of the Vault without the need for a reset or connection to the network.

+

QR code content types

+
    +
  1. Transaction/extrinsic - a single transaction that is to be signed
  2. +
  3. Bulk transactions - a set of transactions that are to be signed in a single +session
  4. +
  5. Message - a message that is to be signed with a key
  6. +
  7. Chain metadata: up-to-date metadata allows the Vault to read transactions content
  8. +
  9. Chain specs: adds new network to the Vault
  10. +
  11. Metadata types: is used to update older versions runtime metadata (V13 and below)
  12. +
  13. Key derivations: is used to import and export Vault key paths
  14. +
+

QR code structure

+

QR code envelope has the following structure:

+
+ +
QR code prefixcontentending spacerpadding
4 bitsbyte-aligned content4 bitsremainder
+
+

QR code prefix always starts with 0x4 symbol indicating "raw" encoding.

+

Subsequent 2 bytes encode content length. Using this number, QR code parser can +instantly extract content and disregard the rest of QR code.

+

Actual content is shifted by half-byte, otherwise it is a normal byte sequence.

+

Multiframe QR

+

The information transferred through QR channel into Vault is always enveloped +in multiframe packages (although minimal number of multiframe packages is 1). +There are two standards for the multiframe: RaptorQ erasure coding and legacy +non-erasure multiframe. The type of envelope is determined by the first bit of +the QR code data: 0 indicates legacy multiframe, 1 indicates RaptorQ

+
RaptorQ multipart payload
+

RaptorQ (RFC6330) is +a variable rate (fountain) erasure code protocol with reference implementation +in Rust

+

Wrapping content in RaptorQ protocol allows for arbitrary amounts of data to be +transferred reliably within reasonable time. It is recommended to wrap all +payloads into this type of envelope.

+

Each QR code in RaptorQ encoded multipart payload contains following parts:

+
+ +
bytes [0..4]bytes [4..]
0x80000000 || payload_sizeRaptorQ serialized packet
+
+
    +
  • payload_size MUST contain payload size in bytes, represented as +big-endian 32-bit unsigned integer.
  • +
  • payload_size MUST NOT exceed 7FFFFFFF
  • +
  • payload_size MUST be identical in all codes encoding the payload
  • +
  • payload_size and RaptorQ serialized packet MUST be stored by the Cold +Vault, in no particular order, until their amount is sufficient to decode +the payload.
  • +
  • Hot Wallet MUST continuously loop through all the frames showing each +frame for at least 1/30 seconds (recommended frame rate: 4 FPS).
  • +
  • Cold Vault MUST be able to start scanning the Multipart Payload at any +frame.
  • +
  • Cold Vault MUST NOT expect the frames to come in any particular order.
  • +
  • Cold Vault SHOULD show a progress indicator of how many frames it has +successfully scanned out of the estimated minimum required amount.
  • +
  • Hot Wallet SHOULD generate sufficient number of recovery frames +(recommended overhead: 100%; minimal reasonable overhead: square root of +number of packets).
  • +
  • Payloads fitting in 1 frame SHOULD be shown without recovery frames as +static image.
  • +
+

Once sufficient number of frames is collected, they could be processed into +single payload and treated as data vector ("QR code content").

+
Legacy Multipart Payload
+

In real implementation, the Polkadot Vault ecosystem generalized all payloads as +multipart messages.

+
+ +
bytes position[0][1..3][3..5][5..]
content00frame_countframe_indexdata
+
+
    +
  • frame MUST the number of current frame, '0000' represented as +big-endian 16-bit unsigned integer.
  • +
  • frame_count MUST the total number of frames, represented as big-endian +16-bit unsigned integer.
  • +
  • part_data MUST be stored by the Cold Vault, ordered by frame number, +until all frames are scanned.
  • +
  • Hot Wallet MUST continuously loop through all the frames showing each +frame for about 2 seconds.
  • +
  • Cold Vault MUST be able to start scanning the Multipart Payload at any +frame.
  • +
  • Cold Vault MUST NOT expect the frames to come in any particular order.
  • +
  • Cold Vault SHOULD show a progress indicator of how many frames it has +successfully scanned out of the total count.
  • +
+

Once all frames are combined, the part_data must be concatenated into a +single binary blob and treated as data vector ("QR code content").

+

Informative content of QR code

+

Every QR code content starts with a prelude [0x53, 0x<encryption code>, 0x<payload code>].

+

0x53 is always expected and indicates Substrate-related content.

+

<encryption code> for signables indicates encryption algorithm that will be +used to generate the signature:

+ + + + + + + + + + + + + +
0x00Ed25519
0x01Sr25519
0x02Ecdsa
+

<encryption code> for updates indicates encryption algorithm that was used to +sign the update:

+ + + + + + + + + + + + + + + + + +
0x00Ed25519
0x01Sr25519
0x02Ecdsa
0xffunsigned
+

Derivations import and testing are always unsigned, with <encryption code> +always 0xff.

+

Vault supports following <payload code> variants:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0x00legacy mortal transaction
0x02transaction (both mortal and immortal)
0x03message
0x04bulk transactions
0x80load metadata update
0x81load types update
0xc1add specs update
0xdederivations import
+

Note: old UOS specified 0x00 as mortal transaction and 0x02 as immortal one, +but currently both mortal and immortal transactions from polkadot-js are 0x02.

+

Shared QR code processing sequence:

+
    +
  1. Read QR code, try interpreting it, and get the hexadecimal string from into +Rust (hexadecimal string is getting changed to raw bytes soon). +If QR code is not processable, nothing happens and the scanner keeps trying to +catch a processable one.
  2. +
  3. Analyze prelude: is it Substrate? is it a known payload type? If not, Vault +always produces an error and suggests to scan supported payload.
  4. +
+

Further processing is done based on the payload type.

+

Transaction

+

Transaction has the following structure:

+ + + + +
preludepublic keySCALE-encoded call dataSCALE-encoded extensionsnetwork genesis hash
+

Public key is the key that can sign the transaction. Its length depends on the +<encryption code> declared in transaction prelude:

+
+ + + +
EncryptionPublic key length, bytes
Ed2551932
Sr2551932
Ecdsa33
+
+

Call data is Vec<u8> representation of transaction content. Call data must be +parsed by Vault prior to signature generation and becomes a part of signed +blob. Within transaction, the call data is SCALE-encoded, i.e. effectively is +prefixed with compact of its length in bytes.

+

Extensions contain data additional to the call data, and also are part of a +signed blob. Typical extensions are Era, Nonce, metadata version, etc. +Extensions content and order, in principle, can vary between the networks and +metadata versions.

+

Network genesis hash determines the network in which the transaction is created. +At the moment genesis hash is fixed-length 32 bytes.

+

Thus, the transaction structure could also be represented as:

+ + + + +
preludepublic keycompact of call data lengthcall dataSCALE-encoded extensionsnetwork genesis hash
+

Bold-marked transaction pieces are used in the blob for which the signature is +produced. If the blob is short, 257 bytes or below, the signature is produced +for it as is. For blobs longer than 257 bytes, 32 byte hash (blake2_256) is +signed instead. This is inherited from earlier Vault versions, and is currently +compatible with polkadot-js.

+

Transaction parsing sequence

+
    +
  1. +

    Cut the QR data and get:

    +
      +
    • encryption (single u8 from prelude)
    • +
    • transaction author public key, its length matching the encryption (32 or +33 u8 immediately after the prelude)
    • +
    • network genesis hash (32 u8 at the end)
    • +
    • SCALE-encoded call data and SCALE-encoded extensions as a combined blob +(everything that remains in between the transaction author public kay and +the network genesis hash)
    • +
    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged transaction.

    +
  2. +
  3. +

    Search the Vault database for the network specs (from the network genesis +hash and encryption).

    +

    If the network specs are not found, Vault shows:

    +
      +
    • public key and encryption of the transaction author key
    • +
    • error message, that suggests to add network with found genesis hash
    • +
    +
  4. +
  5. +

    Search the Vault database for the address key (from the transaction author +public key and encryption). Vault will try to interpret and display the +transaction in any case. Signing will be possible only if the parsing is +successful and the address key is known to Vault and is extended to the network +in question.

    +
      +
    • +

      Address key not found. Signing not possible. Output shows:

      +
        +
      • public key and encryption of the transaction author key
      • +
      • call and extensions parsing result
      • +
      • warning message, that suggests to add the address into Vault
      • +
      +
    • +
    • +

      Address key is found, but it is not extended to the network used. Signing +not possible. Output shows:

      +
        +
      • detailed author key information (base58 representation, identicon, +address details such as address being passworded etc)
      • +
      • call and extensions parsing result
      • +
      • warning message, that suggests extending the address into the network +used
      • +
      +
    • +
    • +

      Address key is found and is extended to the network used. Vault will +proceed to try and interpret the call and extensions. Detailed author +information will be shown regardless of the parsing outcome. +The signing will be allowed only if the parsing is successful.

      +
    • +
    +
  6. +
  7. +

    Separate the call and extensions. Call is prefixed by its length compact, +the compact is cut off, the part with length that was indicated in the compact +goes into call data, the part that remains goes into extensions data.

    +

    If no compact is found or the length is insufficient, Vault produces an +error that call and extensions could not be separated.

    +
  8. +
  9. +

    Get the metadata set from the Vault database, by the network name from the +network specs. Metadata is used to interpret extensions and then the call +itself.

    +

    If there are no metadata entries for the network at all, Vault produces an +error and asks to load the metadata.

    +

    RuntimeMetadata versions supported by Vault are V12, V13, and V14. +The crucial feature of the V14 is that the metadata contains the description +of the types used in the call and extensions production. V12 and V13 are +legacy versions and provide only text identifiers for the types, and in order to +use them, the supplemental types information is needed.

    +
  10. +
  11. +

    Process the extensions.

    +

    Vault already knows in which network the transaction was made, but does not +yet know the metadata version. Metadata version must be one of the signable +extensions. At the same time, the extensions and their order are recorded in the +network metadata. Thus, all metadata entries from the set are checked, from +newest to oldest, in an attempt to find metadata that both decodes the +extensions and has a version that matches the metadata version decoded from the +extensions.

    +

    If processing extensions with a single metadata entry results in an error, +the next metadata entry is tried. The errors would be displayed to user only if +all attempts with existing metadata have failed.

    +

    Typically, the extensions are quite stable in between the metadata versions +and in between the networks, however, they can be and sometimes are different.

    +

    In legacy metadata (RuntimeMetadata version being V12 and V13) +extensions have identifiers only, and in Vault the extensions for V12 and +V13 are hardcoded as:

    +
      +
    • Era era
    • +
    • Compact(u64) nonce
    • +
    • Compact(u128) tip
    • +
    • u32 metadata version
    • +
    • u32 tx version
    • +
    • H256 genesis hash
    • +
    • H256 block hash
    • +
    +

    If the extensions could not be decoded as the standard set or not all +extensions blob is used, the Vault rejects this metadata version and adds error +into the error set.

    +

    Metadata V14 has extensions with both identifiers and properly described +types, and Vault decodes extensions as they are recorded in the metadata. For +this, +ExtrinsicMetadata +part of the metadata +RuntimeMetadataV14 +is used. Vector signed_extensions in ExtrinsicMetadata is scanned twice, +first for types in ty of the +SignedExtensionMetadata +and then for types in additional_signed of the SignedExtensionMetadata. The +types, when resolved through the types database from the metadata, allow to cut +correct length blobs from the whole SCALE-encoded extensions blob and decode +them properly.

    +

    If any of these small decodings fails, the metadata version gets rejected by +the Vault and an error is added to the error set. Same happens if after all +extensions are scanned, some part of extensions blob remains unused.

    +

    There are some special extensions that must be treated separately. The +identifier in SignedExtensionMetadata and ident segment of the type +Path +are used to trigger types interpretation as specially treated extensions. Each +identifier is encountered twice, once for ty scan, and once for +additional_signed scan. In some cases only one of those types has non-empty +content, in some cases it is both. To distinguish the two, the type-associated +path is used, which points to where the type is defined in Substrate code. +Type-associated path has priority over the identifier.

    +

    Path triggers:

    +

    | Path | Type is interpreted as | +| :- | :- | +| Era | Era | +| CheckNonce | Nonce | +| ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs |

    +

    Identifier triggers, are used if the path trigger was not activated:

    +

    | Identifier | Type, if not empty and if there is no path trigger, is interpreted as | Note | +| :- | :- | :- | +| CheckSpecVersion | metadata version | gets checked with the metatada version from the metadata | +| CheckTxVersion | tx version | | +| CheckGenesis | network genesis hash | must match the genesis hash that was cut from the tail of the transaction | +| CheckMortality | block hash | must match the genesis hash if the transaction is immortal; Era has same identifier, but is distinguished by the path | +| CheckNonce | nonce | | +| ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs |

    +

    If the extension is not a special case, it is displayed as normal parser +output and does not participate in deciding if the transaction could be signed.

    +

    After all extensions are processed, the decoding must yield following +extensions:

    +
      +
    • exactly one Era
    • +
    • exactly one Nonce <- this is not so currently, fix it
    • +
    • exactly one BlockHash
    • +
    • exactly one GenesisHash <- this is not so currently, fix it
    • +
    • exactly one metadata version
    • +
    +

    If the extension set is different, this results in Vault error for this +particular metadata version, this error goes into error set.

    +

    The extensions in the metadata are checked on the metadata loading step, +long before any transactions are even produced. Metadata with incomplete +extensions causes a warning on load_metadata update generation step, and +another one when an update with such metadata gets loaded into Vault. +Nevertheless, such metadata loading into Vault is allowed, as there could be +other uses for metadata except signable transaction signing. Probably.

    +

    If the metadata version in extensions does not match the metadata version +of the metadata used, this results in Vault error for this particular metadata +version, this error goes into error set.

    +

    If the extensions are completely decoded, with correct set of the special +extensions and the metadata version from the extensions match the metadata +version of the metadata used, the extensions are considered correctly parsed, +and Vault can proceed to the call decoding.

    +

    If all metadata entries from the Vault database were tested and no suitable +solution is found, Vault produces an error stating that all attempts to decode +extensions have failed. This could be used by variety of reasons (see above), +but so far the most common one observed was users having the metadata in Vault +not up-to-date with the metadata on chain. Thus, the error must have a +recommendation to update the metadata first.

    +
  12. +
  13. +

    Process the call data.

    +

    After the metadata with correct version is established, it is used to parse +the call data itself. Each call begins with u8 pallet index, this is the +decoding entry point.

    +

    For V14 metadata the correct pallet is found in the set of available ones +in pallets field of +RuntimeMetadataV14, +by index field in corresponding +PalletMetadata. +The calls field of this PalletMetadata, if it is Some(_), contains +PalletCallMetadata +that provides the available calls enum described in types registry of the +RuntimeMetadataV14. For each type in the registry, including this calls enum, +encoded data size is determined, and the decoding is done according to the type.

    +

    For V12 and V13 metadata the correct pallet is also found by scanning +the available pallets and searching for correct pallet index. Then the call is +found using the call index (second u8 of the call data). Each call has +associated set of argument names and argument types, however, the argument type +is just a text identifier. The type definitions are not in the metadata and +transactions decoding requires supplemental types information. By default, the +Vault contains types information that was constructed for Westend when Westend +was still using V13 metadata and it was so far reasonably sufficient for +simple transactions parsing. If the Vault does not find the type information in +the database and has to decode the transaction using V12 or V13 +metadata, error is produced, indicating that there are no types. Elsewise, for +each encountered argument type the encoded data size is determined, and the +decoding is done according to the argument type.

    +

    There are types requiring special display:

    +
      +
    • calls (for cases when a call contains other calls)
    • +
    • numbers that are processed as the balances
    • +
    +

    Calls in V14 parsing are distinguished by Call in ident segment of the +type Path. +Calls in V12 and V13 metadata are distinguished by any element of the set +of calls type identifiers in string argument type.

    +

    At the moment the numbers that should be displayed as balance in +transactions with V14 metadata are determined by the type name type_name of +the corresponding +Field +being:

    +
      +
    • Balance
    • +
    • T::Balance
    • +
    • BalanceOf<T>
    • +
    • ExtendedBalance
    • +
    • BalanceOf<T, I>
    • +
    • DepositBalance
    • +
    • PalletBalanceOf<T>
    • +
    +

    Similar identifiers are used in V12 and V13, the checked value is the +string argument type itself.

    +

    There could be other instances when the number should be displayed as +balance. However, sometimes the balance is not the balance in the units +in the network specs, for example in the assets pallet. See issue +#1050 and comments +there for details.

    +

    If no errors were encountered while parsing and all call data was used in +the process, the transaction is considered parsed and is displayed to the user, +either ready for signing (if all other checks have passed) or as read-only.

    +
  14. +
  15. +

    If the user chooses to sign the transaction, the Vault produces QR code with +signature, that should be read back into the hot side. As soon as the signature +QR code is generated, the Vault considers the transaction signed.

    +

    All signed transactions are entered in the history log, and could be seen +and decoded again from the history log. Transactions not signed by the user do +not go in the history log.

    +

    If the key used for the transaction is passworded, user has three attempts +to enter the password correctly. Each incorrect password entry is reflected in +the history.

    +

    In the time interval between Vault displaying the parsed transaction and +the user approving it, the transaction details needed to generate the signature +and history log details are temporarily stored in the database. The temporary +storage gets cleared each time before and after use. Vault extracts the stored +transaction data only if the database checksum stored in navigator state is +same as the current checksum of the database. If the password is entered +incorrectly, the database is updated with "wrong password" history entry, and +the checksum in the state gets updated accordingly. Eventually, all transaction +info can and will be moved into state itself and temporary storage will not be +used.

    +
  16. +
+

Example

+

Alice makes transfer to Bob in Westend network.

+

Transaction:

+

530102d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27da40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e

+
+ + + + + + + + + + +
PartMeaningByte position
53Substrate-related content0
01Sr25519 encryption algorithm1
02Transaction2
d435..a27d1Alice public key3..=34
a404..48172SCALE-encoded call data35..=76
a4Compact call data length, 4135
0403..48173Call data36..=76
04Pallet index 4 in metadata, entry point for decoding36
b501..3f334Extensions77..=153
e143..423e5Westend genesis hash154..=185
+
+
1 +

d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d

+
+
2 +

a40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817

+
+
3 +

0403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817

+
+
4 +

b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33

+
+
5 +

e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e

+
+

Call content is parsed using Westend metadata, in this particular case westend9010

+
+ + + + + +
Call partMeaning
04Pallet index 4 (Balances) in metadata, entry point for decoding
03Method index 3 in pallet 4 (transfer_keep_alive), search in metadata what the method contains. Here it is MultiAddress for transfer destination and Compact(u128) balance.
00Enum variant in MultiAddress, AccountId
8eaf..6a486Associated AccountId data, Bob public key
0700e8764817Compact(u128) balance. Amount paid: 100000000000 or, with Westend decimals and unit, 100.000000000 mWND.
+
+
6 +

8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48

+
+

Extensions content

+
+ + + + + + + +
Extensions partMeaning
b501Era: phase 27, period 64
b8Nonce: 46
00Tip: 0 pWND
32230000Metadata version: 9010
05000000Tx version: 5
e143..423e7Westend genesis hash
538a..3f338Block hash
+
+
7 +

e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e

+
+
8 +

538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33

+
+

Message

+

Message has the following structure:

+ + + + + + + +
preludepublic key[u8] slicenetwork genesis hash
+

[u8] slice is represented as String if all bytes are valid UTF-8. If not all +bytes are valid UTF-8, the Vault produces an error.

+

It is critical that the message payloads are always clearly distinguishable from +the transaction payloads, i.e. it is never possible to trick user to sign +transaction posing as a message.

+

Current proposal is to enable message signing only with Sr25519 encryption +algorithm, with designated signing context, different from the signing context +used for transactions signing.

+

Bulk transactions

+

Bulk transactions is a SCALE-encoded TransactionBulk structure that consists of concatenated Vec<u8> transactions.

+

Bulking is a way to sign multiple translations at once and reduce the number of QR codes to scan.

+

Bulk transactions are processed in exactly the same way as single transactions.

+

Update

+

Update has following general structure:

+ + + + +
preludeverifier public key (if signed)update payloadsignature (if signed)reserved tail
+

Note that the verifier public key and signature parts appear only in signed +uploads. Preludes [0x53, 0xff, 0x<payload code>] are followed by the update +payload.

+

Every time user receives an unsigned update, the Vault displays a warning that +the update is not verified. Generally, the use of unsigned updates is +discouraged.

+

For update signing it is recommended to use a dedicated key, not used for +transactions. This way, if the signed data was not really the update data, but +something else posing as the update data, the signature produced could not do +any damage.

+
+ + + + +
EncryptionPublic key length, bytesSignature length, bytes
Ed255193264
Sr255193264
Ecdsa3365
no encryption00
+
+

reserved tail currently is not used and is expected to be empty. It could be +used later if the multisignatures are introduced for the updates. Expecting +reserved tail in update processing is done to keep code continuity in case +multisignatures introduction ever happens.

+

Because of the reserved tail, the update payload length has to be always +exactly declared, so that the update payload part could be cut correctly from +the update.

+

Detailed description of the update payloads and form in which they are used in +update itself and for generating update signature, could be found in Rust module +definitions::qr_transfers.

+

add_specs update payload, payload code c1

+

Introduces a new network to Vault, i.e. adds network specs to the Vault +database.

+

Update payload is ContentAddSpecs in to_transfer() form, i.e. double +SCALE-encoded NetworkSpecsToSend (second SCALE is to have the exact payload +length).

+

Payload signature is generated for SCALE-encoded NetworkSpecsToSend.

+

Network specs are stored in dedicated SPECSTREE tree of the Vault database. +Network specs identifier is NetworkSpecsKey, a key built from encryption used +by the network and the network genesis hash. There could be networks with +multiple encryption algorithms supported, thus the encryption is part of the +key.

+

Some elements of the network specs could be slightly different for networks with +the same genesis hash and different encryptions. There are:

+
    +
  • +

    Invariant specs, identical between all different encryptions:

    +
      +
    • name (network name as it appears in metadata)
    • +
    • base58 prefix
    • +
    +

    The reason is that the network name is and the base58 prefix can be a part +of the network metadata, and the network metadata is not encryption-specific.

    +
  • +
  • +

    Specs static for given encryption, that should not change over time once set:

    +
      +
    • decimals
    • +
    • unit
    • +
    +

    To replace these, the user would need to remove the network and add it +again, i.e. it won't be possible to do by accident.

    +
  • +
  • +

    Flexible display-related and convenience specs, that can change and could be +changed by simply loading new ones over the old ones:

    +
      +
    • color and secondary color (both currently not used, but historically are +there and may return at some point)
    • +
    • logo
    • +
    • path (default derivation path for network, //<network_name>)
    • +
    • title (network title as it gets displayed in the Vault)
    • +
    +
  • +
+

load_metadata update payload, payload code 80

+

Loads metadata for a network already known to Vault, i.e. for a network with +network specs in the Vault database.

+

Update payload is ContentLoadMeta in to_transfer() form, and consists of +concatenated SCALE-encoded metadata Vec<u8> and network genesis hash (H256, +always 32 bytes).

+

Same blob is used to generate the signature.

+

Network metadata is stored in dedicated METATREE tree of the Vault database. +Network metadata identifier in is MetaKey, a key built from the network name +and network metadata version.

+

Metadata suitable for Vault

+

Network metadata that can get into Vault and can be used by Vault only if it +complies with following requirements:

+
    +
  • metadata vector starts with b"meta" prelude
  • +
  • part of the metadata vector after b"meta" prelude is decodable as RuntimeMetadata
  • +
  • RuntimeMetadata version of the metadata is V12, V13 or V14
  • +
  • Metadata has System pallet
  • +
  • There is Version constant in System pallet
  • +
  • Version is decodable as RuntimeVersion
  • +
  • If the metadata contains base58 prefix, it must be decodable as u16 or u8
  • +
+

Additionally, if the metadata V14 is received, its associated extensions will +be scanned and user will be warned if the extensions are incompatible with +transactions signing.

+

Also in case of the metadata V14 the type of the encoded data stored in the +Version constant is also stored in the metadata types registry and in +principle could be different from RuntimeVersion above. At the moment, the +type of the Version is hardcoded, and any other types would not be processed +and would get rejected with an error.

+

load_types update payload, payload code 81

+

Load types information.

+

Type information is needed to decode transactions made in networks with metadata +RuntimeMetadata version V12 or V13.

+

Most of the networks are already using RuntimeMetadata version V14, which has +types information incorporated in the metadata itself.

+

The load_types update is expected to become obsolete soon.

+

Update payload is ContentLoadTypes in to_transfer(), i.e. double +SCALE-encoded Vec<TypeEntry> (second SCALE is to have the exact payload +length).

+

Payload signature is generated for SCALE-encoded Vec<TypeEntry>.

+

Types information is stored in SETTREE tree of the Vault database, under key +TYPES.

+

Verifiers

+

Vault can accept both verified and non-verified updates, however, information +once verified can not be replaced or updated by a weaker verifier without full +Vault reset.

+

A verifier could be Some(_) with corresponding public key inside or None. +All verifiers for the data follow trust on first use principle.

+

Vault uses:

+
    +
  • a single general verifier
  • +
  • a network verifier for each of the networks introduced to the Vault
  • +
+

General verifier information is stored in SETTREE tree of the Vault database, +under key GENERALVERIFIER. General verifier is always set to a value, be it +Some(_) or None. Removing the general verifier means setting it to None. +If no general verifier entry is found in the database, the database is +considered corrupted and the Vault must be reset.

+

Network verifier information is stored in dedicated VERIFIERS tree of the +Vault database. Network verifier identifier is VerifierKey, a key built from +the network genesis hash. Same network verifier is used for network specs with +any encryption algorithm and for network metadata. Network verifier could be +valid or invalid. Valid network verifier could be general or custom. Verifiers +installed as a result of an update are always valid. Invalid network verifier +blocks the use of the network unless the Vault is reset, it appears if user +marks custom verifier as no longer trusted.

+

Updating verifier could cause some data verified by the old verifier to be +removed, to avoid confusion regarding which verifier has signed the data +currently stored in the database. The data removed is called "hold", and user +receives a warning if accepting new update would cause hold data to be removed.

+

General verifier

+

General verifier is the strongest and the most reliable verifier known to the +Vault. General verifier could sign all kinds of updates. By default the Vault +uses Parity-associated key as general verifier, but users can remove it and set +their own. There could be only one general verifier at any time.

+

General verifier could be removed only by complete wipe of the Vault, through +Remove general certificate button in the Settings. This will reset the Vault +database to the default content and set the general verifier as None, that +will be updated to the first verifier encountered by the Vault.

+

Expected usage for this is that the user removes old general verifier and +immediately afterwards loads an update from the preferred source, thus setting +the general verifier to the user-preferred value.

+

General verifier can be updated from None to Some(_) by accepting a verified +update. This would result in removing "general hold", i.e.:

+
    +
  • all network data (network specs and metadata) for the networks for which the +verifier is set to the general one
  • +
  • types information
  • +
+

General verifier could not be changed from Some(_) to another, different +Some(_) by simply accepting updates.

+

Note that if the general verifier is None, none of the custom verifiers could +be Some(_). Similarly, if the verifier is recorded as custom in the database, +its value can not be the same as the value of the general verifier. If found, +those situations indicate the database corruption.

+

Custom verifiers

+

Custom verifiers could be used for network information that was verified, but +not with the general verifier. There could be as many as needed custom verifiers +at any time. Custom verifier is considered weaker than the general verifier.

+

Custom verifier set to None could be updated to:

+
    +
  • Another custom verifier set to Some(_)
  • +
  • General verifier
  • +
+

Custom verifier set to Some(_) could be updated to general verifier.

+

These verifier updates can be done by accepting an update signed by a new +verifier.

+

Any of the custom network verifier updates would result in removing "hold", i.e. +all network specs entries (for all encryption algorithms on file) and all +network metadata entries.

+

Common update processing sequence:

+
    +
  1. +

    Cut the QR data and get:

    +
      +
    • encryption used by verifier (single u8 from prelude)
    • +
    • (only if the update is signed, i.e. the encryption is not 0xff) +update verifier public key, its length matching the encryption (32 or +33 u8 immediately after the prelude)
    • +
    • concatenated update payload, verifier signature (only if the update is +signed) and reserved tail.
    • +
    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged update.

    +
  2. +
  3. +

    Using the payload type from the prelude, determine the update payload length +and cut payload from the concatenated verifier signature and reserved tail.

    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged update.

    +
  4. +
  5. +

    (only if the update is signed, i.e. the encryption is not 0xff) +Cut verifier signature, its length matching the encryption (64 or 65 u8 +immediately after the update payload). Remaining data is reserved tail, +currently it is not used.

    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged update.

    +
  6. +
  7. +

    Verify the signature for the payload. If this fails, Vault produces an error +indicating that the update has invalid signature.

    +
  8. +
+

add_specs processing sequence

+
    +
  1. +

    Update payload is transformed into ContentAddSpecs and the incoming +NetworkSpecsToSend are retrieved, or the Vault produces an error indicating +that the add_specs payload is damaged.

    +
  2. +
  3. +

    Vault checks that there is no change in invariant specs occurring.

    +

    If there are entries in the SPECSTREE of the Vault database with same +genesis hash as in newly received specs (the encryption not necessarily +matches), the Vault checks that the name and base58 prefix in the received +specs are same as in the specs already in the Vault database.

    +
  4. +
  5. +

    Vault checks the verifier entry for the received genesis hash.

    +

    If there are no entries, i.e. the network is altogether new to the Vault, +the specs could be added into the database. During the same database transaction +the network verifier is set up:

    +

    | add_specs update verification | General verifier in Vault database | Action | +| :- | :- | :- | +| unverified, 0xff update encryption code | None or Some(_) | (1) set network verifier to custom, None (regardless of the general verifier); (2) add specs | +| verified by a | None | (1) set network verifier to general; (2) set general verifier to Some(a), process the general hold; (3) add specs | +| verified by a | Some(b) | (1) set network verifier to custom, Some(a); (2) add specs | +| verified by a | Some(a) | (1) set network verifier to general; (2) add specs |

    +

    If there are entries, i.e. the network was known to the Vault at some +point after the last Vault reset, the network verifier in the database and the +verifier of the update are compared. The specs could be added in the database if

    +
      +
    1. there are no verifier mismatches encountered (i.e. verifier same or +stronger)
    2. +
    3. received data causes no change in specs static for encryption
    4. +
    5. the specs are not yet in the database in exactly same form
    6. +
    +

    Note that if the exactly same specs as already in the database are received +with updated verifier and the user accepts the update, the verifier will get +updated and the specs will stay in the database.

    +

    | add_specs update verification | Network verifier in Vault database | General verifier in Vault database | Action | +| :- | :- | :- | :- | +| unverified, 0xff update encryption code | custom, None | None | accept specs if good | +| unverified, 0xff update encryption code | custom, None | Some(a) | accept specs if good | +| unverified, 0xff update encryption code | general | None | accept specs if good | +| unverified, 0xff update encryption code | general | Some(a) | error: update should have been signed by a | +| verified by a | custom, None | None | (1) change network verifier to general, process the network hold; (2) set general verifier to Some(a), process the general hold; (3) accept specs if good | +| verified by a | custom, None | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | +| verified by a | custom, None | Some(b) | (1) change network verifier to custom, Some(a), process the network hold; (2) accept specs if good | +| verified by a | custom, Some(a) | Some(b) | accept specs if good | +| verified by a | custom, Some(b) | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | +| verified by a | custom, Some(b) | Some(c) | error: update should have been signed by b or c |

    +

    Before the NetworkSpecsToSend are added in the SPECSTREE, they get +transformed into NetworkSpecs, and have the order field (display order in +Vault network lists) added. Each new network specs entry gets added in the end +of the list.

    +
  6. +
+

load_meta processing sequence

+
    +
  1. +

    Update payload is transformed into ContentLoadMeta, from which the metadata +and the genesis hash are retrieved, or the Vault produces an error indicating +that the load_metadata payload is damaged.

    +
  2. +
  3. +

    Vault checks that the received metadata fulfills all Vault metadata +requirements outlined above. Otherwise an +error is produced indicating that the received metadata is invalid.

    +

    Incoming MetaValues are produced, that contain network name, network +metadata version and optional base58 prefix (if it is recorded in the metadata).

    +
  4. +
  5. +

    Network genesis hash is used to generate VerifierKey and check if the +network has an established network verifier in the Vault database. If there +is no network verifier associated with genesis hash, an error is produced, +indicating that the network metadata could be loaded only for networks +introduced to Vault.

    +
  6. +
  7. +

    SPECSTREE tree of the Vault database is scanned in search of entries with +genesis hash matching the one received in payload.

    +

    Vault accepts load_metadata updates only for the networks that have at +least one network specs entry in the database.

    +

    Note that if the verifier in step (3) above is found, it not necessarily +means that the specs are found (for example, if a network verified by general +verifier was removed by user).

    +

    If the specs are found, the Vault checks that the network name and, if +present, base58 prefix from the received metadata match the ones in network +specs from the database. If the values do not match, the Vault produces an +error.

    +
  8. +
  9. +

    Vault compares the verifier of the received update and the verifier for the +network from the database. The update verifier must be exactly the same as the +verifier already in the database. If there is mismatch, Vault produces an +error, indication that the load_metadata update for the network must be signed +by the specified verifier (general or custom) or unsigned.

    +
  10. +
  11. +

    If the update has passed all checks above, the Vault searches for the +metadata entry in the METATREE of the Vault database, using network name and +version from update to produce MetaKey.

    +

    If the key is not found in the database, the metadata could be added.

    +

    If the key is found in the database and metadata is exactly the same, +the Vault produces an error indicating that the metadata is already in the +database. This is expected to be quite common outcome.

    +

    If the key is found in the database and the metadata is different, the +Vault produces an error. Metadata must be not acceptable. This situation can +occur if there was a silent metadata update or if the metadata is corrupted.

    +
  12. +
+

load_types processing sequence

+
    +
  1. +

    Update payload is transformed into ContentLoadTypes, from which the types +description vector Vec<TypeEntry> is retrieved, or the Vault produces an +error indicating that the load_types payload is damaged.

    +
  2. +
  3. +

    load_types updates must be signed by the general verifier.

    +

    | load_types update verification | General verifier in Vault database | Action | +| :- | :- | :- | +| unverified, 0xff update encryption code | None | load types if the types are not yet in the database | +| verified by a | None | (1) set general verifier to Some(a), process the general hold; (2) load types, warn if the types are the same as before | +| verified by a | Some(b) | reject types, error indicates that load_types requires general verifier signature | +| verified by a | Some(a) | load types if the types are not yet in the database |

    +

    If the load_types verifier is same as the general verifier in the database +and the types are same as the types in the database, the Vault produces an +error indicating that the types are already known.

    +

    Each time the types are loaded, the Vault produces a warning. load_types +is rare and quite unexpected operation.

    +
  4. +
+

Derivations import, payload code de

+

Derivations import has the following structure:

+ + + + +
preludederivations import payload
+

Derivations import payload is a SCALE-encoded ExportAddrs structure.

+

It does not contain any private keys or seed phrases.

+

ExportAddrs structure holds the following information about each key:

+
    +
  • name and public key of the seed the derived key belongs to
  • +
  • ss58 address of the derived key (h160 for ethereum based chains)
  • +
  • derivation path
  • +
  • encryption type
  • +
  • genesis hash of the network the key is used in
  • +
+

When processing derivations import, all data after prelude is transformed into +ExportAddrs. Network genesis hash, encryption and derivations set are +derived from it, or the Vault produces a warning indicating that the derivation +import payload is corrupted.

+

Vault checks that the network for which the derivations are imported has +network specs in the Vault database. If not, a warning is produced.

+

Vault checks that the derivation set contains only valid derivations. If any +derivation is unsuitable, a warning is produced indicating this.

+

If the user accepts the derivations import, Vault generates a key for each valid +derivation.

+

If one of the derived keys already exists, it gets ignored, i.e. no error is +produced.

+

If there are two derivations with identical path within the payload, only one +derived key is created.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/development/Vault-Structure.html b/development/Vault-Structure.html new file mode 100644 index 0000000000..1b32a6f7a0 --- /dev/null +++ b/development/Vault-Structure.html @@ -0,0 +1,585 @@ + + + + + + Vault structure - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Vault structure

+

Architectural structure

+

On top level, Vault consists of following parts:

+
    +
  1. Rust backend core
  2. +
  3. FFI interface
  4. +
  5. Native frontend
  6. +
  7. Database
  8. +
+

Rust backend

+

There are 3 actual endpoints in rust folder: signer, which is source of +library used for Vault itself; generate_message, which is used to update +Vault repo with new built-in network information and to generate +over-the-airgap updates; and qr_reader_pc which is a minimalistic app to parse +qr codes that we had to write since there was no reasonably working alternative.

+

Sub-folders of the rust folder:

+
    +
  • constants — constant values defined for the whole workspace.
  • +
  • db_handling — all database-related operations for Vault and +generate_message tool. Most of the business logic is contained here.
  • +
  • defaults — built-in and test data for database
  • +
  • definitions — objects used across the workspace are defined here
  • +
  • files — contains test files and is used for build and update generation +processes. Most contents are gitignored.
  • +
  • generate_message — tool to generate over-the-airgap updates and maintain +network info database on hot side
  • +
  • navigator — navigation for Vault app; it is realized in rust to unify app +behavior across the platforms
  • +
  • parser - parses signable transactions. This is internal logic for +transaction_parsing that is used when signable transaction is identified, but +it could be used as a standalone lib for the same purpose.
  • +
  • printing_balance — small lib to render tokens with proper units
  • +
  • qr_reader_pc — small standalone PC app to parse QR codes in Vault +ecosystem. Also is capable of parsing multiframe payloads (theoretically, in +practice it is not feasible due to PC webcam low performance)
  • +
  • qr_reader_phone — logic to parse QR payloads in Vault
  • +
  • qrcode_rtx — multiframe erasure-encoded payload generator for signer update +QR animation.
  • +
  • qrcode_static — generation of static qr codes used all over the workspace
  • +
  • signer — FFI interface crate to generate bindings that bridge native code +and rust backend
  • +
  • transaction_parsing — high-level parser for all QR payloads sent into Vault
  • +
  • transaction_signing — all operations that could be performed when user +accepts payload parsed with transaction_parsing
  • +
+

FFI interface

+

For interfacing rust code and native interface we use +uniffi framework. It is a framework +intended to aid building cross-platform software in Rust especially for the +cases of re-using components written in Rust in the smartphone application +development contexts. Other than Vault itself one of the most notable users of +the uniffi framework are the Mozilla Application Services

+

uniffi framework provides a way for the developer to define a clear and a +typesafe FFI interface between components written in Rust and languages such +as Kotlin and Swift. This approach leads to a much more robust architecture +than implementing a homegrown FFI with, say, passing JSON-serialized data back +and forth between Kotlin and Rust code. Here is why.

+

Suppose the application needs to pass a following structure through FFI from +Kotlin to Rust or back:

+
#[derive(Serialize, Deserialize)]
+ struct Address { street:String, city: String, }
+

This would mean that on the Kotlin side of the FFI there would have to be some +way of turning this type from JSON into a Kotlin type. It may be some sort of +scheme or even a manual JSON value-by-key data extraction.

+

Now suppose this struct is changed by adding and removing some fields:

+
#[derive(Serialize, Deserialize)]
+ struct Address { country: String, city: String, index: usize, }
+

After this change on a Rust-side the developer would have to remember to +reflect these changes on the Kotlin and Swift sides and if that is not done +there is a chance that it will not be caught in build-time by CI. It is quite +hard to remember everything and having a guarantee that such things would be +caught at compile time is much better than not having this sort of guarantee. +One of the things uniffi solves is exactly this: it provides compile-time +guarantees of typesafety.

+

The other concern with the JSON serialization approach is performance. As long +as small objects are transferred back and forth it is no trouble encoding them +into strings. But suppose the application requires transferring bigger blobs of +binary data such as png images or even some metadata files. Using JSON would +force the developer to encode such blobs as Strings before passing them into +FFI and decoding them back into binary blobs on the other side of the FFI. +uniffi helps to avoid this also.

+

Native frontend

+

Native frontends are made separately for each supported platform. To keep things +uniform, interfaces are made as simple as possible and as much code is written +in unified Rust component, as possible. Yet, platform-specific functions, +including runtime management and threading, are also accessed through native +framework. The structure of native frontend follows modern (2022) reactive +design pattern of View-Action-Model triad. Thus, all backend is located in data +model section, along with few native business logic components.

+

It is important to note, that native navigation is not used, as due to +subtle differences in its seemingly uniform design across platforms. Navigation +is instead implemented on Rust side and, as an additional advantage, is tested +there at lower computational cost for CI pipelines.

+

Database

+

For storage of all data except secrets, a sled database is used. Choice of db +was based on its lightweightness, reliability, portability.

+

Vault database structure

+

Functional structure

+

Vault has the following systems:

+
    +
  • Secure key management
  • +
  • Signing
  • +
  • Transaction parsing
  • +
  • Transaction visualization
  • +
  • Airgap data transfer
  • +
  • Airgap updating
  • +
  • Network detector
  • +
  • Logging
  • +
  • Self-signing updating capability
  • +
  • UI
  • +
+

These systems are located in different parts the app and some of them rely on +hot-side infrastructure. The general design goal was to isolate as much as +possible in easily maintainable Rust code and keep only necessary functions in +native side. Currently, those include:

+
    +
  • Hardware secret storage: we rely on hardware designer's KMS in accordance with +best practices
  • +
  • Network detector: network operations are limited by OS and we try to keep +network access permissions for the app to minimum while still maintaining +simple breach detection
  • +
  • Camera: currently image capture and recognition systems implementations in +native environments by far surpass 3rd party ones. This might change in the +future, but at least image capture will be managed by OS to maintain platform +compatibility.
  • +
  • UI: we use native frameworks and components for rendering and user interaction +for best look and feel of the app.
  • +
+

Secure key management

+

Keypairs used in Vault are generated from secret seed phrase, derivation path +and optional secret password, in accordance with specifications described in +subkey manual using code imported directly from substrate codebase for best +conformance.

+

Secret seed phrase storage

+

Secret seed phrase is stored as a string in devices original KMS. It is +symmetrically encrypted with a strong key that either is stored in a +hardware-protected keyring or uses biometric data (in case of legacy android +devices without strongbox system). Secrets access is managed by operating +system's built-in authorization interface. Authorization is required for +creation of seeds, access to seeds and removal of seeds. One particular special +case is addition of the first seed on iOS platform, that does not trigger +authorization mechanism as the storage is empty at this moment; this is in +agreement with iOS key management system design and potentially leads to a +threat of attacker replacing a single key by adding it to empty device; this +attack is countered by authorization on seed removal.

+

Thus, secret seeds source of truth is KMS. To synchronize the rest of the app, +list of seed identifiers is sent to backend on app startup and on all events +related to changes in this list by calling update_seed_names(Vec<String>).

+

Random seed generator and seed recovery tools are implemented in Rust. These +are the only 2 cases where seed originates not in KMS.

+

Derivation path management

+

The most complex part of key management is storage of derivation strings and +public keys. Improper handling here may lead to user's loss of control over +their assets.

+

Key records are stored as strings in database associated with secret seed +identifiers, crypto algorithm, and list of allowed networks. Public key and its +cryptographic algorithm are used to deterministically generate database record +key - thus by design distinct key entries directly correspond to addresses on +chain.

+

Creation of new records requires generation of public keys through derivation +process, thus secret seed should be queried - so adding items to this database +requires authentication.

+

Substrate keys could be natively used across all networks supporting their +crypto algorithm. This may lead to accidental re-use of keys; thus it is not +forbidden by the app, but networks are isolated unless user explicitly expresses +desire to enable key in given network. From user side, it is abstracted into +creation of independent addresses; however, real implementation stores addresses +with public keys as storage keys and thus does not distinguish between networks. +To isolate networks, each key stores a field with a list of allowed networks, +and when user "creates" address with the same pubkey as already existing one, it +is just another network added to the list of networks.

+

Keys could be imported through QR code created by generate_message tool +(instructions). A +plaintext newline-separated list of derivations should be supplied to the tool +along with network identifier; the import thus is bound to certain network, +however, it is not bound to any particular seed - user can select any of +created seeds and, after authorization, create keys with given paths. Bulk +import of password-protected keys is forbidden at the moment.

+

Optional password

+

Optional password (part of derivation path after ///) is never stored, only +addresses that have password in their derivation path are marked. Thus, password +is queried every time it is needed with a tool separate from OS authentication +interface, but together with authentication screen, as password is always used +with a secret seed phrase.

+

Memory safety in secure key management

+

All memory handles by native framework relies on native framework's memory +protection mechanisms (JVM virtualization and Swift isolation and garbage +collection). However, when secrets are processed in Rust, no inherent designed +memory safety features are available. To prevent secrets remaining in memory +after their use, zeroize library is used. Also, describe string destruction +protocol or fix it

+

Signing

+

Every payload to be signed is first extracted from transfer payload in agreement +with UOS specification and polkadot-js implementation. Only payloads that could +be parsed and visualized somehow could be signed to avoid blind signing - thus +on parser error no signable payload is produced and signing procedure is not +initiated.

+

When signable payload is ready, it is stored in TRANSACTION tree while +user makes decision on whether to sign it. While in storage, database checksum +is monitored for changes.

+

Signing uses private key generated from KMS-protected secret seed phrase, +derivation string and optional password. Signing operation itself is imported +directly from substrate codebase as dependency.

+

Signing event or its failure is logged and signature wrapped in UOS format is +presented as a qr static image on the phone.

+

Transaction parsing

+

Transaction parsing process is described in UOS format documentation

+

Transaction visualization

+

Signable transaction is decomposed into hierarchical cards for clarity. All +possible scale-decodable types are assigned to generalized visualization +patterns ("transaction cards") with some types having special visualizations +(balance formatted with proper decimals and units, identicons added to +identities, etc.). Each card is assigned order and indent that allow the +cards to be shown in a lazy view environment. Thus, any networks that have +minimal metadata requirements should be decodable and visualizable.

+

Some cards also include documentation entries fetched from metadata. Those could +be expanded in UI on touch.

+

Thus, user has opportunity to read the whole transaction before signing.

+

Airgap data transfer

+

Transactions are encoded in accordance to UOS standard in QR codes. QR codes can +be sent into Vault - through static frames or dynamic multiframe animations - +and back - only as static frames. QR codes are decoded through native image +recognition system and decoded through rust backend; output QR codes are +generated in png format by backend. There are 2 formats of multiframe QR codes: +legacy multiframe and raptorq multiframe. Legacy multiframe format requires +all frames in animation to be collected and is thus unpractical for larger +payloads. RaptorQ multiframe format allows any subset of frames to be collected +and thus allows large payloads to be transferred effortlessly.

+

Fast multiframe transfer works efficiently at 30 fps. Typical large payloads +contain up to 200 frames at current state of networks. This can be theoretically +performed in under 10 seconds; practically this works in under 1 minute.

+

Airgap updating

+

Vault can download new networks and metadata updates from QR data. To prevent +malicious updates from compromising security, a system of certificates is +implemented.

+

Updates could be generated by any user; they can also be distributed in signed form to delegate validity check job to trusted parties. These trusted parties should sign metadata with their asymmetric key - certificate - and they become verifiers once their update is uploaded to Vault. There are 2 tiers of certificates - "general" and "custom", with the first allowing more comfortable use of Vault at cost of only one general verifier allowed.

+

Rules about verifier certificates are designed around simplicity of security protocol: one trusted party becomes main source of trust and updates generated by it are just accepted. If that party does not have all required updates available, other party can be added as custom verifier. That verifier is not allowed to change specs at will and suspicious activity by custom verifier would interfere with network usage thus stopping user from doing potentially harmful stuff. This allows less strenuous security policy on user side.

+

It is important to note that certificates could not be effectively revoked considering airgapped nature of the app, thus it is recommended to keep their keys on airgapped Vault devices if updates signed by these certificates are distributed publicly.

+

More on certificates

+

Network detector

+

An additional security feature is network detector. When the app is on, it runs +in the background (on low-priority thread) and attempts to monitor the network +availability. This detector is implemented differently on different platforms +and has different features and limitations; however, it does not and could not +provide full connectivity monitoring and proper maintaining of airgap is +dependent on user. Vault device should always be kept in airplane mode and all +other connectivity should be disabled.

+

The basic idea of network detection alertness is that when network connectivity +is detected, 3 things happen:

+
    +
  1. Event is logged in history
  2. +
  3. Visual indication of network status is presented to user (shield in corner of +screen and message in alert activated by the shield)
  4. +
  5. Certain Vault functions are disabled (user authentication, seed and key +creation, etc.) - features that bring secret material into active app memory +from storage
  6. +
+

When network connectivity is lost, only visual indication changes. To restore +clean state of Vault, user should acknowledge safety alert by pressing on +shield icon, reading and accepting the warning. Upon acknowledging, it is logged +in history, visual indication changes to green and all normal Vault functions +are restored.

+

Network detector in iOS

+

Airplane mode detection in iOS is forbidden and may lead to expulsion of the app +from the App Store. Thus, detector relies on probing network interfaces. If any +network interface is up, network alert is triggered.

+

Network detector in Android

+

Network detector is triggered directly by airplane mode change event.

+

Bluetooth, NFC, etc,

+

Other possible network connectivity methods are not monitored. Even though it is +possible to add detectors for them, accessing their status will require the app +to request corresponding permissions form OS, thus reducing app's isolation and +decreasing overall security - first, by increasing chance of leak in breach +event, and second, by making corrupt fake app that leaks information through +network appear more normal. Furthermore, there is information that network might +be connected through cable in some devices in airplane mode; there was no +research on what debugging through cable is capable of for devices in airplane +mode. Thus, network detector is a convenience too and should not be relied on as +sole source of security; user is responsible for device isolation.

+

Logging

+

All events that happen in Vault are logged by backend in history tree of +database. From user interface, all events are presented in chronological order +on log screen. On the same screen, history checksum could be seen and custom +text entries could be added to database. Checksum uses time added to history +records in computation and is therefore impractical to forge.

+

Events presented on log screen are colored to distinguish "normal" and +"dangerous" events. Shown records give minimal important information about the +event. On click, detailed info screen is shown, where all events happened at the +same time are presented in detail (including transactions, that are decoded for +review if metadata is still available).

+

Log could also be erased for privacy; erasure event is logged and becomes the +first event in recorded history.

+

Self-signing updating capability

+

Vault can sign network and metadata updates that could be used for other +signers. User can select any update component present in Vault and any key +available for any network and generate a qr code which, upon decoding, can be +used by generate_message or similar tool to generate over-the-airgap update. +See detailed documentation

+

This feature was designed for elegance, but it is quite useful to maintain +update signing key for large update distribution centers, for it allows to +securely store secret certificate key that could not be practically revoked if +compromised.

+

UI

+

User interface is organized through View-Action-DataModel abstraction.

+

View

+

Vault visual representation is abstracted in 3 visual layers placed on top of +each other: screen, modal and alert. This structure is mostly an +adaptation of iOS design guidelines, as android native UI is much flexible and +it is easier to adopt it to iOS design patterns than vice versa. Up to one of +each component could be presented simultaneously. Screen component is always +present in the app, but sometimes it is fully or partially blocked by other +components.

+

Modals and alerts are dismissed on goBack action, screens have complex +navigation rules. Modals require user to take action and interrupt flow. Alerts +are used for short information interruptions, like error messages or +confirmations.

+

In addition to these, header bar is always present on screen and footer bar is +presented in some cases. Footer bar always has same structure and only allows +navigation to one of navigation roots. Top bar might contain back button, screen +name, and extra menu button; status indicator is always shown on top bar.

+

Action

+

Almost all actions available to user are in fact handled by single operation - +action() backend function, that is called through pushButton native +interface. In native side, this operation is debounced by time. On rust side, +actions are performed on static mutex storing app state; on blocked mutex +actions is ignored, as well as impossible actions that are not allowed in +current state of navigation. Thus, state of the app is protected against +undefined concurrency effects by hardware button-like behavior of action().

+

Most actions lead to change of shown combination of screen, modal and alert; but +some actions - for example, those involving keyboard input - alter contents of a +UI component. In most cases, all parameters of UI components are passed as +states (more or less similar concept on all platforms) and frontend framework +detects updates and seamlessly performs proper rendering.

+

Action accepts 3 parameters: action type (enum), action data (&str), secret data +(&str). Secret data is used to transfer secret information and care is taken to +always properly zeroize its contents; on contrary, action data could contain +large strings and is optimized normally.

+

Data model

+

Data model as seen by native UI consists of 3 parts: secret seed content, +network detection state and screen contents. Secret seed content consists of +list of seed names that are used as handles to fetch secret material from secure +storage. Network detection state is a 4-state variable that describes current +network detection state (safe state, network is currently detected, network was +detected before, error state). The rest of data model is a black box in Rust.

+

From Rust side, model is generated by navigation crate. The state of the app +is stored in lazy static State object and sufficient information required for +View rendering is generated into ActionResult object that is sent into native +layer on each action update.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/editor.js b/editor.js new file mode 100644 index 0000000000..464790c499 --- /dev/null +++ b/editor.js @@ -0,0 +1,29 @@ +"use strict"; +window.editors = []; +(function(editors) { + if (typeof(ace) === 'undefined' || !ace) { + return; + } + + Array.from(document.querySelectorAll('.editable')).forEach(function(editable) { + let display_line_numbers = window.playground_line_numbers || false; + + let editor = ace.edit(editable); + editor.setOptions({ + highlightActiveLine: false, + showPrintMargin: false, + showLineNumbers: display_line_numbers, + showGutter: display_line_numbers, + maxLines: Infinity, + fontSize: "0.875em" // please adjust the font size of the code in general.css + }); + + editor.$blockScrolling = Infinity; + + editor.getSession().setMode("ace/mode/rust"); + + editor.originalCode = editor.getValue(); + + editors.push(editor); + }); +})(window.editors); diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000000..94b20dd2ef --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.5 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + diff --git a/fonts/OPEN-SANS-LICENSE.txt b/fonts/OPEN-SANS-LICENSE.txt new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/fonts/OPEN-SANS-LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/fonts/SOURCE-CODE-PRO-LICENSE.txt b/fonts/SOURCE-CODE-PRO-LICENSE.txt new file mode 100644 index 0000000000..366206f549 --- /dev/null +++ b/fonts/SOURCE-CODE-PRO-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/fonts.css b/fonts/fonts.css new file mode 100644 index 0000000000..858efa5980 --- /dev/null +++ b/fonts/fonts.css @@ -0,0 +1,100 @@ +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */ +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */ + +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), + url('open-sans-v17-all-charsets-300.woff2') format('woff2'); +} + +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), + url('open-sans-v17-all-charsets-300italic.woff2') format('woff2'); +} + +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), + url('open-sans-v17-all-charsets-regular.woff2') format('woff2'); +} + +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), + url('open-sans-v17-all-charsets-italic.woff2') format('woff2'); +} + +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), + url('open-sans-v17-all-charsets-600.woff2') format('woff2'); +} + +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), + url('open-sans-v17-all-charsets-600italic.woff2') format('woff2'); +} + +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), + url('open-sans-v17-all-charsets-700.woff2') format('woff2'); +} + +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), + url('open-sans-v17-all-charsets-700italic.woff2') format('woff2'); +} + +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), + url('open-sans-v17-all-charsets-800.woff2') format('woff2'); +} + +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), + url('open-sans-v17-all-charsets-800italic.woff2') format('woff2'); +} + +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: url('source-code-pro-v11-all-charsets-500.woff2') format('woff2'); +} diff --git a/fonts/open-sans-v17-all-charsets-300.woff2 b/fonts/open-sans-v17-all-charsets-300.woff2 new file mode 100644 index 0000000000..9f51be370f Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-300.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-300italic.woff2 b/fonts/open-sans-v17-all-charsets-300italic.woff2 new file mode 100644 index 0000000000..2f54544841 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-300italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-600.woff2 b/fonts/open-sans-v17-all-charsets-600.woff2 new file mode 100644 index 0000000000..f503d558d5 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-600.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-600italic.woff2 b/fonts/open-sans-v17-all-charsets-600italic.woff2 new file mode 100644 index 0000000000..c99aabe803 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-600italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-700.woff2 b/fonts/open-sans-v17-all-charsets-700.woff2 new file mode 100644 index 0000000000..421a1ab25f Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-700.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-700italic.woff2 b/fonts/open-sans-v17-all-charsets-700italic.woff2 new file mode 100644 index 0000000000..12ce3d20d1 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-700italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-800.woff2 b/fonts/open-sans-v17-all-charsets-800.woff2 new file mode 100644 index 0000000000..c94a223b03 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-800.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-800italic.woff2 b/fonts/open-sans-v17-all-charsets-800italic.woff2 new file mode 100644 index 0000000000..eed7d3c63d Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-800italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-italic.woff2 b/fonts/open-sans-v17-all-charsets-italic.woff2 new file mode 100644 index 0000000000..398b68a085 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-italic.woff2 differ diff --git a/fonts/open-sans-v17-all-charsets-regular.woff2 b/fonts/open-sans-v17-all-charsets-regular.woff2 new file mode 100644 index 0000000000..8383e94c65 Binary files /dev/null and b/fonts/open-sans-v17-all-charsets-regular.woff2 differ diff --git a/fonts/source-code-pro-v11-all-charsets-500.woff2 b/fonts/source-code-pro-v11-all-charsets-500.woff2 new file mode 100644 index 0000000000..722245682f Binary files /dev/null and b/fonts/source-code-pro-v11-all-charsets-500.woff2 differ diff --git a/highlight.css b/highlight.css new file mode 100644 index 0000000000..ba57b82b27 --- /dev/null +++ b/highlight.css @@ -0,0 +1,82 @@ +/* + * An increased contrast highlighting scheme loosely based on the + * "Base16 Atelier Dune Light" theme by Bram de Haan + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) + * Original Base16 color scheme by Chris Kempson + * (https://github.com/chriskempson/base16) + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #575757; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d70025; +} + +/* Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b21e00; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #008200; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #0030f2; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #9d00ec; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f6f7f6; + color: #000; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #22863a; + background-color: #f0fff4; +} + +.hljs-deletion { + color: #b31d28; + background-color: #ffeef0; +} diff --git a/highlight.js b/highlight.js new file mode 100644 index 0000000000..180385b702 --- /dev/null +++ b/highlight.js @@ -0,0 +1,6 @@ +/* + Highlight.js 10.1.1 (93fd0d73) + License: BSD-3-Clause + Copyright (c) 2006-2020, Ivan Sagalaev +*/ +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}());hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}());hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}());hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}());hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}());hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[c],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}());hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}());hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}());hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}());hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}());hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}());hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}());hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}());hljs.registerLanguage("http",function(){"use strict";return function(e){var n="HTTP/[0-9\\.]+";return{name:"HTTP",aliases:["https"],illegal:"\\S",contains:[{begin:"^"+n,end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) "+n+"$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:n},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}}());hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}());hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}());hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}}());hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}());hljs.registerLanguage("ini",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(...n){return n.map(n=>e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}());hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}());hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}());hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}());hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}());hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}());hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}());hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:">>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}());hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}());hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}());hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}());hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}());hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}());hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}());hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}());hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}());hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}());hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}());hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}());hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:""},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}());hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}());hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}());hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}());hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); diff --git a/index.html b/index.html new file mode 100644 index 0000000000..d9b04576f1 --- /dev/null +++ b/index.html @@ -0,0 +1,280 @@ + + + + + + About Polkadot Vault - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Polkadot Vault

+
+

+
+

Polkadot Vault - Turn your smartphone into a hardware wallet

+

Polkadot Vault is a mobile application that allows any smartphone to act as an air-gapped crypto wallet. This is also known as "cold storage".

+

You can create accounts in Substrate-based networks, sign messages/transactions, and transfer funds to and from these accounts without any sort of connectivity enabled on the device.

+

You must turn off or even physically remove the smartphone's Wifi, Mobile Network, and Bluetooth to ensure that the mobile phone containing these accounts will not be exposed to any online threat. Switching to airplane mode suffices in many cases.

+

Disabling the mobile phone's networking abilities is a requirement for the app to be used as intended, check our wiki for more details.

+

Have a look at the tutorial on our wiki to learn how to use Polkadot Vault together with Polkadot-js app.

+

Any data transfer from or to the app happens using QR code. By doing so, the most sensitive piece of information, the private keys, will never leave the phone. The Polkadot Vault mobile app can be used to store any Substrate account, this includes Polkadot (DOT) and Kusama (KSM) networks.

+

Key features

+
    +
  • This is not a complete crypto wallet in itself. The Vault does not sync with blockchain, so it does not know your account balance, whether transactions were successful or even if the account exists! This is a cold wallet app that only stores keys, reads and signs messages. It should always be used with hot wallet like polkadot.js.
  • +
  • The Vault alone does not make your accounts secure. You must maintain security yourself. Airgap should be only part of your security protocol, improper use of Vault could still lead to loss of funds and/or secrets.
  • +
  • When properly used, Vault provides best achievable security with Substrate networks to-date.
  • +
+

System requirements

+

Currently Vault is available only for iOS. Android version is coming soon.

+

Getting Started

+

These tutorials and docs are heavily outdated at the moment, please use them as references or help improving

+

If you are upgrading from older version of Vault, please see changelog and upgrading Vault

+

Please note that the Vault app is an advanced tool designed for maximum security and complex features. In many use cases, more user-friendly tools would be sufficient.

+

Getting started guide

+

User Guides

+ +

About

+ +

Legacy versions

+

Older versions of this app could be useful for development, however, they are not safe for use in production. They are available at following branches:

+ +

License

+

Polkadot-Vault is GPL 3.0 licensed.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/mark.min.js b/mark.min.js new file mode 100644 index 0000000000..1636231883 --- /dev/null +++ b/mark.min.js @@ -0,0 +1,7 @@ +/*!*************************************************** +* mark.js v8.11.1 +* https://markjs.io/ +* Copyright (c) 2014–2018, Julian Kühnel +* Released under the MIT license https://git.io/vwTVl +*****************************************************/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=i,this.iframesTimeout=o}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(function(t){var n=e.filter(function(e){return e.contains(t)}).length>0;-1!==e.indexOf(t)||n||e.push(t)}),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var i=e.contentWindow;if(r=i.document,!i||!r)throw new Error("iframe inaccessible")}catch(e){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,i=!1,o=null,a=function a(){if(!i){i=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",a),r.getIframeContents(e,t,n))}catch(e){n()}}};e.addEventListener("load",a),o=setTimeout(a,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(e){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,function(){return!0},function(e){r++,n.waitForIframes(e.querySelector("html"),function(){--r||t()})},function(e){e||t()})}},{key:"forEachIframe",value:function(t,n,r){var i=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=t.querySelectorAll("iframe"),s=a.length,c=0;a=Array.prototype.slice.call(a);var u=function(){--s<=0&&o(c)};s||u(),a.forEach(function(t){e.matches(t,i.exclude)?u():i.onIframeReady(t,function(e){n(t)&&(c++,r(e)),u()},u)})}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:null===t?e.nextNode():e.nextNode()&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var i=!1,o=!1;return r.forEach(function(e,t){e.val===n&&(i=t,o=e.handled)}),this.compareNodeIframe(e,t,n)?(!1!==i||o?!1===i||o||(r[i].handled=!0):r.push({val:n,handled:!0}),!0):(!1===i&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var i=this;e.forEach(function(e){e.handled||i.getIframeContents(e.val,function(e){i.createInstanceOnIframe(e).forEachNode(t,n,r)})})}},{key:"iterateThroughNodes",value:function(e,t,n,r,i){for(var o,a=this,s=this.createIterator(t,e,r),c=[],u=[],l=void 0,h=void 0;void 0,o=a.getIteratorNode(s),h=o.prevNode,l=o.node;)this.iframes&&this.forEachIframe(t,function(e){return a.checkIframeFilter(l,h,e,c)},function(t){a.createInstanceOnIframe(t).forEachNode(e,function(e){return u.push(e)},r)}),u.push(l);u.forEach(function(e){n(e)}),this.iframes&&this.handleOpenIframes(c,e,n,r),i()}},{key:"forEachNode",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),a=o.length;a||i(),o.forEach(function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,function(){--a<=0&&i()})};r.iframes?r.waitForIframes(o,s):s()})}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var i=!1;return n.every(function(t){return!r.call(e,t)||(i=!0,!1)}),i}return!1}}]),e}(),o=function(){function e(n){t(this,e),this.opt=r({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},n)}return n(e,[{key:"create",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,"gm"+(this.opt.caseSensitive?"":"i"))}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var i in t)if(t.hasOwnProperty(i)){var o=t[i],a="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(i):this.escapeStr(i),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==a&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(a)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynonyms(a)+"|"+this.processSynonyms(s)+")"+r))}return e}},{key:"processSynonyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,function(e){return"\\"===e.charAt(0)?"?":""})).replace(/(?:\\)*\*/g,function(e){return"\\"===e.charAt(0)?"*":""})}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"],r=[];return e.split("").forEach(function(i){n.every(function(n){if(-1!==n.indexOf(i)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0})}),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n=this.opt.accuracy,r="string"==typeof n?n:n.value,i="";switch(("string"==typeof n?[]:n.limiters).forEach(function(e){i+="|"+t.escapeStr(e)}),r){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿")))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach(function(e){t.opt.separateWordSearch?e.split(" ").forEach(function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)}):e.trim()&&-1===n.indexOf(e)&&n.push(e)}),{keywords:n.sort(function(e,t){return t.length-e.length}),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort(function(e,t){return e.start-t.start}).forEach(function(e){var i=t.callNoMatchOnInvalidRanges(e,r),o=i.start,a=i.end;i.valid&&(e.start=o,e.length=a-o,n.push(e),r=a)}),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,i=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:i}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,i=!0,o=n.length,a=t-o,s=parseInt(e.start,10)-a;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(i=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:i}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})},function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},function(){e({value:n,nodes:r})})}},{key:"matchesExclude",value:function(e){return i.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),o=i.splitText(n-t),a=document.createElement(r);return a.setAttribute("data-markjs","true"),this.opt.className&&a.setAttribute("class",this.opt.className),a.textContent=i.textContent,i.parentNode.replaceChild(a,i),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,i){var o=this;e.nodes.every(function(a,s){var c=e.nodes[s+1];if(void 0===c||c.start>t){if(!r(a.node))return!1;var u=t-a.start,l=(n>a.end?a.end:n)-a.start,h=e.value.substr(0,a.start),f=e.value.substr(l+a.start);if(a.node=o.wrapRangeInTextNode(a.node,u,l),e.value=h+f,e.nodes.forEach(function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=l),e.nodes[n].end-=l)}),n-=l,i(a.node.previousSibling,a.start),!(n>a.end))return!1;t=a.end}return!0})}},{key:"wrapGroups",value:function(e,t,n,r){return r((e=this.wrapRangeInTextNode(e,t,t+n)).previousSibling),e}},{key:"separateGroups",value:function(e,t,n,r,i){for(var o=t.length,a=1;a-1&&r(t[a],e)&&(e=this.wrapGroups(e,s,t[a].length,i))}return e}},{key:"wrapMatches",value:function(e,t,n,r,i){var o=this,a=0===t?0:t+1;this.getTextNodes(function(t){t.nodes.forEach(function(t){t=t.node;for(var i=void 0;null!==(i=e.exec(t.textContent))&&""!==i[a];){if(o.opt.separateGroups)t=o.separateGroups(t,i,a,n,r);else{if(!n(i[a],t))continue;var s=i.index;if(0!==a)for(var c=1;ce?1:t>=e?0:NaN},i=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return r(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)>0?i=a:r=a+1}return r}}};var a=i(r),o=a.right,s=a.left,c=o,u=function(t,e){null==e&&(e=l);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);nt?1:e>=t?0:NaN},d=function(t){return null===t?NaN:+t},p=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o1)return c/(a-1)},g=function(t,e){var n=p(t,e);return n?Math.sqrt(n):n},y=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o=n)for(r=i=n;++on&&(r=n),i=n)for(r=i=n;++on&&(r=n),i0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=0?(a>=w?10:a>=E?5:a>=T?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=w?10:a>=E?5:a>=T?2:1)}function S(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=w?i*=10:a>=E?i*=5:a>=T&&(i*=2),eh;)f.pop(),--d;var p,g=new Array(d+1);for(i=0;i<=d;++i)(p=g[i]=[]).x0=i>0?f[i-1]:l,p.x1=i=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},N=function(t,e,n){return t=b.call(t,d).sort(r),Math.ceil((n-e)/(2*(D(t,.75)-D(t,.25))*Math.pow(t.length,-1/3)))},B=function(t,e,n){return Math.ceil((n-e)/(3.5*g(t)*Math.pow(t.length,-1/3)))},L=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++ar&&(r=n)}else for(;++a=n)for(r=n;++ar&&(r=n);return r},F=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},j=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++an&&(r=n)}else for(;++a=n)for(r=n;++an&&(r=n);return r},R=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},Y=function(t,e){if(n=t.length){var n,i,a=0,o=0,s=t[o];for(null==e&&(e=r);++a=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ct(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var _t="http://www.w3.org/1999/xhtml",kt={svg:"http://www.w3.org/2000/svg",xhtml:_t,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},wt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),kt.hasOwnProperty(e)?{space:kt[e],local:t}:t};function Et(t){return function(){this.removeAttribute(t)}}function Tt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Ct(t,e){return function(){this.setAttribute(t,e)}}function At(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function St(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}var Ot=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Dt(t){return function(){this.style.removeProperty(t)}}function Nt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Bt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Lt(t,e){return t.style.getPropertyValue(e)||Ot(t).getComputedStyle(t,null).getPropertyValue(e)}function Ft(t){return function(){delete this[t]}}function Pt(t,e){return function(){this[t]=e}}function It(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function jt(t){return t.trim().split(/^|\s+/)}function Rt(t){return t.classList||new Yt(t)}function Yt(t){this._node=t,this._names=jt(t.getAttribute("class")||"")}function zt(t,e){for(var n=Rt(t),r=-1,i=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Vt(){this.textContent=""}function Gt(t){return function(){this.textContent=t}}function qt(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Xt(){this.innerHTML=""}function Zt(t){return function(){this.innerHTML=t}}function Jt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Kt(){this.nextSibling&&this.parentNode.appendChild(this)}function Qt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function te(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===_t&&e.documentElement.namespaceURI===_t?e.createElement(t):e.createElementNS(n,t)}}function ee(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}var ne=function(t){var e=wt(t);return(e.local?ee:te)(e)};function re(){return null}function ie(){var t=this.parentNode;t&&t.removeChild(this)}function ae(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function oe(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}var se={},ce=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(se={mouseenter:"mouseover",mouseleave:"mouseout"}));function ue(t,e,n){return t=le(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function le(t,e,n){return function(r){var i=ce;ce=r;try{t.call(this,this.__data__,e,n)}finally{ce=i}}}function he(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function fe(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=_&&(_=x+1);!(b=v[_])&&++_=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=xt);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?Dt:"function"==typeof e?Bt:Nt)(t,e,null==n?"":n)):Lt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Ft:"function"==typeof e?It:Pt)(t,e)):this.node()[t]},classed:function(t,e){var n=jt(t+"");if(arguments.length<2){for(var r=Rt(this.node()),i=-1,a=n.length;++i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?new qe(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?new qe(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Le.exec(t))?new qe(e[1],e[2],e[3],1):(e=Fe.exec(t))?new qe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Pe.exec(t))?He(e[1],e[2],e[3],e[4]):(e=Ie.exec(t))?He(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=je.exec(t))?Ke(e[1],e[2]/100,e[3]/100,1):(e=Re.exec(t))?Ke(e[1],e[2]/100,e[3]/100,e[4]):Ye.hasOwnProperty(t)?We(Ye[t]):"transparent"===t?new qe(NaN,NaN,NaN,0):null}function We(t){return new qe(t>>16&255,t>>8&255,255&t,1)}function He(t,e,n,r){return r<=0&&(t=e=n=NaN),new qe(t,e,n,r)}function Ve(t){return t instanceof Me||(t=$e(t)),t?new qe((t=t.rgb()).r,t.g,t.b,t.opacity):new qe}function Ge(t,e,n,r){return 1===arguments.length?Ve(t):new qe(t,e,n,null==r?1:r)}function qe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Xe(){return"#"+Je(this.r)+Je(this.g)+Je(this.b)}function Ze(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Je(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Ke(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new en(t,e,n,r)}function Qe(t){if(t instanceof en)return new en(t.h,t.s,t.l,t.opacity);if(t instanceof Me||(t=$e(t)),!t)return new en;if(t instanceof en)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new en(o,s,c,t.opacity)}function tn(t,e,n,r){return 1===arguments.length?Qe(t):new en(t,e,n,null==r?1:r)}function en(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function nn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function rn(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Ae(Me,$e,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:ze,formatHex:ze,formatHsl:function(){return Qe(this).formatHsl()},formatRgb:Ue,toString:Ue}),Ae(qe,Ge,Se(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Xe,formatHex:Xe,formatRgb:Ze,toString:Ze})),Ae(en,tn,Se(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new en(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new en(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new qe(nn(t>=240?t-240:t+120,i,r),nn(t,i,r),nn(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var an=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r180||n<-180?n-360*Math.round(n/360):n):sn(isNaN(t)?e:t)}function ln(t){return 1==(t=+t)?hn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):sn(isNaN(e)?n:e)}}function hn(t,e){var n=e-t;return n?cn(t,n):sn(isNaN(t)?e:t)}var fn=function t(e){var n=ln(e);function r(t,e){var r=n((t=Ge(t)).r,(e=Ge(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=hn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function dn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:_n(n,r)})),a=En.lastIndex;return a=0&&e._call.call(null,t),e=e._next;--Bn}function Vn(){In=(Pn=Rn.now())+jn,Bn=Ln=0;try{Hn()}finally{Bn=0,function(){var t,e,n=Tn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Tn=e);Cn=t,qn(r)}(),In=0}}function Gn(){var t=Rn.now(),e=t-Pn;e>1e3&&(jn-=e,Pn=t)}function qn(t){Bn||(Ln&&(Ln=clearTimeout(Ln)),t-In>24?(t<1/0&&(Ln=setTimeout(Vn,t-Rn.now()-jn)),Fn&&(Fn=clearInterval(Fn))):(Fn||(Pn=Rn.now(),Fn=setInterval(Gn,1e3)),Bn=1,Yn(Vn)))}$n.prototype=Wn.prototype={constructor:$n,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?zn():+n)+(null==e?0:+e),this._next||Cn===this||(Cn?Cn._next=this:Tn=this,Cn=this),this._call=t,this._time=n,qn()},stop:function(){this._call&&(this._call=null,this._time=1/0,qn())}};var Xn=function(t,e,n){var r=new $n;return e=null==e?0:+e,r.restart((function(n){r.stop(),t(n+e)}),e,n),r},Zn=lt("start","end","cancel","interrupt"),Jn=[],Kn=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Xn(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function tr(t,e){var n=er(t,e);if(n.state>3)throw new Error("too late; already running");return n}function er(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var nr,rr,ir,ar,or=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}},sr=180/Math.PI,cr={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},ur=function(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:_n(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:_n(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:_n(t,n)},{i:s-2,x:_n(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?Qn:tr;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Br=_e.prototype.constructor;function Lr(t){return function(){this.style.removeProperty(t)}}function Fr(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Pr(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Fr(t,a,n)),r}return a._value=e,a}function Ir(t){return function(e){this.textContent=t.call(this,e)}}function jr(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Ir(r)),e}return r._value=t,r}var Rr=0;function Yr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function zr(t){return _e().transition(t)}function Ur(){return++Rr}var $r=_e.prototype;function Wr(t){return t*t*t}function Hr(t){return--t*t*t+1}function Vr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}Yr.prototype=zr.prototype={constructor:Yr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=ft(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o1&&n.name===e)return new Yr([[t]],Xr,e,+r);return null},Jr=function(t){return function(){return t}},Kr=function(t,e,n){this.target=t,this.type=e,this.selection=n};function Qr(){ce.stopImmediatePropagation()}var ti=function(){ce.preventDefault(),ce.stopImmediatePropagation()},ei={name:"drag"},ni={name:"space"},ri={name:"handle"},ii={name:"center"};function ai(t){return[+t[0],+t[1]]}function oi(t){return[ai(t[0]),ai(t[1])]}function si(t){return function(e){return Dn(e,ce.touches,t)}}var ci={name:"x",handles:["w","e"].map(yi),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ui={name:"y",handles:["n","s"].map(yi),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},li={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(yi),input:function(t){return null==t?null:oi(t)},output:function(t){return t}},hi={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},fi={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},di={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},pi={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},gi={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function yi(t){return{type:t}}function vi(){return!ce.ctrlKey&&!ce.button}function mi(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function bi(){return navigator.maxTouchPoints||"ontouchstart"in this}function xi(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function _i(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function ki(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function wi(){return Ci(ci)}function Ei(){return Ci(ui)}var Ti=function(){return Ci(li)};function Ci(t){var e,n=mi,r=vi,i=bi,a=!0,o=lt("start","brush","end"),s=6;function c(e){var n=e.property("__brush",g).selectAll(".overlay").data([yi("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",hi.overlay).merge(n).each((function(){var t=xi(this).extent;ke(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([yi("selection")]).enter().append("rect").attr("class","selection").attr("cursor",hi.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return hi[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(i).on("touchstart.brush",f).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=ke(this),e=xi(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){return!n&&t.__brush.emitter||new h(t,e)}function h(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function f(){if((!e||ce.touches)&&r.apply(this,arguments)){var n,i,o,s,c,h,f,d,p,g,y,v=this,m=ce.target.__data__.type,b="selection"===(a&&ce.metaKey?m="overlay":m)?ei:a&&ce.altKey?ii:ri,x=t===ui?null:pi[m],_=t===ci?null:gi[m],k=xi(v),w=k.extent,E=k.selection,T=w[0][0],C=w[0][1],A=w[1][0],S=w[1][1],M=0,O=0,D=x&&_&&a&&ce.shiftKey,N=ce.touches?si(ce.changedTouches[0].identifier):Nn,B=N(v),L=B,F=l(v,arguments,!0).beforestart();"overlay"===m?(E&&(p=!0),k.selection=E=[[n=t===ui?T:B[0],o=t===ci?C:B[1]],[c=t===ui?A:n,f=t===ci?S:o]]):(n=E[0][0],o=E[0][1],c=E[1][0],f=E[1][1]),i=n,s=o,h=c,d=f;var P=ke(v).attr("pointer-events","none"),I=P.selectAll(".overlay").attr("cursor",hi[m]);if(ce.touches)F.moved=R,F.ended=z;else{var j=ke(ce.view).on("mousemove.brush",R,!0).on("mouseup.brush",z,!0);a&&j.on("keydown.brush",U,!0).on("keyup.brush",$,!0),Te(ce.view)}Qr(),or(v),u.call(v),F.start()}function R(){var t=N(v);!D||g||y||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?y=!0:g=!0),L=t,p=!0,ti(),Y()}function Y(){var t;switch(M=L[0]-B[0],O=L[1]-B[1],b){case ni:case ei:x&&(M=Math.max(T-n,Math.min(A-c,M)),i=n+M,h=c+M),_&&(O=Math.max(C-o,Math.min(S-f,O)),s=o+O,d=f+O);break;case ri:x<0?(M=Math.max(T-n,Math.min(A-n,M)),i=n+M,h=c):x>0&&(M=Math.max(T-c,Math.min(A-c,M)),i=n,h=c+M),_<0?(O=Math.max(C-o,Math.min(S-o,O)),s=o+O,d=f):_>0&&(O=Math.max(C-f,Math.min(S-f,O)),s=o,d=f+O);break;case ii:x&&(i=Math.max(T,Math.min(A,n-M*x)),h=Math.max(T,Math.min(A,c+M*x))),_&&(s=Math.max(C,Math.min(S,o-O*_)),d=Math.max(C,Math.min(S,f+O*_)))}h0&&(n=i-M),_<0?f=d-O:_>0&&(o=s-O),b=ni,I.attr("cursor",hi.selection),Y());break;default:return}ti()}function $(){switch(ce.keyCode){case 16:D&&(g=y=D=!1,Y());break;case 18:b===ii&&(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ri,Y());break;case 32:b===ni&&(ce.altKey?(x&&(c=h-M*x,n=i+M*x),_&&(f=d-O*_,o=s+O*_),b=ii):(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ri),I.attr("cursor",hi[m]),Y());break;default:return}ti()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function g(){var e=this.__brush||{selection:null};return e.extent=oi(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,r=e.__brush,i=l(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=Sn(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),u.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,r=arguments,i=e.__brush,a=t.input("function"==typeof n?n.apply(e,r):n,i.extent),o=l(e,r).beforestart();or(e),i.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){pe(new Kr(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:Jr(oi(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:Jr(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:Jr(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Ai=Math.cos,Si=Math.sin,Mi=Math.PI,Oi=Mi/2,Di=2*Mi,Ni=Math.max;function Bi(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}var Li=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,c,u,l,h=i.length,f=[],d=k(h),p=[],g=[],y=g.groups=new Array(h),v=new Array(h*h);for(a=0,u=-1;++u1e-6)if(Math.abs(l*s-c*u)>1e-6&&i){var f=n-a,d=r-o,p=s*s+c*c,g=f*f+d*d,y=Math.sqrt(p),v=Math.sqrt(h),m=i*Math.tan((Ii-Math.acos((p+h-g)/(2*y*v)))/2),b=m/v,x=m/y;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+x*s)+","+(this._y1=e+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%ji+ji),h>Ri?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Ii)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Ui=zi;function $i(t){return t.source}function Wi(t){return t.target}function Hi(t){return t.radius}function Vi(t){return t.startAngle}function Gi(t){return t.endAngle}var qi=function(){var t=$i,e=Wi,n=Hi,r=Vi,i=Gi,a=null;function o(){var o,s=Fi.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),h=r.apply(this,s)-Oi,f=i.apply(this,s)-Oi,d=l*Ai(h),p=l*Si(h),g=+n.apply(this,(s[0]=u,s)),y=r.apply(this,s)-Oi,v=i.apply(this,s)-Oi;if(a||(a=o=Ui()),a.moveTo(d,p),a.arc(0,0,l,h,f),h===y&&f===v||(a.quadraticCurveTo(0,0,g*Ai(y),g*Si(y)),a.arc(0,0,g,y,v)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Pi(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Pi(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Pi(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function Xi(){}function Zi(t,e){var n=new Xi;if(t instanceof Xi)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,h=-1,f=n.length,d=r[i++],p=Ji(),g=o();++hr.length)return n;var o,s=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each((function(e,n){o.push({key:n,values:t(e,a)})}))),null!=s?o.sort((function(t,e){return s(t.key,e.key)})):o}(a(t,0,ea,na),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function Qi(){return{}}function ta(t,e,n){t[e]=n}function ea(){return Ji()}function na(t,e,n){t.set(e,n)}function ra(){}var ia=Ji.prototype;function aa(t,e){var n=new ra;if(t instanceof ra)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r6/29*(6/29)*(6/29)?Math.pow(t,1/3):t/(6/29*3*(6/29))+4/29}function va(t){return t>6/29?t*t*t:6/29*3*(6/29)*(t-4/29)}function ma(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ba(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function xa(t){if(t instanceof wa)return new wa(t.h,t.c,t.l,t.opacity);if(t instanceof ga||(t=fa(t)),0===t.a&&0===t.b)return new wa(NaN,0r!=d>r&&n<(f-u)*(r-l)/(d-l)+u&&(i=-i)}return i}function Ia(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var ja=function(){},Ra=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],Ya=function(){var t=1,e=1,n=M,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(Ba);else{var r=y(t),i=r[0],o=r[1];e=S(i,o,e),e=k(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,u,l,h,f=new Array,d=new Array;a=s=-1,u=n[0]>=r,Ra[u<<1].forEach(p);for(;++a=r,Ra[c|u<<1].forEach(p);Ra[u<<0].forEach(p);for(;++s=r,l=n[s*t]>=r,Ra[u<<1|l<<2].forEach(p);++a=r,h=l,l=n[s*t+a+1]>=r,Ra[c|u<<1|l<<2|h<<3].forEach(p);Ra[u|l<<3].forEach(p)}a=-1,l=n[s*t]>=r,Ra[l<<2].forEach(p);for(;++a=r,Ra[l<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(r),l=o(c);(e=d[u])?(n=f[l])?(delete d[e.end],delete f[n.start],e===n?(e.ring.push(c),i(e.ring)):f[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=f[l])?(n=d[u])?(delete f[e.start],delete d[n.end],e===n?(e.ring.push(c),i(e.ring)):f[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete f[e.start],e.ring.unshift(r),f[e.start=u]=e):f[u]=d[l]={start:u,end:l,ring:[r,c]}}Ra[l<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n0&&o0&&s0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?La(Na.call(t)):La(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:ja,i):r===s},i};function za(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function Ua(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function $a(t){return t[0]}function Wa(t){return t[1]}function Ha(){return 1}var Va=function(){var t=$a,e=Wa,n=Ha,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,u=i+2*s>>o,l=La(20);function h(r){var i=new Float32Array(c*u),h=new Float32Array(c*u);r.forEach((function(r,a,l){var h=+t(r,a,l)+s>>o,f=+e(r,a,l)+s>>o,d=+n(r,a,l);h>=0&&h=0&&f>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),za({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),za({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=L(i);d=S(0,p,d),(d=k(0,Math.floor(p/d)*d,d)).shift()}return Ya().thresholds(d).size([c,u])(i).map(f)}function f(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(g)}function g(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function y(){return c=r+2*(s=3*a)>>o,u=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:La(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:La(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:La(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,y()},h.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),y()},h.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?La(Na.call(t)):La(t),h):l},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),y()},h},Ga=function(t){return function(){return t}};function qa(t,e,n,r,i,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function Xa(){return!ce.ctrlKey&&!ce.button}function Za(){return this.parentNode}function Ja(t){return null==t?{x:ce.x,y:ce.y}:t}function Ka(){return navigator.maxTouchPoints||"ontouchstart"in this}qa.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var Qa=function(){var t,e,n,r,i=Xa,a=Za,o=Ja,s=Ka,c={},u=lt("start","drag","end"),l=0,h=0;function f(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",y).on("touchmove.drag",v).on("touchend.drag touchcancel.drag",m).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var o=b("mouse",a.apply(this,arguments),Nn,this,arguments);o&&(ke(ce.view).on("mousemove.drag",p,!0).on("mouseup.drag",g,!0),Te(ce.view),we(),n=!1,t=ce.clientX,e=ce.clientY,o("start"))}}function p(){if(Ee(),!n){var r=ce.clientX-t,i=ce.clientY-e;n=r*r+i*i>h}c.mouse("drag")}function g(){ke(ce.view).on("mousemove.drag mouseup.drag",null),Ce(ce.view,n),Ee(),c.mouse("end")}function y(){if(i.apply(this,arguments)){var t,e,n=ce.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t9999?"+"+io(e,6):io(e,4))+"-"+io(t.getUTCMonth()+1,2)+"-"+io(t.getUTCDate(),2)+(a?"T"+io(n,2)+":"+io(r,2)+":"+io(i,2)+"."+io(a,3)+"Z":i?"T"+io(n,2)+":"+io(r,2)+":"+io(i,2)+"Z":r||n?"T"+io(n,2)+":"+io(r,2)+"Z":"")}var oo=function(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],a=t.length,o=0,s=0,c=a<=0,u=!1;function l(){if(c)return eo;if(u)return u=!1,to;var e,r,i=o;if(34===t.charCodeAt(i)){for(;o++=a?c=!0:10===(r=t.charCodeAt(o++))?u=!0:13===r&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o=(a=(g+v)/2))?g=a:v=a,(l=n>=(o=(y+m)/2))?y=o:m=o,i=d,!(d=d[h=l<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(g+v)/2))?g=a:v=a,(l=n>=(o=(y+m)/2))?y=o:m=o}while((h=l<<1|u)==(f=(c>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}var _s=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function ks(t){return t[0]}function ws(t){return t[1]}function Es(t,e,n){var r=new Ts(null==e?ks:e,null==n?ws:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Ts(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function Cs(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var As=Es.prototype=Ts.prototype;function Ss(t){return t.x+t.vx}function Ms(t){return t.y+t.vy}As.copy=function(){var t,e,n=new Ts(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=Cs(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=Cs(e));return n},As.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return xs(this.cover(e,n),e,n,t)},As.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,u=1/0,l=-1/0,h=-1/0;for(n=0;nl&&(l=r),ih&&(h=i));if(c>l||u>h)return this;for(this.cover(c,u).cover(l,h),n=0;nt||t>=i||r>e||e>=a;)switch(s=(ef||(a=c.y0)>d||(o=c.x1)=v)<<1|t>=y)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var m=t-+this._x.call(null,g.data),b=e-+this._y.call(null,g.data),x=m*m+b*b;if(x=(s=(p+y)/2))?p=s:y=s,(l=o>=(c=(g+v)/2))?g=c:v=c,e=d,!(d=d[h=l<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},As.removeAll=function(t){for(var e=0,n=t.length;ec+d||iu+d||as.index){var p=c-o.x-o.vx,g=u-o.y-o.vy,y=p*p+g*g;yt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,u=0,l=t.length;for(null==r?r=1/0:r*=r,u=0;u1?(u.on(t,n),e):u.on(t)}}},js=function(){var t,e,n,r,i=ms(-30),a=1,o=1/0,s=.81;function c(r){var i,a=t.length,o=Es(t,Ls,Fs).visitAfter(l);for(n=r,i=0;i=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=bs())*l),0===h&&(d+=(h=bs())*h),d1?r[0]+r.slice(2):r,+t.slice(n+1)]},$s=function(t){return(t=Us(Math.abs(t)))?t[1]:NaN},Ws=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Hs(t){if(!(e=Ws.exec(t)))throw new Error("invalid format: "+t);var e;return new Vs({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Vs(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}Hs.prototype=Vs.prototype,Vs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Gs,qs,Xs,Zs,Js=function(t,e){var n=Us(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Ks={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return Js(100*t,e)},r:Js,s:function(t,e){var n=Us(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Gs=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Us(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Qs=function(t){return t},tc=Array.prototype.map,ec=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],nc=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Qs:(e=tc.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Qs:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(tc.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Hs(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,g=t.comma,y=t.precision,v=t.trim,m=t.type;"n"===m?(g=!0,m="g"):Ks[m]||(void 0===y&&(y=12),v=!0,m="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",x="$"===f?a:/[%p]/.test(m)?c:"",_=Ks[m],k=/[defgprs%]/.test(m);function w(t){var i,a,c,f=b,w=x;if("c"===m)w=_(t)+w,t="";else{var E=(t=+t)<0;if(t=isNaN(t)?l:_(Math.abs(t),y),v&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0==+t&&(E=!1),f=(E?"("===h?h:u:"-"===h||"("===h?"":h)+f,w=("s"===m?ec[8+Gs/3]:"")+w+(E&&"("===h?")":""),k)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var T=f.length+t.length+w.length,C=T>1)+f+t+w+C.slice(T);break;default:t=C+f+t+w}return s(t)}return y=void 0===y?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=Hs(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor($s(e)/3))),i=Math.pow(10,-r),a=ec[8+r/3];return function(t){return n(i*t)+a}}}};function rc(t){return qs=nc(t),Xs=qs.format,Zs=qs.formatPrefix,qs}rc({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var ic=function(t){return Math.max(0,-$s(Math.abs(t)))},ac=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor($s(e)/3)))-$s(Math.abs(t)))},oc=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,$s(e)-$s(t))+1},sc=function(){return new cc};function cc(){this.reset()}cc.prototype={constructor:cc,reset:function(){this.s=this.t=0},add:function(t){lc(uc,t,this.t),lc(this,uc.s,this.s),this.s?this.t+=uc.t:this.s=uc.t},valueOf:function(){return this.s}};var uc=new cc;function lc(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var hc=Math.PI,fc=hc/2,dc=hc/4,pc=2*hc,gc=180/hc,yc=hc/180,vc=Math.abs,mc=Math.atan,bc=Math.atan2,xc=Math.cos,_c=Math.ceil,kc=Math.exp,wc=(Math.floor,Math.log),Ec=Math.pow,Tc=Math.sin,Cc=Math.sign||function(t){return t>0?1:t<0?-1:0},Ac=Math.sqrt,Sc=Math.tan;function Mc(t){return t>1?0:t<-1?hc:Math.acos(t)}function Oc(t){return t>1?fc:t<-1?-fc:Math.asin(t)}function Dc(t){return(t=Tc(t/2))*t}function Nc(){}function Bc(t,e){t&&Fc.hasOwnProperty(t.type)&&Fc[t.type](t,e)}var Lc={Feature:function(t,e){Bc(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,a=xc(e=(e*=yc)/2+dc),o=Tc(e),s=Uc*o,c=zc*a+s*xc(i),u=s*r*Tc(i);Wc.add(bc(u,c)),Yc=t,zc=a,Uc=o}var Jc=function(t){return Hc.reset(),$c(t,Vc),2*Hc};function Kc(t){return[bc(t[1],t[0]),Oc(t[2])]}function Qc(t){var e=t[0],n=t[1],r=xc(n);return[r*xc(e),r*Tc(e),Tc(n)]}function tu(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function eu(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function nu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function ru(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function iu(t){var e=Ac(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var au,ou,su,cu,uu,lu,hu,fu,du,pu,gu=sc(),yu={point:vu,lineStart:bu,lineEnd:xu,polygonStart:function(){yu.point=_u,yu.lineStart=ku,yu.lineEnd=wu,gu.reset(),Vc.polygonStart()},polygonEnd:function(){Vc.polygonEnd(),yu.point=vu,yu.lineStart=bu,yu.lineEnd=xu,Wc<0?(au=-(su=180),ou=-(cu=90)):gu>1e-6?cu=90:gu<-1e-6&&(ou=-90),pu[0]=au,pu[1]=su},sphere:function(){au=-(su=180),ou=-(cu=90)}};function vu(t,e){du.push(pu=[au=t,su=t]),ecu&&(cu=e)}function mu(t,e){var n=Qc([t*yc,e*yc]);if(fu){var r=eu(fu,n),i=eu([r[1],-r[0],0],r);iu(i),i=Kc(i);var a,o=t-uu,s=o>0?1:-1,c=i[0]*gc*s,u=vc(o)>180;u^(s*uucu&&(cu=a):u^(s*uu<(c=(c+360)%360-180)&&ccu&&(cu=e)),u?tEu(au,su)&&(su=t):Eu(t,su)>Eu(au,su)&&(au=t):su>=au?(tsu&&(su=t)):t>uu?Eu(au,t)>Eu(au,su)&&(su=t):Eu(t,su)>Eu(au,su)&&(au=t)}else du.push(pu=[au=t,su=t]);ecu&&(cu=e),fu=n,uu=t}function bu(){yu.point=mu}function xu(){pu[0]=au,pu[1]=su,yu.point=vu,fu=null}function _u(t,e){if(fu){var n=t-uu;gu.add(vc(n)>180?n+(n>0?360:-360):n)}else lu=t,hu=e;Vc.point(t,e),mu(t,e)}function ku(){Vc.lineStart()}function wu(){_u(lu,hu),Vc.lineEnd(),vc(gu)>1e-6&&(au=-(su=180)),pu[0]=au,pu[1]=su,fu=null}function Eu(t,e){return(e-=t)<0?e+360:e}function Tu(t,e){return t[0]-e[0]}function Cu(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:eEu(r[0],r[1])&&(r[1]=i[1]),Eu(i[0],r[1])>Eu(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=Eu(r[1],i[0]))>o&&(o=s,au=i[0],su=r[1])}return du=pu=null,au===1/0||ou===1/0?[[NaN,NaN],[NaN,NaN]]:[[au,ou],[su,cu]]},Wu={sphere:Nc,point:Hu,lineStart:Gu,lineEnd:Zu,polygonStart:function(){Wu.lineStart=Ju,Wu.lineEnd=Ku},polygonEnd:function(){Wu.lineStart=Gu,Wu.lineEnd=Zu}};function Hu(t,e){t*=yc;var n=xc(e*=yc);Vu(n*xc(t),n*Tc(t),Tc(e))}function Vu(t,e,n){++Au,Mu+=(t-Mu)/Au,Ou+=(e-Ou)/Au,Du+=(n-Du)/Au}function Gu(){Wu.point=qu}function qu(t,e){t*=yc;var n=xc(e*=yc);Yu=n*xc(t),zu=n*Tc(t),Uu=Tc(e),Wu.point=Xu,Vu(Yu,zu,Uu)}function Xu(t,e){t*=yc;var n=xc(e*=yc),r=n*xc(t),i=n*Tc(t),a=Tc(e),o=bc(Ac((o=zu*a-Uu*i)*o+(o=Uu*r-Yu*a)*o+(o=Yu*i-zu*r)*o),Yu*r+zu*i+Uu*a);Su+=o,Nu+=o*(Yu+(Yu=r)),Bu+=o*(zu+(zu=i)),Lu+=o*(Uu+(Uu=a)),Vu(Yu,zu,Uu)}function Zu(){Wu.point=Hu}function Ju(){Wu.point=Qu}function Ku(){tl(ju,Ru),Wu.point=Hu}function Qu(t,e){ju=t,Ru=e,t*=yc,e*=yc,Wu.point=tl;var n=xc(e);Yu=n*xc(t),zu=n*Tc(t),Uu=Tc(e),Vu(Yu,zu,Uu)}function tl(t,e){t*=yc;var n=xc(e*=yc),r=n*xc(t),i=n*Tc(t),a=Tc(e),o=zu*a-Uu*i,s=Uu*r-Yu*a,c=Yu*i-zu*r,u=Ac(o*o+s*s+c*c),l=Oc(u),h=u&&-l/u;Fu+=h*o,Pu+=h*s,Iu+=h*c,Su+=l,Nu+=l*(Yu+(Yu=r)),Bu+=l*(zu+(zu=i)),Lu+=l*(Uu+(Uu=a)),Vu(Yu,zu,Uu)}var el=function(t){Au=Su=Mu=Ou=Du=Nu=Bu=Lu=Fu=Pu=Iu=0,$c(t,Wu);var e=Fu,n=Pu,r=Iu,i=e*e+n*n+r*r;return i<1e-12&&(e=Nu,n=Bu,r=Lu,Su<1e-6&&(e=Mu,n=Ou,r=Du),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[bc(n,e)*gc,Oc(r/Ac(i))*gc]},nl=function(t){return function(){return t}},rl=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function il(t,e){return[vc(t)>hc?t+Math.round(-t/pc)*pc:t,e]}function al(t,e,n){return(t%=pc)?e||n?rl(sl(t),cl(e,n)):sl(t):e||n?cl(e,n):il}function ol(t){return function(e,n){return[(e+=t)>hc?e-pc:e<-hc?e+pc:e,n]}}function sl(t){var e=ol(t);return e.invert=ol(-t),e}function cl(t,e){var n=xc(t),r=Tc(t),i=xc(e),a=Tc(e);function o(t,e){var o=xc(e),s=xc(t)*o,c=Tc(t)*o,u=Tc(e),l=u*n+s*r;return[bc(c*i-l*a,s*n-u*r),Oc(l*i+c*a)]}return o.invert=function(t,e){var o=xc(e),s=xc(t)*o,c=Tc(t)*o,u=Tc(e),l=u*i-c*a;return[bc(c*i+u*a,s*n+l*r),Oc(l*n-s*r)]},o}il.invert=il;var ul=function(t){function e(e){return(e=t(e[0]*yc,e[1]*yc))[0]*=gc,e[1]*=gc,e}return t=al(t[0]*yc,t[1]*yc,t.length>2?t[2]*yc:0),e.invert=function(e){return(e=t.invert(e[0]*yc,e[1]*yc))[0]*=gc,e[1]*=gc,e},e};function ll(t,e,n,r,i,a){if(n){var o=xc(e),s=Tc(e),c=r*n;null==i?(i=e+r*pc,a=e-c/2):(i=hl(o,i),a=hl(o,a),(r>0?ia)&&(i+=r*pc));for(var u,l=i;r>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},pl=function(t,e){return vc(t[0]-e[0])<1e-6&&vc(t[1]-e[1])<1e-6};function gl(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var yl=function(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(pl(r,o)){for(i.lineStart(),a=0;a=0;--a)i.point((l=u[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function vl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,T=E*w,C=T>hc,A=g*_;if(ml.add(bc(A*E*Tc(T),y*k+A*xc(T))),o+=C?w+E*pc:w,C^d>=n^b>=n){var S=eu(Qc(f),Qc(m));iu(S);var M=eu(a,S);iu(M);var O=(C^w>=0?-1:1)*Oc(M[2]);(r>O||r===O&&(S[0]||S[1]))&&(s+=C^w>=0?1:-1)}}return(o<-1e-6||o<1e-6&&ml<-1e-6)^1&s},_l=function(t,e,n,r){return function(i){var a,o,s,c=e(i),u=dl(),l=e(u),h=!1,f={point:d,lineStart:g,lineEnd:y,polygonStart:function(){f.point=v,f.lineStart=m,f.lineEnd=b,o=[],a=[]},polygonEnd:function(){f.point=d,f.lineStart=g,f.lineEnd=y,o=I(o);var t=xl(a,r);o.length?(h||(i.polygonStart(),h=!0),yl(o,wl,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function g(){f.point=p,c.lineStart()}function y(){f.point=d,c.lineEnd()}function v(t,e){s.push([t,e]),l.point(t,e)}function m(){l.lineStart(),s=[]}function b(){v(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,c=l.clean(),f=u.result(),d=f.length;if(s.pop(),a.push(s),s=null,d)if(1&c){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t1&&2&c&&f.push(f.pop().concat(f.shift())),o.push(f.filter(kl))}return f}};function kl(t){return t.length>1}function wl(t,e){return((t=t.x)[0]<0?t[1]-fc-1e-6:fc-t[1])-((e=e.x)[0]<0?e[1]-fc-1e-6:fc-e[1])}var El=_l((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?hc:-hc,c=vc(a-n);vc(c-hc)<1e-6?(t.point(n,r=(r+o)/2>0?fc:-fc),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=hc&&(vc(n-i)<1e-6&&(n-=1e-6*i),vc(a-s)<1e-6&&(a-=1e-6*s),r=function(t,e,n,r){var i,a,o=Tc(t-n);return vc(o)>1e-6?mc((Tc(e)*(a=xc(r))*Tc(n)-Tc(r)*(i=xc(e))*Tc(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*fc,r.point(-hc,i),r.point(0,i),r.point(hc,i),r.point(hc,0),r.point(hc,-i),r.point(0,-i),r.point(-hc,-i),r.point(-hc,0),r.point(-hc,i);else if(vc(t[0]-e[0])>1e-6){var a=t[0]0,i=vc(e)>1e-6;function a(t,n){return xc(t)*xc(n)>e}function o(t,n,r){var i=[1,0,0],a=eu(Qc(t),Qc(n)),o=tu(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var u=e*o/c,l=-e*s/c,h=eu(i,a),f=ru(i,u);nu(f,ru(a,l));var d=h,p=tu(f,d),g=tu(d,d),y=p*p-g*(tu(f,f)-1);if(!(y<0)){var v=Ac(y),m=ru(d,(-p-v)/g);if(nu(m,f),m=Kc(m),!r)return m;var b,x=t[0],_=n[0],k=t[1],w=n[1];_0^m[1]<(vc(m[0]-x)<1e-6?k:w):k<=m[1]&&m[1]<=w:E>hc^(x<=m[0]&&m[0]<=_)){var C=ru(d,(-p+v)/g);return nu(C,f),[m,Kc(C)]}}}function s(e,n){var i=r?t:hc-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return _l(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(h,f){var d,p=[h,f],g=a(h,f),y=r?g?0:s(h,f):g?s(h+(h<0?hc:-hc),f):0;if(!e&&(u=c=g)&&t.lineStart(),g!==c&&(!(d=o(e,p))||pl(e,d)||pl(p,d))&&(p[0]+=1e-6,p[1]+=1e-6,g=a(p[0],p[1])),g!==c)l=0,g?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1]),t.lineEnd()),e=d;else if(i&&e&&r^g){var v;y&n||!(v=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!g||e&&pl(e,p)||t.point(p[0],p[1]),e=p,c=g,n=y},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,r,i,a){ll(a,t,n,i,e,r)}),r?[0,-t]:[-hc,t-hc])};function Cl(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,u){var l=0,h=0;if(null==i||(l=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==h);else u.point(a[0],a[1])}function o(r,i){return vc(r[0]-t)<1e-6?i>0?0:3:vc(r[0]-n)<1e-6?i>0?2:1:vc(r[1]-e)<1e-6?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,h,f,d,p,g,y,v,m,b=o,x=dl(),_={point:k,lineStart:function(){_.point=w,u&&u.push(l=[]);v=!0,y=!1,p=g=NaN},lineEnd:function(){c&&(w(h,f),d&&y&&x.rejoin(),c.push(x.result()));_.point=k,y&&b.lineEnd()},polygonStart:function(){b=x,c=[],u=[],m=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=u.length;nr&&(f-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(f-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=m&&e,i=(c=I(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&yl(c,s,e,a,o),o.polygonEnd());b=o,c=u=l=null}};function k(t,e){i(t,e)&&b.point(t,e)}function w(a,o){var s=i(a,o);if(u&&l.push([a,o]),v)h=a,f=o,d=s,v=!1,s&&(b.lineStart(),b.point(a,o));else if(s&&y)b.point(a,o);else{var c=[p=Math.max(-1e9,Math.min(1e9,p)),g=Math.max(-1e9,Math.min(1e9,g))],x=[a=Math.max(-1e9,Math.min(1e9,a)),o=Math.max(-1e9,Math.min(1e9,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],u=0,l=1,h=e[0]-s,f=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o0)){if(o/=f,f<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=a-c,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o0&&(t[0]=s+u*h,t[1]=c+u*f),l<1&&(e[0]=s+l*h,e[1]=c+l*f),!0}}}}}(c,x,t,e,n,r)?s&&(b.lineStart(),b.point(a,o),m=!1):(y||(b.lineStart(),b.point(c[0],c[1])),b.point(x[0],x[1]),s||b.lineEnd(),m=!1)}p=a,g=o,y=s}return _}}var Al,Sl,Ml,Ol=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=Cl(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}},Dl=sc(),Nl={sphere:Nc,point:Nc,lineStart:function(){Nl.point=Ll,Nl.lineEnd=Bl},lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc};function Bl(){Nl.point=Nl.lineEnd=Nc}function Ll(t,e){Al=t*=yc,Sl=Tc(e*=yc),Ml=xc(e),Nl.point=Fl}function Fl(t,e){t*=yc;var n=Tc(e*=yc),r=xc(e),i=vc(t-Al),a=xc(i),o=r*Tc(i),s=Ml*n-Sl*r*a,c=Sl*n+Ml*r*a;Dl.add(bc(Ac(o*o+s*s),c)),Al=t,Sl=n,Ml=r}var Pl=function(t){return Dl.reset(),$c(t,Nl),+Dl},Il=[null,null],jl={type:"LineString",coordinates:Il},Rl=function(t,e){return Il[0]=t,Il[1]=e,Pl(jl)},Yl={Feature:function(t,e){return Ul(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r0&&(i=Rl(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<1e-12*i)return!0;n=r}return!1}function Hl(t,e){return!!xl(t.map(Vl),Gl(e))}function Vl(t){return(t=t.map(Gl)).pop(),t}function Gl(t){return[t[0]*yc,t[1]*yc]}var ql=function(t,e){return(t&&Yl.hasOwnProperty(t.type)?Yl[t.type]:Ul)(t,e)};function Xl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Zl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function Jl(){var t,e,n,r,i,a,o,s,c,u,l,h,f=10,d=f,p=90,g=360,y=2.5;function v(){return{type:"MultiLineString",coordinates:m()}}function m(){return k(_c(r/p)*p,n,p).map(l).concat(k(_c(s/g)*g,o,g).map(h)).concat(k(_c(e/f)*f,t,f).filter((function(t){return vc(t%p)>1e-6})).map(c)).concat(k(_c(a/d)*d,i,d).filter((function(t){return vc(t%g)>1e-6})).map(u))}return v.lines=function(){return m().map((function(t){return{type:"LineString",coordinates:t}}))},v.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(h(o).slice(1),l(n).reverse().slice(1),h(s).reverse().slice(1))]}},v.extent=function(t){return arguments.length?v.extentMajor(t).extentMinor(t):v.extentMinor()},v.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),v.precision(y)):[[r,s],[n,o]]},v.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),v.precision(y)):[[e,a],[t,i]]},v.step=function(t){return arguments.length?v.stepMajor(t).stepMinor(t):v.stepMinor()},v.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],v):[p,g]},v.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],v):[f,d]},v.precision=function(f){return arguments.length?(y=+f,c=Xl(a,i,90),u=Zl(e,t,y),l=Xl(s,o,90),h=Zl(r,n,y),v):y},v.extentMajor([[-180,1e-6-90],[180,90-1e-6]]).extentMinor([[-180,-80-1e-6],[180,80+1e-6]])}function Kl(){return Jl()()}var Ql,th,eh,nh,rh=function(t,e){var n=t[0]*yc,r=t[1]*yc,i=e[0]*yc,a=e[1]*yc,o=xc(r),s=Tc(r),c=xc(a),u=Tc(a),l=o*xc(n),h=o*Tc(n),f=c*xc(i),d=c*Tc(i),p=2*Oc(Ac(Dc(a-r)+o*c*Dc(i-n))),g=Tc(p),y=p?function(t){var e=Tc(t*=p)/g,n=Tc(p-t)/g,r=n*l+e*f,i=n*h+e*d,a=n*s+e*u;return[bc(i,r)*gc,bc(a,Ac(r*r+i*i))*gc]}:function(){return[n*gc,r*gc]};return y.distance=p,y},ih=function(t){return t},ah=sc(),oh=sc(),sh={point:Nc,lineStart:Nc,lineEnd:Nc,polygonStart:function(){sh.lineStart=ch,sh.lineEnd=hh},polygonEnd:function(){sh.lineStart=sh.lineEnd=sh.point=Nc,ah.add(vc(oh)),oh.reset()},result:function(){var t=ah/2;return ah.reset(),t}};function ch(){sh.point=uh}function uh(t,e){sh.point=lh,Ql=eh=t,th=nh=e}function lh(t,e){oh.add(nh*t-eh*e),eh=t,nh=e}function hh(){lh(Ql,th)}var fh=sh,dh=1/0,ph=dh,gh=-dh,yh=gh;var vh,mh,bh,xh,_h={point:function(t,e){tgh&&(gh=t);eyh&&(yh=e)},lineStart:Nc,lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc,result:function(){var t=[[dh,ph],[gh,yh]];return gh=yh=-(ph=dh=1/0),t}},kh=0,wh=0,Eh=0,Th=0,Ch=0,Ah=0,Sh=0,Mh=0,Oh=0,Dh={point:Nh,lineStart:Bh,lineEnd:Ph,polygonStart:function(){Dh.lineStart=Ih,Dh.lineEnd=jh},polygonEnd:function(){Dh.point=Nh,Dh.lineStart=Bh,Dh.lineEnd=Ph},result:function(){var t=Oh?[Sh/Oh,Mh/Oh]:Ah?[Th/Ah,Ch/Ah]:Eh?[kh/Eh,wh/Eh]:[NaN,NaN];return kh=wh=Eh=Th=Ch=Ah=Sh=Mh=Oh=0,t}};function Nh(t,e){kh+=t,wh+=e,++Eh}function Bh(){Dh.point=Lh}function Lh(t,e){Dh.point=Fh,Nh(bh=t,xh=e)}function Fh(t,e){var n=t-bh,r=e-xh,i=Ac(n*n+r*r);Th+=i*(bh+t)/2,Ch+=i*(xh+e)/2,Ah+=i,Nh(bh=t,xh=e)}function Ph(){Dh.point=Nh}function Ih(){Dh.point=Rh}function jh(){Yh(vh,mh)}function Rh(t,e){Dh.point=Yh,Nh(vh=bh=t,mh=xh=e)}function Yh(t,e){var n=t-bh,r=e-xh,i=Ac(n*n+r*r);Th+=i*(bh+t)/2,Ch+=i*(xh+e)/2,Ah+=i,Sh+=(i=xh*t-bh*e)*(bh+t),Mh+=i*(xh+e),Oh+=3*i,Nh(bh=t,xh=e)}var zh=Dh;function Uh(t){this._context=t}Uh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,pc)}},result:Nc};var $h,Wh,Hh,Vh,Gh,qh=sc(),Xh={point:Nc,lineStart:function(){Xh.point=Zh},lineEnd:function(){$h&&Jh(Wh,Hh),Xh.point=Nc},polygonStart:function(){$h=!0},polygonEnd:function(){$h=null},result:function(){var t=+qh;return qh.reset(),t}};function Zh(t,e){Xh.point=Jh,Wh=Vh=t,Hh=Gh=e}function Jh(t,e){Vh-=t,Gh-=e,qh.add(Ac(Vh*Vh+Gh*Gh)),Vh=t,Gh=e}var Kh=Xh;function Qh(){this._string=[]}function tf(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}Qh.prototype={_radius:4.5,_circle:tf(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=tf(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var ef=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),$c(t,n(r))),r.result()}return a.area=function(t){return $c(t,n(fh)),fh.result()},a.measure=function(t){return $c(t,n(Kh)),Kh.result()},a.bounds=function(t){return $c(t,n(_h)),_h.result()},a.centroid=function(t){return $c(t,n(zh)),zh.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,ih):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new Qh):new Uh(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},nf=function(t){return{stream:rf(t)}};function rf(t){return function(e){var n=new af;for(var r in t)n[r]=t[r];return n.stream=e,n}}function af(){}function of(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),$c(n,t.stream(_h)),e(_h.result()),null!=r&&t.clipExtent(r),t}function sf(t,e,n){return of(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function cf(t,e,n){return sf(t,[[0,0],e],n)}function uf(t,e,n){return of(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function lf(t,e,n){return of(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}af.prototype={constructor:af,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var hf=xc(30*yc),ff=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,u,l,h,f,d,p,g,y){var v=u-r,m=l-i,b=v*v+m*m;if(b>4*e&&g--){var x=o+f,_=s+d,k=c+p,w=Ac(x*x+_*_+k*k),E=Oc(k/=w),T=vc(vc(k)-1)<1e-6||vc(a-h)<1e-6?(a+h)/2:bc(_,x),C=t(T,E),A=C[0],S=C[1],M=A-r,O=S-i,D=m*M-v*O;(D*D/b>e||vc((v*M+m*O)/b-.5)>.3||o*f+s*d+c*p2?t[2]%360*yc:0,A()):[y*gc,v*gc,m*gc]},T.angle=function(t){return arguments.length?(b=t%360*yc,A()):b*gc},T.precision=function(t){return arguments.length?(o=ff(s,E=t*t),S()):Ac(E)},T.fitExtent=function(t,e){return sf(T,t,e)},T.fitSize=function(t,e){return cf(T,t,e)},T.fitWidth=function(t,e){return uf(T,t,e)},T.fitHeight=function(t,e){return lf(T,t,e)},function(){return e=t.apply(this,arguments),T.invert=e.invert&&C,A()}}function mf(t){var e=0,n=hc/3,r=vf(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*yc,n=t[1]*yc):[e*gc,n*gc]},i}function bf(t,e){var n=Tc(t),r=(n+Tc(e))/2;if(vc(r)<1e-6)return function(t){var e=xc(t);function n(t,n){return[t*e,Tc(n)/e]}return n.invert=function(t,n){return[t/e,Oc(n*e)]},n}(t);var i=1+n*(2*r-n),a=Ac(i)/r;function o(t,e){var n=Ac(i-2*r*Tc(e))/r;return[n*Tc(t*=r),a-n*xc(t)]}return o.invert=function(t,e){var n=a-e;return[bc(t,vc(n))/r*Cc(n),Oc((i-(t*t+n*n)*r*r)/(2*r))]},o}var xf=function(){return mf(bf).scale(155.424).center([0,33.6442])},_f=function(){return xf().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])};var kf=function(){var t,e,n,r,i,a,o=_f(),s=xf().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=xf().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function l(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,l}return l.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n0?e<1e-6-fc&&(e=1e-6-fc):e>fc-1e-6&&(e=fc-1e-6);var n=i/Ec(Nf(e),r);return[n*Tc(r*t),i-n*xc(r*t)]}return a.invert=function(t,e){var n=i-e,a=Cc(r)*Ac(t*t+n*n);return[bc(t,vc(n))/r*Cc(n),2*mc(Ec(i/a,1/r))-fc]},a}var Lf=function(){return mf(Bf).scale(109.5).parallels([30,30])};function Ff(t,e){return[t,e]}Ff.invert=Ff;var Pf=function(){return yf(Ff).scale(152.63)};function If(t,e){var n=xc(t),r=t===e?Tc(t):(n-xc(e))/(e-t),i=n/r+t;if(vc(r)<1e-6)return Ff;function a(t,e){var n=i-e,a=r*t;return[n*Tc(a),i-n*xc(a)]}return a.invert=function(t,e){var n=i-e;return[bc(t,vc(n))/r*Cc(n),i-Cc(r)*Ac(t*t+n*n)]},a}var jf=function(){return mf(If).scale(131.154).center([0,13.9389])},Rf=1.340264,Yf=-.081106,zf=893e-6,Uf=.003796,$f=Ac(3)/2;function Wf(t,e){var n=Oc($f*Tc(e)),r=n*n,i=r*r*r;return[t*xc(n)/($f*(Rf+3*Yf*r+i*(7*zf+9*Uf*r))),n*(Rf+Yf*r+i*(zf+Uf*r))]}Wf.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(Rf+Yf*i+a*(zf+Uf*i))-e)/(Rf+3*Yf*i+a*(7*zf+9*Uf*i)))*r)*i*i,!(vc(n)<1e-12));++o);return[$f*t*(Rf+3*Yf*i+a*(7*zf+9*Uf*i))/xc(r),Oc(Tc(r)/$f)]};var Hf=function(){return yf(Wf).scale(177.158)};function Vf(t,e){var n=xc(e),r=xc(t)*n;return[n*Tc(t)/r,Tc(e)/r]}Vf.invert=Ef(mc);var Gf=function(){return yf(Vf).scale(144.049).clipAngle(60)};function qf(t,e,n,r){return 1===t&&1===e&&0===n&&0===r?ih:rf({point:function(i,a){this.stream.point(i*t+n,a*e+r)}})}var Xf=function(){var t,e,n,r,i,a,o=1,s=0,c=0,u=1,l=1,h=ih,f=null,d=ih;function p(){return r=i=null,a}return a={stream:function(t){return r&&i===t?r:r=h(d(i=t))},postclip:function(r){return arguments.length?(d=r,f=t=e=n=null,p()):d},clipExtent:function(r){return arguments.length?(d=null==r?(f=t=e=n=null,ih):Cl(f=+r[0][0],t=+r[0][1],e=+r[1][0],n=+r[1][1]),p()):null==f?null:[[f,t],[e,n]]},scale:function(t){return arguments.length?(h=qf((o=+t)*u,o*l,s,c),p()):o},translate:function(t){return arguments.length?(h=qf(o*u,o*l,s=+t[0],c=+t[1]),p()):[s,c]},reflectX:function(t){return arguments.length?(h=qf(o*(u=t?-1:1),o*l,s,c),p()):u<0},reflectY:function(t){return arguments.length?(h=qf(o*u,o*(l=t?-1:1),s,c),p()):l<0},fitExtent:function(t,e){return sf(a,t,e)},fitSize:function(t,e){return cf(a,t,e)},fitWidth:function(t,e){return uf(a,t,e)},fitHeight:function(t,e){return lf(a,t,e)}}};function Zf(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Zf.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(vc(n)>1e-6&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Jf=function(){return yf(Zf).scale(175.295)};function Kf(t,e){return[xc(e)*Tc(t),Tc(e)]}Kf.invert=Ef(Oc);var Qf=function(){return yf(Kf).scale(249.5).clipAngle(90+1e-6)};function td(t,e){var n=xc(e),r=1+xc(t)*n;return[n*Tc(t)/r,Tc(e)/r]}td.invert=Ef((function(t){return 2*mc(t)}));var ed=function(){return yf(td).scale(250).clipAngle(142)};function nd(t,e){return[wc(Sc((fc+e)/2)),-t]}nd.invert=function(t,e){return[-e,2*mc(kc(t))-fc]};var rd=function(){var t=Df(nd),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function id(t,e){return t.parent===e.parent?1:2}function ad(t,e){return t+e.x}function od(t,e){return Math.max(t,e.y)}var sd=function(){var t=id,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(ad,0)/t.length}(n),e.y=function(t){return 1+t.reduce(od,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function cd(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function ud(t,e){var n,r,i,a,o,s=new dd(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=ld);n=u.pop();)if(c&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(r=n.children[a]=new dd(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(fd)}function ld(t){return t.children}function hd(t){t.data=t.data.data}function fd(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function dd(t){this.data=t,this.depth=this.height=0,this.parent=null}dd.prototype=ud.prototype={constructor:dd,count:function(){return this.eachAfter(cd)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return ud(this).eachBefore(hd)}};var pd=Array.prototype.slice;var gd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(pd.call(t))).length,a=[];r0&&n*n>r*r+i*i}function bd(t,e){for(var n=0;n(o*=o)?(r=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function Ed(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function Td(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function Cd(t){this._=t,this.next=null,this.previous=null}function Ad(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,c,u,l,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;wd(n,e,r=t[2]),e=new Cd(e),n=new Cd(n),r=new Cd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Od(e),n):t},n.parentId=function(t){return arguments.length?(e=Od(t),n):e},n};function Vd(t,e){return t.parent===e.parent?1:2}function Gd(t){var e=t.children;return e?e[0]:t.t}function qd(t){var e=t.children;return e?e[e.length-1]:t.t}function Xd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Zd(t,e,n){return t.a.parent===e.parent?t.a:n}function Jd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Jd.prototype=Object.create(dd.prototype);var Kd=function(){var t=Vd,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new Jd(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new Jd(r[i],i)),n.parent=e;return(o.parent=new Jd(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var u=i,l=i,h=i;i.eachBefore((function(t){t.xl.x&&(l=t),t.depth>h.depth&&(h=t)}));var f=u===l?1:t(u,l)/2,d=f-u.x,p=e/(l.x+f+d),g=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,h=s.m,f=c.m;s=qd(s),a=Gd(a),s&&a;)c=Gd(c),(o=qd(o)).a=e,(i=s.z+h-a.z-u+t(s._,a._))>0&&(Xd(Zd(s,e,r),e,i),u+=i,l+=i),h+=s.m,u+=a.m,f+=c.m,l+=o.m;s&&!qd(o)&&(o.t=s,o.m+=h-l),a&&!Gd(c)&&(c.t=a,c.m+=u-f,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},Qd=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(i-n)/t.value;++sf&&(f=s),y=l*l*g,(d=Math.max(f/y,y/h))>p){l-=s;break}p=d}v.push(o={value:l,dice:c1?e:1)},n}(tp),rp=function(){var t=np,e=!1,n=1,r=1,i=[0],a=Dd,o=Dd,s=Dd,c=Dd,u=Dd;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(jd),t}function h(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,h=e.x1-n,f=e.y1-n;h=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=c)}var h=u[e],f=r/2+h,d=e+1,p=n-1;for(;d>>1;u[g]c-a){var m=(i*v+o*y)/r;t(e,d,y,i,a,m,c),t(d,n,v,m,a,o,c)}else{var b=(a*v+c*y)/r;t(e,d,y,i,a,o,b),t(d,n,v,i,b,o,c)}}(0,c,t.value,e,n,r,i)},ap=function(t,e,n,r,i){(1&t.depth?Qd:Rd)(t,e,n,r,i)},op=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,h=-1,f=o.length,d=t.value;++h1?e:1)},n}(tp),sp=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},cp=function(t,e){var n=un(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},up=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},lp=Math.SQRT2;function hp(t){return((t=Math.exp(t))+1/t)/2}var fp=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-i,h=c-a,f=l*l+h*h;if(f<1e-12)r=Math.log(u/o)/lp,n=function(t){return[i+t*l,a+t*h,o*Math.exp(lp*t*r)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),g=(u*u-o*o-4*f)/(2*u*2*d),y=Math.log(Math.sqrt(p*p+1)-p),v=Math.log(Math.sqrt(g*g+1)-g);r=(v-y)/lp,n=function(t){var e,n=t*r,s=hp(y),c=o/(2*d)*(s*(e=lp*n+y,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(y));return[i+c*l,a+c*h,o*s/hp(lp*n+y)]}}return n.duration=1e3*r,n};function dp(t){return function(e,n){var r=t((e=tn(e)).h,(n=tn(n)).h),i=hn(e.s,n.s),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var pp=dp(un),gp=dp(hn);function yp(t,e){var n=hn((t=pa(t)).l,(e=pa(e)).l),r=hn(t.a,e.a),i=hn(t.b,e.b),a=hn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function vp(t){return function(e,n){var r=t((e=ka(e)).h,(n=ka(n)).h),i=hn(e.c,n.c),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var mp=vp(un),bp=vp(hn);function xp(t){return function e(n){function r(e,r){var i=t((e=Oa(e)).h,(r=Oa(r)).h),a=hn(e.s,r.s),o=hn(e.l,r.l),s=hn(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}var _p=xp(un),kp=xp(hn);function wp(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n1&&(e=t[a[o-2]],n=t[a[o-1]],r=t[s],(n[0]-e[0])*(r[1]-e[1])-(n[1]-e[1])*(r[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}var Mp=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e=0;--e)u.push(t[r[a[e]][2]]);for(e=+s;es!=u>s&&o<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},Dp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(Np),Fp=function t(e){function n(){var t=Lp.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Np),Pp=function t(e){function n(t){return function(){for(var n=0,r=0;rr&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function tg(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i2?eg:tg,i=a=null,h}function h(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),_n)))(n)))},h.domain=function(t){return arguments.length?(o=Up.call(t,Xp),u===Jp||(u=Qp(o)),l()):o.slice()},h.range=function(t){return arguments.length?(s=$p.call(t),l()):s.slice()},h.rangeRound=function(t){return s=$p.call(t),c=up,l()},h.clamp=function(t){return arguments.length?(u=t?Qp(o):Jp,h):u!==Jp},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}function ig(t,e){return rg()(t,e)}var ag=function(t,e,n,r){var i,a=S(t,e,n);switch((r=Hs(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=ac(a,o))||(r.precision=i),Zs(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=oc(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=ic(a))||(r.precision=i-2*("%"===r.type))}return Xs(r)};function og(t){var e=t.domain;return t.ticks=function(t){var n=e();return C(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ag(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],c=i[o];return c0?r=A(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=A(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(c/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(c*r)/r,e(i)),t},t}function sg(){var t=ig(Jp,Jp);return t.copy=function(){return ng(t,sg())},Rp.apply(t,arguments),og(t)}function cg(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Up.call(e,Xp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return cg(t).unknown(e)},t=arguments.length?Up.call(t,Xp):[0,1],og(n)}var ug=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o0){for(;fc)break;g.push(h)}}else for(;f=1;--l)if(!((h=u*l)c)break;g.push(h)}}else g=C(f,d,Math.min(d-f,p)).map(n);return r?g.reverse():g},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Xs(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a0?i[r-1]:e[0],r=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return Mg().domain([e,n]).range(a).unknown(t)},Rp.apply(og(o),arguments)}function Og(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[c(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=$p.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=$p.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Og().domain(e).range(n).unknown(t)},Rp.apply(i,arguments)}var Dg=new Date,Ng=new Date;function Bg(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return Dg.setTime(+e),Ng.setTime(+r),t(Dg),t(Ng),Math.floor(n(Dg,Ng))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Lg=Bg((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Lg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Bg((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Fg=Lg,Pg=Lg.range,Ig=Bg((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),jg=Ig,Rg=Ig.range;function Yg(t){return Bg((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var zg=Yg(0),Ug=Yg(1),$g=Yg(2),Wg=Yg(3),Hg=Yg(4),Vg=Yg(5),Gg=Yg(6),qg=zg.range,Xg=Ug.range,Zg=$g.range,Jg=Wg.range,Kg=Hg.range,Qg=Vg.range,ty=Gg.range,ey=Bg((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),ny=ey,ry=ey.range,iy=Bg((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),ay=iy,oy=iy.range,sy=Bg((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),cy=sy,uy=sy.range,ly=Bg((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),hy=ly,fy=ly.range,dy=Bg((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));dy.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Bg((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):dy:null};var py=dy,gy=dy.range;function yy(t){return Bg((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var vy=yy(0),my=yy(1),by=yy(2),xy=yy(3),_y=yy(4),ky=yy(5),wy=yy(6),Ey=vy.range,Ty=my.range,Cy=by.range,Ay=xy.range,Sy=_y.range,My=ky.range,Oy=wy.range,Dy=Bg((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),Ny=Dy,By=Dy.range,Ly=Bg((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Ly.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Bg((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var Fy=Ly,Py=Ly.range;function Iy(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function jy(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Ry(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function Yy(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Ky(i),l=Qy(i),h=Ky(a),f=Qy(a),d=Ky(o),p=Qy(o),g=Ky(s),y=Qy(s),v=Ky(c),m=Qy(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:xv,e:xv,f:Tv,H:_v,I:kv,j:wv,L:Ev,m:Cv,M:Av,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:em,s:nm,S:Sv,u:Mv,U:Ov,V:Dv,w:Nv,W:Bv,x:null,X:null,y:Lv,Y:Fv,Z:Pv,"%":tm},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Iv,e:Iv,f:Uv,H:jv,I:Rv,j:Yv,L:zv,m:$v,M:Wv,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:em,s:nm,S:Hv,u:Vv,U:Gv,V:qv,w:Xv,W:Zv,x:null,X:null,y:Jv,Y:Kv,Z:Qv,"%":tm},_={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=v.exec(e.slice(n));return r?(t.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=y[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:lv,e:lv,f:yv,H:fv,I:fv,j:hv,L:gv,m:uv,M:dv,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},q:cv,Q:mv,s:bv,S:pv,u:ev,U:nv,V:rv,w:tv,W:iv,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:ov,Y:av,Z:sv,"%":vv};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=jy(Ry(a.y,0,1))).getUTCDay(),r=i>4||0===i?my.ceil(r):my(r),r=Ny.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Iy(Ry(a.y,0,1))).getDay(),r=i>4||0===i?Ug.ceil(r):Ug(r),r=ny.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?jy(Ry(a.y,0,1)).getUTCDay():Iy(Ry(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,jy(a)):Iy(a)}}function E(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=_[i in Vy?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return(b.x=k(n,b),b.X=k(r,b),b.c=k(e,b),x.x=k(n,x),x.X=k(r,x),x.c=k(e,x),{format:function(t){var e=k(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}})}var zy,Uy,$y,Wy,Hy,Vy={"-":"",_:" ",0:"0"},Gy=/^\s*\d+/,qy=/^%/,Xy=/[\\^$*+?|[\]().{}]/g;function Zy(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function sv(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function cv(t,e,n){var r=Gy.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function uv(t,e,n){var r=Gy.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function lv(t,e,n){var r=Gy.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function hv(t,e,n){var r=Gy.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function fv(t,e,n){var r=Gy.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function dv(t,e,n){var r=Gy.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function pv(t,e,n){var r=Gy.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function gv(t,e,n){var r=Gy.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function yv(t,e,n){var r=Gy.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function vv(t,e,n){var r=qy.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function mv(t,e,n){var r=Gy.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function bv(t,e,n){var r=Gy.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function xv(t,e){return Zy(t.getDate(),e,2)}function _v(t,e){return Zy(t.getHours(),e,2)}function kv(t,e){return Zy(t.getHours()%12||12,e,2)}function wv(t,e){return Zy(1+ny.count(Fg(t),t),e,3)}function Ev(t,e){return Zy(t.getMilliseconds(),e,3)}function Tv(t,e){return Ev(t,e)+"000"}function Cv(t,e){return Zy(t.getMonth()+1,e,2)}function Av(t,e){return Zy(t.getMinutes(),e,2)}function Sv(t,e){return Zy(t.getSeconds(),e,2)}function Mv(t){var e=t.getDay();return 0===e?7:e}function Ov(t,e){return Zy(zg.count(Fg(t)-1,t),e,2)}function Dv(t,e){var n=t.getDay();return t=n>=4||0===n?Hg(t):Hg.ceil(t),Zy(Hg.count(Fg(t),t)+(4===Fg(t).getDay()),e,2)}function Nv(t){return t.getDay()}function Bv(t,e){return Zy(Ug.count(Fg(t)-1,t),e,2)}function Lv(t,e){return Zy(t.getFullYear()%100,e,2)}function Fv(t,e){return Zy(t.getFullYear()%1e4,e,4)}function Pv(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Zy(e/60|0,"0",2)+Zy(e%60,"0",2)}function Iv(t,e){return Zy(t.getUTCDate(),e,2)}function jv(t,e){return Zy(t.getUTCHours(),e,2)}function Rv(t,e){return Zy(t.getUTCHours()%12||12,e,2)}function Yv(t,e){return Zy(1+Ny.count(Fy(t),t),e,3)}function zv(t,e){return Zy(t.getUTCMilliseconds(),e,3)}function Uv(t,e){return zv(t,e)+"000"}function $v(t,e){return Zy(t.getUTCMonth()+1,e,2)}function Wv(t,e){return Zy(t.getUTCMinutes(),e,2)}function Hv(t,e){return Zy(t.getUTCSeconds(),e,2)}function Vv(t){var e=t.getUTCDay();return 0===e?7:e}function Gv(t,e){return Zy(vy.count(Fy(t)-1,t),e,2)}function qv(t,e){var n=t.getUTCDay();return t=n>=4||0===n?_y(t):_y.ceil(t),Zy(_y.count(Fy(t),t)+(4===Fy(t).getUTCDay()),e,2)}function Xv(t){return t.getUTCDay()}function Zv(t,e){return Zy(my.count(Fy(t)-1,t),e,2)}function Jv(t,e){return Zy(t.getUTCFullYear()%100,e,2)}function Kv(t,e){return Zy(t.getUTCFullYear()%1e4,e,4)}function Qv(){return"+0000"}function tm(){return"%"}function em(t){return+t}function nm(t){return Math.floor(+t/1e3)}function rm(t){return zy=Yy(t),Uy=zy.format,$y=zy.parse,Wy=zy.utcFormat,Hy=zy.utcParse,zy}rm({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function im(t){return new Date(t)}function am(t){return t instanceof Date?+t:+new Date(+t)}function om(t,e,n,r,a,o,s,c,u){var l=ig(Jp,Jp),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),g=u("%I:%M"),y=u("%I %p"),v=u("%a %d"),m=u("%b %d"),b=u("%B"),x=u("%Y"),_=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[a,1,36e5],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function k(i){return(s(i)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return qb.h=360*t-100,qb.s=1.5-1.5*e,qb.l=.8-.9*e,qb+""},Zb=Ge(),Jb=Math.PI/3,Kb=2*Math.PI/3,Qb=function(t){var e;return t=(.5-t)*Math.PI,Zb.r=255*(e=Math.sin(t))*e,Zb.g=255*(e=Math.sin(t+Jb))*e,Zb.b=255*(e=Math.sin(t+Kb))*e,Zb+""},tx=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"};function ex(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var nx=ex(Nm("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),rx=ex(Nm("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),ix=ex(Nm("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),ax=ex(Nm("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),ox=function(t){return ke(ne(t).call(document.documentElement))},sx=0;function cx(){return new ux}function ux(){this._="@"+(++sx).toString(36)}ux.prototype=cx.prototype={constructor:ux,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var lx=function(t){return"string"==typeof t?new be([document.querySelectorAll(t)],[document.documentElement]):new be([null==t?[]:t],me)},hx=function(t,e){null==e&&(e=Mn().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n1?0:t<-1?xx:Math.acos(t)}function Ex(t){return t>=1?_x:t<=-1?-_x:Math.asin(t)}function Tx(t){return t.innerRadius}function Cx(t){return t.outerRadius}function Ax(t){return t.startAngle}function Sx(t){return t.endAngle}function Mx(t){return t&&t.padAngle}function Ox(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*f<1e-12))return[t+(f=(l*(e-a)-h*(t-i))/f)*c,e+f*u]}function Dx(t,e,n,r,i,a,o){var s=t-n,c=e-r,u=(o?a:-a)/bx(s*s+c*c),l=u*c,h=-u*s,f=t+l,d=e+h,p=n+l,g=r+h,y=(f+p)/2,v=(d+g)/2,m=p-f,b=g-d,x=m*m+b*b,_=i-a,k=f*g-p*d,w=(b<0?-1:1)*bx(yx(0,_*_*x-k*k)),E=(k*b-m*w)/x,T=(-k*m-b*w)/x,C=(k*b+m*w)/x,A=(-k*m+b*w)/x,S=E-y,M=T-v,O=C-y,D=A-v;return S*S+M*M>O*O+D*D&&(E=C,T=A),{cx:E,cy:T,x01:-l,y01:-h,x11:E*(i/_-1),y11:T*(i/_-1)}}var Nx=function(){var t=Tx,e=Cx,n=fx(0),r=null,i=Ax,a=Sx,o=Mx,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-_x,d=a.apply(this,arguments)-_x,p=dx(d-f),g=d>f;if(s||(s=c=Ui()),h1e-12)if(p>kx-1e-12)s.moveTo(h*gx(f),h*mx(f)),s.arc(0,0,h,f,d,!g),l>1e-12&&(s.moveTo(l*gx(d),l*mx(d)),s.arc(0,0,l,d,f,g));else{var y,v,m=f,b=d,x=f,_=d,k=p,w=p,E=o.apply(this,arguments)/2,T=E>1e-12&&(r?+r.apply(this,arguments):bx(l*l+h*h)),C=vx(dx(h-l)/2,+n.apply(this,arguments)),A=C,S=C;if(T>1e-12){var M=Ex(T/l*mx(E)),O=Ex(T/h*mx(E));(k-=2*M)>1e-12?(x+=M*=g?1:-1,_-=M):(k=0,x=_=(f+d)/2),(w-=2*O)>1e-12?(m+=O*=g?1:-1,b-=O):(w=0,m=b=(f+d)/2)}var D=h*gx(m),N=h*mx(m),B=l*gx(_),L=l*mx(_);if(C>1e-12){var F,P=h*gx(b),I=h*mx(b),j=l*gx(x),R=l*mx(x);if(p1e-12?S>1e-12?(y=Dx(j,R,D,N,h,S,g),v=Dx(P,I,B,L,h,S,g),s.moveTo(y.cx+y.x01,y.cy+y.y01),S1e-12&&k>1e-12?A>1e-12?(y=Dx(B,L,P,I,l,-A,g),v=Dx(D,N,j,R,l,-A,g),s.lineTo(y.cx+y.x01,y.cy+y.y01),A=l;--h)s.point(y[h],v[h]);s.lineEnd(),s.areaEnd()}g&&(y[u]=+t(f,u,c),v[u]=+n(f,u,c),s.point(e?+e(f,u,c):y[u],r?+r(f,u,c):v[u]))}if(d)return s=null,d+""||null}function u(){return Ix().defined(i).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:fx(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:fx(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:fx(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:fx(+t),r=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:fx(+t),c):n},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:fx(+t),c):r},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(r)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:fx(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c},Rx=function(t,e){return et?1:e>=t?0:NaN},Yx=function(t){return t},zx=function(){var t=Yx,e=Rx,n=null,r=fx(0),i=fx(kx),a=fx(0);function o(o){var s,c,u,l,h,f=o.length,d=0,p=new Array(f),g=new Array(f),y=+r.apply(this,arguments),v=Math.min(kx,Math.max(-kx,i.apply(this,arguments)-y)),m=Math.min(Math.abs(v)/f,a.apply(this,arguments)),b=m*(v<0?-1:1);for(s=0;s0&&(d+=h);for(null!=e?p.sort((function(t,n){return e(g[t],g[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(v-f*b)/d:0;s0?h*u:0)+b,g[c]={data:o[c],index:s,value:h,startAngle:y,endAngle:l,padAngle:m};return g}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:fx(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:fx(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:fx(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:fx(+t),o):a},o},Ux=Wx(Lx);function $x(t){this._curve=t}function Wx(t){function e(e){return new $x(t(e))}return e._curve=t,e}function Hx(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(Wx(t)):e()._curve},t}$x.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var Vx=function(){return Hx(Ix().curve(Ux))},Gx=function(){var t=jx().curve(Ux),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Hx(n())},delete t.lineX0,t.lineEndAngle=function(){return Hx(r())},delete t.lineX1,t.lineInnerRadius=function(){return Hx(i())},delete t.lineY0,t.lineOuterRadius=function(){return Hx(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(Wx(t)):e()._curve},t},qx=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},Xx=Array.prototype.slice;function Zx(t){return t.source}function Jx(t){return t.target}function Kx(t){var e=Zx,n=Jx,r=Fx,i=Px,a=null;function o(){var o,s=Xx.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=Ui()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=u,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:fx(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:fx(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function Qx(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function t_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function e_(t,e,n,r,i){var a=qx(e,n),o=qx(e,n=(n+i)/2),s=qx(r,n),c=qx(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function n_(){return Kx(Qx)}function r_(){return Kx(t_)}function i_(){var t=Kx(e_);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var a_={draw:function(t,e){var n=Math.sqrt(e/xx);t.moveTo(n,0),t.arc(0,0,n,0,kx)}},o_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},s_=Math.sqrt(1/3),c_=2*s_,u_={draw:function(t,e){var n=Math.sqrt(e/c_),r=n*s_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},l_=Math.sin(xx/10)/Math.sin(7*xx/10),h_=Math.sin(kx/10)*l_,f_=-Math.cos(kx/10)*l_,d_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=h_*n,i=f_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=kx*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},p_={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},g_=Math.sqrt(3),y_={draw:function(t,e){var n=-Math.sqrt(e/(3*g_));t.moveTo(0,2*n),t.lineTo(-g_*n,-n),t.lineTo(g_*n,-n),t.closePath()}},v_=Math.sqrt(3)/2,m_=1/Math.sqrt(12),b_=3*(m_/2+1),x_={draw:function(t,e){var n=Math.sqrt(e/b_),r=n/2,i=n*m_,a=r,o=n*m_+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(-.5*r-v_*i,v_*r+-.5*i),t.lineTo(-.5*a-v_*o,v_*a+-.5*o),t.lineTo(-.5*s-v_*c,v_*s+-.5*c),t.lineTo(-.5*r+v_*i,-.5*i-v_*r),t.lineTo(-.5*a+v_*o,-.5*o-v_*a),t.lineTo(-.5*s+v_*c,-.5*c-v_*s),t.closePath()}},__=[a_,o_,u_,p_,d_,y_,x_],k_=function(){var t=fx(a_),e=fx(64),n=null;function r(){var r;if(n||(n=r=Ui()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:fx(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:fx(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},w_=function(){};function E_(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function T_(t){this._context=t}T_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:E_(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:E_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var C_=function(t){return new T_(t)};function A_(t){this._context=t}A_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:E_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var S_=function(t){return new A_(t)};function M_(t){this._context=t}M_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:E_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var O_=function(t){return new M_(t)};function D_(t,e){this._basis=new T_(t),this._beta=e}D_.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var N_=function t(e){function n(t){return 1===e?new T_(t):new D_(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function B_(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function L_(t,e){this._context=t,this._k=(1-e)/6}L_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:B_(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:B_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var F_=function t(e){function n(t){return new L_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function P_(t,e){this._context=t,this._k=(1-e)/6}P_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:B_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var I_=function t(e){function n(t){return new P_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function j_(t,e){this._context=t,this._k=(1-e)/6}j_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:B_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var R_=function t(e){function n(t){return new j_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Y_(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>1e-12){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>1e-12){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function z_(t,e){this._context=t,this._alpha=e}z_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Y_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var U_=function t(e){function n(t){return e?new z_(t,e):new L_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function $_(t,e){this._context=t,this._alpha=e}$_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Y_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var W_=function t(e){function n(t){return e?new $_(t,e):new P_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function H_(t,e){this._context=t,this._alpha=e}H_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Y_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var V_=function t(e){function n(t){return e?new H_(t,e):new j_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function G_(t){this._context=t}G_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var q_=function(t){return new G_(t)};function X_(t){return t<0?-1:1}function Z_(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(X_(a)+X_(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function J_(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function K_(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function Q_(t){this._context=t}function tk(t){this._context=new ek(t)}function ek(t){this._context=t}function nk(t){return new Q_(t)}function rk(t){return new tk(t)}function ik(t){this._context=t}function ak(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var ck=function(t){return new sk(t,.5)};function uk(t){return new sk(t,0)}function lk(t){return new sk(t,1)}var hk=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a=0;)n[e]=e;return n};function dk(t,e){return t[e]}var pk=function(){var t=fx([]),e=fk,n=hk,r=dk;function i(i){var a,o,s=t.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(a=0;a0){for(var n,r,i,a=0,o=t[0].length;a0)for(var n,r,i,a,o,s,c=0,u=t[e[0]].length;c0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},vk=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;oa&&(a=e,r=n);return r}var _k=function(t){var e=t.map(kk);return fk(t).sort((function(t,n){return e[t]-e[n]}))};function kk(t){for(var e,n=0,r=-1,i=t.length;++r0)){if(a/=f,f<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>l&&(l=a)}else if(d>0){if(a0||h<1)||(l>0&&(t[0]=[c+l*f,u+l*d]),h<1&&(t[1]=[c+h*f,u+h*d]),!0)}}}}}function Uk(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,h=u[0],f=u[1],d=l[0],p=l[1],g=(h+d)/2,y=(f+p)/2;if(p===f){if(g=r)return;if(h>d){if(c){if(c[1]>=i)return}else c=[g,n];a=[g,i]}else{if(c){if(c[1]1)if(h>d){if(c){if(c[1]>=i)return}else c=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(c){if(c[1]=r)return}else c=[e,o*e+s];a=[r,o*r+s]}else{if(c){if(c[0]=-lw)){var d=c*c+u*u,p=l*l+h*h,g=(h*d-u*p)/f,y=(c*p-l*d)/f,v=Gk.pop()||new qk;v.arc=t,v.site=i,v.x=g+o,v.y=(v.cy=y+s)+Math.sqrt(g*g+y*y),t.circle=v;for(var m=null,b=sw._;b;)if(v.yuw)s=s.L;else{if(!((i=a-iw(s,o))>uw)){r>-uw?(e=s.P,n=s):i>-uw?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){ow[t.index]={site:t,halfedges:[]}}(t);var c=Qk(t);if(aw.insert(e,c),e||n){if(e===n)return Zk(e),n=Qk(e.site),aw.insert(c,n),c.edge=n.edge=jk(e.site,c.site),Xk(e),void Xk(n);if(n){Zk(e),Zk(n);var u=e.site,l=u[0],h=u[1],f=t[0]-l,d=t[1]-h,p=n.site,g=p[0]-l,y=p[1]-h,v=2*(f*y-d*g),m=f*f+d*d,b=g*g+y*y,x=[(y*m-d*b)/v+l,(f*b-g*m)/v+h];Yk(n.edge,u,p,x),c.edge=jk(u,t,null,x),n.edge=jk(t,p,null,x),Xk(e),Xk(n)}else c.edge=jk(e.site,c.site)}}function rw(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-r,h=1/a-1/u,f=l/u;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*u)-c+u/2+i-a/2)))/h+r:(r+s)/2}function iw(t,e){var n=t.N;if(n)return rw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var aw,ow,sw,cw,uw=1e-6,lw=1e-12;function hw(t,e){return e[1]-t[1]||e[0]-t[0]}function fw(t,e){var n,r,i,a=t.sort(hw).pop();for(cw=[],ow=new Array(t.length),aw=new Ik,sw=new Ik;;)if(i=Vk,a&&(!i||a[1]uw||Math.abs(i[0][1]-i[1][1])>uw)||delete cw[a]}(o,s,c,u),function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,g,y=ow.length,v=!0;for(i=0;iuw||Math.abs(g-f)>uw)&&(c.splice(s,0,cw.push(Rk(o,d,Math.abs(p-t)uw?[t,Math.abs(h-t)uw?[Math.abs(f-r)uw?[n,Math.abs(h-n)uw?[Math.abs(f-e)=s)return null;var c=t-i.site[0],u=e-i.site[1],l=c*c+u*u;do{i=a.cells[r=o],o=null,i.halfedges.forEach((function(n){var r=a.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=t-s[0],u=e-s[1],h=c*c+u*u;hr?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var Aw=function(){var t,e,n=_w,r=kw,i=Cw,a=Ew,o=Tw,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=fp,h=lt("start","zoom","end"),f=0;function d(t){t.property("__zoom",ww).on("wheel.zoom",x).on("mousedown.zoom",_).on("dblclick.zoom",k).filter(o).on("touchstart.zoom",w).on("touchmove.zoom",E).on("touchend.zoom touchcancel.zoom",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new yw(e,t.x,t.y)}function g(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new yw(t.k,r,i)}function y(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function v(t,e,n){t.on("start.zoom",(function(){m(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){m(this,arguments).end()})).tween("zoom",(function(){var t=this,i=arguments,a=m(t,i),o=r.apply(t,i),s=null==n?y(o):"function"==typeof n?n.apply(t,i):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,h="function"==typeof e?e.apply(t,i):e,f=l(u.invert(s).concat(c/u.k),h.invert(s).concat(c/h.k));return function(t){if(1===t)t=h;else{var e=f(t),n=c/e[2];t=new yw(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function m(t,e,n){return!n&&t.__zooming||new b(t,e)}function b(t,e){this.that=t,this.args=e,this.active=0,this.extent=r.apply(t,e),this.taps=0}function x(){if(n.apply(this,arguments)){var t=m(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Nn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[o,e.invert(o)],or(this),t.start()}xw(),t.wheel=setTimeout(u,150),t.zoom("mouse",i(g(p(e,r),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function _(){if(!e&&n.apply(this,arguments)){var t=m(this,arguments,!0),r=ke(ce.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Nn(this),o=ce.clientX,s=ce.clientY;Te(ce.view),bw(),t.mouse=[a,this.__zoom.invert(a)],or(this),t.start()}function u(){if(xw(),!t.moved){var e=ce.clientX-o,n=ce.clientY-s;t.moved=e*e+n*n>f}t.zoom("mouse",i(g(t.that.__zoom,t.mouse[0]=Nn(t.that),t.mouse[1]),t.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),Ce(ce.view,t.moved),xw(),t.end()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=Nn(this),a=t.invert(e),o=t.k*(ce.shiftKey?.5:2),s=i(g(p(t,o),e,a),r.apply(this,arguments),c);xw(),u>0?ke(this).transition().duration(u).call(v,s,e):ke(this).call(d.transform,s)}}function w(){if(n.apply(this,arguments)){var e,r,i,a,o=ce.touches,s=o.length,c=m(this,arguments,ce.changedTouches.length===s);for(bw(),r=0;rh&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),56;case 1:return this.begin("type_directive"),57;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),59;case 4:return 58;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return e.yytext=e.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 46;case 44:return 47;case 45:return 5;case 46:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],inclusive:!0}}};function O(){this.yy={}}return S.lexer=M,O.prototype=S,S.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){var r=n(198);t.exports={Graph:r.Graph,json:n(301),alg:n(302),version:r.version}},function(t,e,n){var r;try{r={cloneDeep:n(313),constant:n(86),defaults:n(154),each:n(87),filter:n(128),find:n(314),flatten:n(156),forEach:n(126),forIn:n(319),has:n(93),isUndefined:n(139),last:n(320),map:n(140),mapValues:n(321),max:n(322),merge:n(324),min:n(329),minBy:n(330),now:n(331),pick:n(161),range:n(162),reduce:n(142),sortBy:n(338),uniqueId:n(163),values:n(147),zipObject:n(343)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){ +/** + * @license + * Copyright (c) 2012-2013 Chris Pettitt + * + * 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. + */ +t.exports={graphlib:n(311),dagre:n(153),intersect:n(368),render:n(370),util:n(12),version:n(382)}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";var r=n(4),i=n(17).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=u*o/s,r=u):(o<0&&(c=-c),n=c,r=c*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(173),i=n(174),a=n(175),o={channel:r.default,lang:i.default,unit:a.default};e.default=o},function(t,e,n){var r;try{r={clone:n(199),constant:n(86),each:n(87),filter:n(128),has:n(93),isArray:n(5),isEmpty:n(276),isFunction:n(37),isUndefined:n(139),keys:n(30),map:n(140),reduce:n(142),size:n(279),transform:n(285),union:n(286),values:n(147)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(43);t.exports={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))},applyTransition:function(t,e){var n=e.graph();if(r.isPlainObject(n)){var i=n.transition;if(r.isFunction(i))return i(t)}return t}};var i=/:/g;function a(t){return t?String(t).replace(i,"\\:"):""}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,7],n=[1,6],r=[1,14],i=[1,25],a=[1,28],o=[1,26],s=[1,27],c=[1,29],u=[1,30],l=[1,31],h=[1,32],f=[1,34],d=[1,35],p=[1,36],g=[10,19],y=[1,48],v=[1,49],m=[1,50],b=[1,51],x=[1,52],_=[1,53],k=[10,19,25,32,33,41,44,45,46,47,48,49,54,56],w=[10,19,23,25,32,33,37,41,44,45,46,47,48,49,54,56,71,72,73],E=[10,13,17,19],T=[41,71,72,73],C=[41,48,49,71,72,73],A=[41,44,45,46,47,71,72,73],S=[10,19,25],M=[1,85],O={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,graphConfig:6,openDirective:7,typeDirective:8,closeDirective:9,NEWLINE:10,":":11,argDirective:12,open_directive:13,type_directive:14,arg_directive:15,close_directive:16,CLASS_DIAGRAM:17,statements:18,EOF:19,statement:20,className:21,alphaNumToken:22,GENERICTYPE:23,relationStatement:24,LABEL:25,classStatement:26,methodStatement:27,annotationStatement:28,clickStatement:29,cssClassStatement:30,CLASS:31,STYLE_SEPARATOR:32,STRUCT_START:33,members:34,STRUCT_STOP:35,ANNOTATION_START:36,ANNOTATION_END:37,MEMBER:38,SEPARATOR:39,relation:40,STR:41,relationType:42,lineType:43,AGGREGATION:44,EXTENSION:45,COMPOSITION:46,DEPENDENCY:47,LINE:48,DOTTED_LINE:49,CALLBACK:50,LINK:51,LINK_TARGET:52,CLICK:53,CALLBACK_NAME:54,CALLBACK_ARGS:55,HREF:56,CSSCLASS:57,commentToken:58,textToken:59,graphCodeTokens:60,textNoTagsToken:61,TAGSTART:62,TAGEND:63,"==":64,"--":65,PCT:66,DEFAULT:67,SPACE:68,MINUS:69,keywords:70,UNICODE_TEXT:71,NUM:72,ALPHA:73,$accept:0,$end:1},terminals_:{2:"error",10:"NEWLINE",11:":",13:"open_directive",14:"type_directive",15:"arg_directive",16:"close_directive",17:"CLASS_DIAGRAM",19:"EOF",23:"GENERICTYPE",25:"LABEL",31:"CLASS",32:"STYLE_SEPARATOR",33:"STRUCT_START",35:"STRUCT_STOP",36:"ANNOTATION_START",37:"ANNOTATION_END",38:"MEMBER",39:"SEPARATOR",41:"STR",44:"AGGREGATION",45:"EXTENSION",46:"COMPOSITION",47:"DEPENDENCY",48:"LINE",49:"DOTTED_LINE",50:"CALLBACK",51:"LINK",52:"LINK_TARGET",53:"CLICK",54:"CALLBACK_NAME",55:"CALLBACK_ARGS",56:"HREF",57:"CSSCLASS",60:"graphCodeTokens",62:"TAGSTART",63:"TAGEND",64:"==",65:"--",66:"PCT",67:"DEFAULT",68:"SPACE",69:"MINUS",70:"keywords",71:"UNICODE_TEXT",72:"NUM",73:"ALPHA"},productions_:[0,[3,1],[3,2],[4,1],[5,4],[5,6],[7,1],[8,1],[12,1],[9,1],[6,4],[18,1],[18,2],[18,3],[21,1],[21,2],[21,3],[21,2],[20,1],[20,2],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[26,2],[26,4],[26,5],[26,7],[28,4],[34,1],[34,2],[27,1],[27,2],[27,1],[27,1],[24,3],[24,4],[24,4],[24,5],[40,3],[40,2],[40,2],[40,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[29,3],[29,4],[29,3],[29,4],[29,4],[29,5],[29,3],[29,4],[29,4],[29,5],[29,3],[29,4],[29,4],[29,5],[30,3],[58,1],[58,1],[59,1],[59,1],[59,1],[59,1],[59,1],[59,1],[59,1],[61,1],[61,1],[61,1],[61,1],[22,1],[22,1],[22,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","class");break;case 14:this.$=a[s];break;case 15:this.$=a[s-1]+a[s];break;case 16:this.$=a[s-2]+"~"+a[s-1]+a[s];break;case 17:this.$=a[s-1]+"~"+a[s];break;case 18:r.addRelation(a[s]);break;case 19:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 26:r.addClass(a[s]);break;case 27:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 28:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 29:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 30:r.addAnnotation(a[s],a[s-2]);break;case 31:this.$=[a[s]];break;case 32:a[s].push(a[s-1]),this.$=a[s];break;case 33:break;case 34:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 35:case 36:break;case 37:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 38:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 39:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 40:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 41:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 42:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 43:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 44:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 45:this.$=r.relationType.AGGREGATION;break;case 46:this.$=r.relationType.EXTENSION;break;case 47:this.$=r.relationType.COMPOSITION;break;case 48:this.$=r.relationType.DEPENDENCY;break;case 49:this.$=r.lineType.LINE;break;case 50:this.$=r.lineType.DOTTED_LINE;break;case 51:case 57:this.$=a[s-2],r.setClickEvent(a[s-1],a[s]);break;case 52:case 58:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 53:case 61:this.$=a[s-2],r.setLink(a[s-1],a[s]);break;case 54:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 55:case 63:this.$=a[s-3],r.setLink(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 56:case 64:this.$=a[s-4],r.setLink(a[s-3],a[s-2],a[s]),r.setTooltip(a[s-3],a[s-1]);break;case 59:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 60:this.$=a[s-4],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setTooltip(a[s-3],a[s]);break;case 62:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 65:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:3,6:4,7:5,13:e,17:n},{1:[3]},{1:[2,1]},{3:8,4:2,5:3,6:4,7:5,13:e,17:n},{1:[2,3]},{8:9,14:[1,10]},{10:[1,11]},{14:[2,6]},{1:[2,2]},{9:12,11:[1,13],16:r},t([11,16],[2,7]),{5:23,7:5,13:e,18:15,20:16,21:24,22:33,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:a,38:o,39:s,50:c,51:u,53:l,57:h,71:f,72:d,73:p},{10:[1,37]},{12:38,15:[1,39]},{10:[2,9]},{19:[1,40]},{10:[1,41],19:[2,11]},t(g,[2,18],{25:[1,42]}),t(g,[2,20]),t(g,[2,21]),t(g,[2,22]),t(g,[2,23]),t(g,[2,24]),t(g,[2,25]),t(g,[2,33],{40:43,42:46,43:47,25:[1,45],41:[1,44],44:y,45:v,46:m,47:b,48:x,49:_}),{21:54,22:33,71:f,72:d,73:p},t(g,[2,35]),t(g,[2,36]),{22:55,71:f,72:d,73:p},{21:56,22:33,71:f,72:d,73:p},{21:57,22:33,71:f,72:d,73:p},{21:58,22:33,71:f,72:d,73:p},{41:[1,59]},t(k,[2,14],{22:33,21:60,23:[1,61],71:f,72:d,73:p}),t(w,[2,79]),t(w,[2,80]),t(w,[2,81]),t(E,[2,4]),{9:62,16:r},{16:[2,8]},{1:[2,10]},{5:23,7:5,13:e,18:63,19:[2,12],20:16,21:24,22:33,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:a,38:o,39:s,50:c,51:u,53:l,57:h,71:f,72:d,73:p},t(g,[2,19]),{21:64,22:33,41:[1,65],71:f,72:d,73:p},{40:66,42:46,43:47,44:y,45:v,46:m,47:b,48:x,49:_},t(g,[2,34]),{43:67,48:x,49:_},t(T,[2,44],{42:68,44:y,45:v,46:m,47:b}),t(C,[2,45]),t(C,[2,46]),t(C,[2,47]),t(C,[2,48]),t(A,[2,49]),t(A,[2,50]),t(g,[2,26],{32:[1,69],33:[1,70]}),{37:[1,71]},{41:[1,72]},{41:[1,73]},{54:[1,74],56:[1,75]},{22:76,71:f,72:d,73:p},t(k,[2,15]),t(k,[2,17],{22:33,21:77,71:f,72:d,73:p}),{10:[1,78]},{19:[2,13]},t(S,[2,37]),{21:79,22:33,71:f,72:d,73:p},{21:80,22:33,41:[1,81],71:f,72:d,73:p},t(T,[2,43],{42:82,44:y,45:v,46:m,47:b}),t(T,[2,42]),{22:83,71:f,72:d,73:p},{34:84,38:M},{21:86,22:33,71:f,72:d,73:p},t(g,[2,51],{41:[1,87]}),t(g,[2,53],{41:[1,89],52:[1,88]}),t(g,[2,57],{41:[1,90],55:[1,91]}),t(g,[2,61],{41:[1,93],52:[1,92]}),t(g,[2,65]),t(k,[2,16]),t(E,[2,5]),t(S,[2,39]),t(S,[2,38]),{21:94,22:33,71:f,72:d,73:p},t(T,[2,41]),t(g,[2,27],{33:[1,95]}),{35:[1,96]},{34:97,35:[2,31],38:M},t(g,[2,30]),t(g,[2,52]),t(g,[2,54]),t(g,[2,55],{52:[1,98]}),t(g,[2,58]),t(g,[2,59],{41:[1,99]}),t(g,[2,62]),t(g,[2,63],{52:[1,100]}),t(S,[2,40]),{34:101,38:M},t(g,[2,28]),{35:[2,32]},t(g,[2,56]),t(g,[2,60]),t(g,[2,64]),{35:[1,102]},t(g,[2,29])],defaultActions:{2:[2,1],4:[2,3],7:[2,6],8:[2,2],14:[2,9],39:[2,8],40:[2,10],63:[2,13],97:[2,32]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},D={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),13;case 1:return this.begin("type_directive"),14;case 2:return this.popState(),this.begin("arg_directive"),11;case 3:return this.popState(),this.popState(),16;case 4:return 15;case 5:case 6:break;case 7:return 10;case 8:break;case 9:case 10:return 17;case 11:return this.begin("struct"),33;case 12:return"EOF_IN_STRUCT";case 13:return"OPEN_IN_STRUCT";case 14:return this.popState(),35;case 15:break;case 16:return"MEMBER";case 17:return 31;case 18:return 57;case 19:return 50;case 20:return 51;case 21:return 53;case 22:return 36;case 23:return 37;case 24:this.begin("generic");break;case 25:this.popState();break;case 26:return"GENERICTYPE";case 27:this.begin("string");break;case 28:this.popState();break;case 29:return"STR";case 30:this.begin("href");break;case 31:this.popState();break;case 32:return 56;case 33:this.begin("callback_name");break;case 34:this.popState();break;case 35:this.popState(),this.begin("callback_args");break;case 36:return 54;case 37:this.popState();break;case 38:return 55;case 39:case 40:case 41:case 42:return 52;case 43:case 44:return 45;case 45:case 46:return 47;case 47:return 46;case 48:return 44;case 49:return 48;case 50:return 49;case 51:return 25;case 52:return 32;case 53:return 69;case 54:return"DOT";case 55:return"PLUS";case 56:return 66;case 57:case 58:return"EQUALS";case 59:return 73;case 60:return"PUNCTUATION";case 61:return 72;case 62:return 71;case 63:return 68;case 64:return 19}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callback_args:{rules:[37,38],inclusive:!1},callback_name:{rules:[34,35,36],inclusive:!1},href:{rules:[31,32],inclusive:!1},struct:{rules:[12,13,14,15,16],inclusive:!1},generic:{rules:[25,26],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,17,18,19,20,21,22,23,24,27,30,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],inclusive:!0}}};function N(){this.yy={}}return O.lexer=D,N.prototype=O,O.Parser=N,new N}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e){var n,r,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var c,u=[],l=!1,h=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(c=u,u=[];++h1)for(var n=1;n=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,i="/"===o.charAt(0))}return(i?"/":"")+(e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"))||"."},e.normalize=function(t){var a=e.isAbsolute(t),o="/"===i(t,-1);return(t=n(r(t.split("/"),(function(t){return!!t})),!a).join("/"))||a||(t="."),t&&o&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=function(t){"string"!=typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=o+1;break}}return-1===e||-1===r||0===a||1===a&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n(14))},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,28],d=[1,23],p=[1,24],g=[1,25],y=[1,26],v=[1,29],m=[1,32],b=[1,4,5,14,15,17,19,20,22,23,24,25,26,36,39],x=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,36,39],_=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,36,39],k=[4,5,14,15,17,19,20,22,23,24,25,26,36,39],w={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CONCURRENT:25,note:26,notePosition:27,NOTE_TEXT:28,openDirective:29,typeDirective:30,closeDirective:31,":":32,argDirective:33,eol:34,";":35,EDGE_STATE:36,left_of:37,right_of:38,open_directive:39,type_directive:40,arg_directive:41,close_directive:42,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CONCURRENT",26:"note",28:"NOTE_TEXT",32:":",35:";",36:"EDGE_STATE",37:"left_of",38:"right_of",39:"open_directive",40:"type_directive",41:"arg_directive",42:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[6,3],[6,5],[34,1],[34,1],[11,1],[11,1],[27,1],[27,1],[29,1],[30,1],[33,1],[31,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 23:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:case 31:this.$=a[s];break;case 34:r.parseDirective("%%{","open_directive");break;case 35:r.parseDirective(a[s],"type_directive");break;case 36:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 37:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,29:6,39:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,29:6,39:i},{3:9,4:e,5:n,6:4,7:r,29:6,39:i},{3:10,4:e,5:n,6:4,7:r,29:6,39:i},t([1,4,5,14,15,17,20,22,23,24,25,26,36,39],a,{8:11}),{30:12,40:[1,13]},{40:[2,34]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},{31:30,32:[1,31],42:m},t([32,42],[2,35]),t(b,[2,6]),{6:27,10:33,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},t(b,[2,8]),t(b,[2,9]),t(b,[2,10],{12:[1,34],13:[1,35]}),t(b,[2,14]),{16:[1,36]},t(b,[2,16],{18:[1,37]}),{21:[1,38]},t(b,[2,20]),t(b,[2,21]),t(b,[2,22]),{27:39,28:[1,40],37:[1,41],38:[1,42]},t(b,[2,25]),t(x,[2,30]),t(x,[2,31]),t(_,[2,26]),{33:43,41:[1,44]},t(_,[2,37]),t(b,[2,7]),t(b,[2,11]),{11:45,22:f,36:v},t(b,[2,15]),t(k,a,{8:46}),{22:[1,47]},{22:[1,48]},{21:[1,49]},{22:[2,32]},{22:[2,33]},{31:50,42:m},{42:[2,36]},t(b,[2,12],{12:[1,51]}),{4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,52],20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},t(b,[2,18],{18:[1,53]}),{28:[1,54]},{22:[1,55]},t(_,[2,27]),t(b,[2,13]),t(b,[2,17]),t(k,a,{8:56}),t(b,[2,23]),t(b,[2,24]),{4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,57],20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},t(b,[2,19])],defaultActions:{7:[2,34],8:[2,1],9:[2,2],10:[2,3],41:[2,32],42:[2,33],44:[2,36]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},E={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:break;case 6:console.log("Crap after close");break;case 7:return 5;case 8:case 9:case 10:case 11:break;case 12:return this.pushState("SCALE"),15;case 13:return 16;case 14:this.popState();break;case 15:this.pushState("STATE");break;case 16:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 17:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 18:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 19:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 20:this.begin("STATE_STRING");break;case 21:return this.popState(),this.pushState("STATE_ID"),"AS";case 22:return this.popState(),"ID";case 23:this.popState();break;case 24:return"STATE_DESCR";case 25:return 17;case 26:this.popState();break;case 27:return this.popState(),this.pushState("struct"),18;case 28:return this.popState(),19;case 29:break;case 30:return this.begin("NOTE"),26;case 31:return this.popState(),this.pushState("NOTE_ID"),37;case 32:return this.popState(),this.pushState("NOTE_ID"),38;case 33:this.popState(),this.pushState("FLOATING_NOTE");break;case 34:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 35:break;case 36:return"NOTE_TEXT";case 37:return this.popState(),"ID";case 38:return this.popState(),this.pushState("NOTE_TEXT"),22;case 39:return this.popState(),e.yytext=e.yytext.substr(2).trim(),28;case 40:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),28;case 41:case 42:return 7;case 43:return 14;case 44:return 36;case 45:return 22;case 46:return e.yytext=e.yytext.trim(),12;case 47:return 13;case 48:return 25;case 49:return 5;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},close_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[3,4,9,10],inclusive:!1},type_directive:{rules:[2,3,9,10],inclusive:!1},open_directive:{rules:[1,9,10],inclusive:!1},struct:{rules:[9,10,15,28,29,30,44,45,46,47,48],inclusive:!1},FLOATING_NOTE_ID:{rules:[37],inclusive:!1},FLOATING_NOTE:{rules:[34,35,36],inclusive:!1},NOTE_TEXT:{rules:[39,40],inclusive:!1},NOTE_ID:{rules:[38],inclusive:!1},NOTE:{rules:[31,32,33],inclusive:!1},SCALE:{rules:[13,14],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[22],inclusive:!1},STATE_STRING:{rules:[23,24],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,16,17,18,19,20,21,25,26,27],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,10,11,12,15,27,30,41,42,43,44,45,46,47,49,50],inclusive:!0}}};function T(){this.yy={}}return w.lexer=E,T.prototype=w,w.Parser=T,new T}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t){t.exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n>>0,r=0;ryt(t)?(a=t+1,s-yt(t)):(a=t,s),{year:a,dayOfYear:o}}function Ft(t,e,n){var r,i,a=Bt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Pt(i=t.year()-1,e,n):o>Pt(t.year(),e,n)?(r=o-Pt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Pt(t,e,n){var r=Bt(t,e,n),i=Bt(t+1,e,n);return(yt(t)-r+i)/7}function It(t,e){return t.slice(e,7).concat(t.slice(0,e))}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),j("week",5),j("isoWeek",5),lt("w",K),lt("ww",K,q),lt("W",K),lt("WW",K,q),gt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),W("d",0,"do","day"),W("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),W("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),W("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),j("day",11),j("weekday",11),j("isoWeekday",11),lt("d",K),lt("e",K),lt("E",K),lt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),lt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),lt("dddd",(function(t,e){return e.weekdaysRegex(t)})),gt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),gt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var jt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Rt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Yt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zt=ct,Ut=ct,$t=ct;function Wt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],u=[];for(e=0;e<7;e++)n=d([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),u.push(r),u.push(i),u.push(a);for(o.sort(t),s.sort(t),c.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),c[e]=ft(c[e]),u[e]=ft(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Ht(){return this.hours()%12||12}function Vt(t,e){W(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Gt(t,e){return e._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Ht),W("k",["kk",2],0,(function(){return this.hours()||24})),W("hmm",0,0,(function(){return""+Ht.apply(this)+R(this.minutes(),2)})),W("hmmss",0,0,(function(){return""+Ht.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)})),W("Hmm",0,0,(function(){return""+this.hours()+R(this.minutes(),2)})),W("Hmmss",0,0,(function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)})),Vt("a",!0),Vt("A",!1),L("hour","h"),j("hour",13),lt("a",Gt),lt("A",Gt),lt("H",K),lt("h",K),lt("k",K),lt("HH",K,q),lt("hh",K,q),lt("kk",K,q),lt("hmm",Q),lt("hmmss",tt),lt("Hmm",Q),lt("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var qt,Xt=xt("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Tt,monthsShort:Ct,week:{dow:0,doy:6},weekdays:jt,weekdaysMin:Yt,weekdaysShort:Rt,meridiemParse:/[ap]\.?m?\.?/i},Jt={},Kt={};function Qt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Jt[e]&&void 0!==t&&t&&t.exports)try{r=qt._abbr,n(171)("./"+e),ee(r)}catch(e){}return Jt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?qt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),qt._abbr}function ne(t,e){if(null===e)return delete Jt[t],null;var n,r=Zt;if(e.abbr=t,null!=Jt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Jt[t]._config;else if(null!=e.parentLocale)if(null!=Jt[e.parentLocale])r=Jt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Kt[e.parentLocale]||(Kt[e.parentLocale]=[]),Kt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Jt[t]=new N(D(r,e)),Kt[t]&&Kt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Jt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return qt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a=e&&E(i,n,!0)>=e-1)break;e--}a++}return qt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11wt(n[0],n[1])?2:n[3]<0||24Pt(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>yt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Nt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Nt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ue=/Z|[+-]\d\d(?::?\d\d)?/,le=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fe=/^\/?Date\((\-?\d+)/i;function de(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=le.length;en.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=Be,on.isUTC=Be,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Qe),on.months=C("months accessor is deprecated. Use month instead",St),on.years=C("years accessor is deprecated. Use year instead",bt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(m(t,this),(t=me(t))._a){var e=t._isUTC?d(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&0h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 75;case 11:return 84;case 12:return 76;case 13:return 93;case 14:return 77;case 15:return 78;case 16:this.begin("href");break;case 17:this.popState();break;case 18:return 89;case 19:this.begin("callbackname");break;case 20:this.popState();break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 87;case 23:this.popState();break;case 24:return 88;case 25:this.begin("click");break;case 26:this.popState();break;case 27:return 79;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 90;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 94;case 48:return 102;case 49:return 47;case 50:return 99;case 51:return 46;case 52:return 20;case 53:return 95;case 54:return 113;case 55:case 56:case 57:return 70;case 58:case 59:case 60:return 69;case 61:return 51;case 62:return 52;case 63:return 53;case 64:return 54;case 65:return 55;case 66:return 56;case 67:return 57;case 68:return 58;case 69:return 100;case 70:return 103;case 71:return 114;case 72:return 111;case 73:return 104;case 74:case 75:return 112;case 76:return 105;case 77:return 61;case 78:return 81;case 79:return"SEP";case 80:return 80;case 81:return 98;case 82:return 63;case 83:return 62;case 84:return 65;case 85:return 64;case 86:return 109;case 87:return 110;case 88:return 71;case 89:return 49;case 90:return 50;case 91:return 40;case 92:return 41;case 93:return 59;case 94:return 60;case 95:return 120;case 96:return 21;case 97:return 22;case 98:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],inclusive:!0}}};function Xt(){this.yy={}}return Gt.lexer=qt,Xt.prototype=Gt,Gt.Parser=Xt,new Xt}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,20,27,32],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],u=[1,20],l=[1,21],h=[1,23],f=[1,25],d=[1,28],p=[5,7,9,11,12,13,14,15,16,17,18,20,27,32],g={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,axisFormat:14,excludes:15,todayMarker:16,title:17,section:18,clickStatement:19,taskTxt:20,taskData:21,openDirective:22,typeDirective:23,closeDirective:24,":":25,argDirective:26,click:27,callbackname:28,callbackargs:29,href:30,clickStatementDebug:31,open_directive:32,type_directive:33,arg_directive:34,close_directive:35,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"axisFormat",15:"excludes",16:"todayMarker",17:"title",18:"section",20:"taskTxt",21:"taskData",25:":",27:"click",28:"callbackname",29:"callbackargs",30:"href",32:"open_directive",33:"type_directive",34:"arg_directive",35:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[19,2],[19,3],[19,3],[19,4],[19,3],[19,4],[19,2],[31,2],[31,3],[31,3],[31,4],[31,3],[31,4],[31,2],[22,1],[23,1],[26,1],[24,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 12:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 13:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 14:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 15:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 17:r.addTask(a[s-1],a[s]),this.$="task";break;case 21:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 22:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 23:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 24:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 25:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 26:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 27:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 28:case 34:this.$=a[s-1]+" "+a[s];break;case 29:case 30:case 32:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 31:case 33:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 35:r.parseDirective("%%{","open_directive");break;case 36:r.parseDirective(a[s],"type_directive");break;case 37:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 38:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,22:4,32:n},{1:[3]},{3:6,4:2,5:e,22:4,32:n},t(r,[2,3],{6:7}),{23:8,33:[1,9]},{33:[2,35]},{1:[2,1]},{4:24,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:22,20:h,22:4,27:f,32:n},{24:26,25:[1,27],35:d},t([25,35],[2,36]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:24,10:29,12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:22,20:h,22:4,27:f,32:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),{21:[1,30]},t(r,[2,18]),{28:[1,31],30:[1,32]},{11:[1,33]},{26:34,34:[1,35]},{11:[2,38]},t(r,[2,5]),t(r,[2,17]),t(r,[2,21],{29:[1,36],30:[1,37]}),t(r,[2,27],{28:[1,38]}),t(p,[2,19]),{24:39,35:d},{35:[2,37]},t(r,[2,22],{30:[1,40]}),t(r,[2,23]),t(r,[2,25],{29:[1,41]}),{11:[1,42]},t(r,[2,24]),t(r,[2,26]),t(p,[2,20])],defaultActions:{5:[2,35],6:[2,1],28:[2,38],35:[2,37]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),32;case 1:return this.begin("type_directive"),33;case 2:return this.popState(),this.begin("arg_directive"),25;case 3:return this.popState(),this.popState(),35;case 4:return 34;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 30;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 28;case 19:this.popState();break;case 20:return 29;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 27;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return"date";case 31:return 17;case 32:return 18;case 33:return 20;case 34:return 21;case 35:return 25;case 36:return 7;case 37:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37],inclusive:!0}}};function v(){this.yy={}}return g.lexer=y,v.prototype=g,g.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t,e){return r.default.lang.round(i.default.parse(t)[e])}},function(t,e,n){var r=n(112),i=n(82),a=n(24);t.exports=function(t){return a(t)?r(t):i(t)}},function(t,e,n){var r;if(!r)try{r=n(0)}catch(t){}r||(r=window.d3),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t,e,n){var a=i.default.parse(t),o=a[e],s=r.default.channel.clamp[e](o+n);return o!==s&&(a[e]=s),i.default.stringify(a)}},function(t,e,n){var r=n(210),i=n(216);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(38),i=n(212),a=n(213),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},function(t,e){t.exports=function(t){return t}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(34),i=n(11);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(16).Symbol;t.exports=r},function(t,e,n){(function(t){var r=n(16),i=n(232),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(this,n(7)(t))},function(t,e,n){var r=n(112),i=n(236),a=n(24);t.exports=function(t){return a(t)?r(t,!0):i(t)}},function(t,e,n){var r=n(241),i=n(77),a=n(242),o=n(121),s=n(243),c=n(34),u=n(110),l=u(r),h=u(i),f=u(a),d=u(o),p=u(s),g=c;(r&&"[object DataView]"!=g(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=g(new i)||a&&"[object Promise]"!=g(a.resolve())||o&&"[object Set]"!=g(new o)||s&&"[object WeakMap]"!=g(new s))&&(g=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case h:return"[object Map]";case f:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return e}),t.exports=g},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r;try{r={defaults:n(154),each:n(87),isFunction:n(37),isPlainObject:n(158),pick:n(161),has:n(93),range:n(162),uniqueId:n(163)}}catch(t){}r||(r=window._),t.exports=r},function(t){t.exports=JSON.parse('{"name":"mermaid","version":"8.8.4","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build:development":"webpack --progress --colors","build:production":"yarn build:development -p --config webpack.config.prod.babel.js","build":"yarn build:development && yarn build:production","postbuild":"documentation build src/mermaidAPI.js src/config.js --shallow -f md --markdown-toc false > docs/Setup.md","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","d3":"^5.7.0","dagre":"^0.8.4","dagre-d3":"^0.6.4","entity-decode":"^2.0.2","graphlib":"^2.1.7","he":"^1.2.0","khroma":"^1.1.0","minify":"^4.1.1","moment-mini":"^2.22.1","stylis":"^3.5.2"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.8.4","@babel/register":"^7.0.0","@percy/cypress":"*","babel-core":"7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","cypress":"4.0.1","documentation":"^12.0.1","eslint":"^6.3.0","eslint-config-prettier":"^6.3.0","eslint-plugin-prettier":"^3.1.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^24.9.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^4.12.0","prettier":"^1.18.2","puppeteer":"^1.17.0","sass-loader":"^7.1.0","start-server-and-test":"^1.10.6","terser-webpack-plugin":"^2.2.2","webpack":"^4.41.2","webpack-bundle-analyzer":"^3.7.0","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]},"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=new(n(176).default)({r:0,g:0,b:0,a:0},"transparent");e.default=r},function(t,e,n){var r=n(58),i=n(59);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s-1&&t%1==0&&t-1}(s)?s:(n=s.match(a))?(e=n[0],r.test(e)?"about:blank":s):"about:blank"}}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){a.length;switch(i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,10,12,19,20,21,22],s=[1,6,10,12,19,20,21,22],c=[19,20,21],u=[1,22],l=[6,19,20,21,22],h={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,NEWLINE:19,";":20,EOF:21,open_directive:22,type_directive:23,arg_directive:24,close_directive:25,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",10:"txt",11:"value",12:"title",13:"title_value",17:":",19:"NEWLINE",20:";",21:"EOF",22:"open_directive",23:"type_directive",24:"arg_directive",25:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,2],[9,1],[5,3],[5,5],[4,1],[4,1],[4,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:this.$=a[s-1];break;case 8:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 9:this.$=a[s].trim(),r.setTitle(this.$);break;case 16:r.parseDirective("%%{","open_directive");break;case 17:r.parseDirective(a[s],"type_directive");break;case 18:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 19:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},{1:[3]},{3:10,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},{3:11,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},t(o,[2,4],{7:12}),t(s,[2,13]),t(s,[2,14]),t(s,[2,15]),{15:13,23:[1,14]},{23:[2,16]},{1:[2,1]},{1:[2,2]},t(c,[2,7],{14:8,8:15,9:16,5:19,1:[2,3],10:[1,17],12:[1,18],22:a}),{16:20,17:[1,21],25:u},t([17,25],[2,17]),t(o,[2,5]),{4:23,19:n,20:r,21:i},{11:[1,24]},{13:[1,25]},t(c,[2,10]),t(l,[2,11]),{18:26,24:[1,27]},t(l,[2,19]),t(o,[2,6]),t(c,[2,8]),t(c,[2,9]),{16:28,25:u},{25:[2,18]},t(l,[2,12])],defaultActions:{9:[2,16],10:[2,1],11:[2,2],27:[2,18]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},f={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),22;case 1:return this.begin("type_directive"),23;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),25;case 4:return 24;case 5:case 6:break;case 7:return 19;case 8:case 9:break;case 10:return this.begin("title"),12;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return"value";case 17:return 21}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17],inclusive:!0}}};function d(){this.yy={}}return h.lexer=f,d.prototype=h,h.Parser=d,new d}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,37],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,34,35],f=[4,6,9,11,23,37],d=[30,31,32,33],p=[22,27],g={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,ATTRIBUTE_WORD:27,cardinality:28,relType:29,ZERO_OR_ONE:30,ZERO_OR_MORE:31,ONE_OR_MORE:32,ONLY_ONE:33,NON_IDENTIFYING:34,IDENTIFYING:35,WORD:36,open_directive:37,type_directive:38,arg_directive:39,close_directive:40,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",27:"ATTRIBUTE_WORD",30:"ZERO_OR_ONE",31:"ZERO_OR_MORE",32:"ONE_OR_MORE",33:"ONLY_ONE",34:"NON_IDENTIFYING",35:"IDENTIFYING",36:"WORD",37:"open_directive",38:"type_directive",39:"arg_directive",40:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[25,1],[26,1],[18,3],[28,1],[28,1],[28,1],[28,1],[29,1],[29,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:this.$=a[s];break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:case 21:this.$=a[s];break;case 22:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 23:this.$=r.Cardinality.ZERO_OR_ONE;break;case 24:this.$=r.Cardinality.ZERO_OR_MORE;break;case 25:this.$=r.Cardinality.ONE_OR_MORE;break;case 26:this.$=r.Cardinality.ONLY_ONE;break;case 27:this.$=r.Identification.NON_IDENTIFYING;break;case 28:this.$=r.Identification.IDENTIFYING;break;case 29:this.$=a[s].replace(/"/g,"");break;case 30:this.$=a[s];break;case 31:r.parseDirective("%%{","open_directive");break;case 32:r.parseDirective(a[s],"type_directive");break;case 33:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 34:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,37:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,37:n},{13:8,38:[1,9]},{38:[2,31]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,37:n},{1:[2,2]},{14:18,15:[1,19],40:a},t([15,40],[2,32]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,37:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,28:24,20:[1,23],30:o,31:s,32:c,33:u}),t([6,9,11,15,20,23,30,31,32,33,37],[2,16]),{11:[1,29]},{16:30,39:[1,31]},{11:[2,34]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,27:l},{29:38,34:[1,39],35:[1,40]},t(h,[2,23]),t(h,[2,24]),t(h,[2,25]),t(h,[2,26]),t(f,[2,9]),{14:41,40:a},{40:[2,33]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,27:l},{26:45,27:[1,46]},{27:[2,20]},{28:47,30:o,31:s,32:c,33:u},t(d,[2,27]),t(d,[2,28]),{11:[1,48]},{19:49,23:[1,51],36:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19]),t(p,[2,21]),{23:[2,22]},t(f,[2,10]),t(r,[2,12]),t(r,[2,29]),t(r,[2,30])],defaultActions:{5:[2,31],7:[2,2],20:[2,34],31:[2,33],37:[2,20],44:[2,18],47:[2,22]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),37;case 1:return this.begin("type_directive"),38;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),40;case 4:return 39;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 36;case 11:return 4;case 12:return this.begin("block"),20;case 13:break;case 14:return 27;case 15:break;case 16:return this.popState(),22;case 17:return e.yytext[0];case 18:return 30;case 19:return 31;case 20:return 32;case 21:return 33;case 22:return 30;case 23:return 31;case 24:return 32;case 25:return 34;case 26:return 35;case 27:case 28:return 34;case 29:return 23;case 30:return e.yytext[0];case 31:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31],inclusive:!0}}};function v(){this.yy={}}return g.lexer=y,v.prototype=g,g.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){"use strict";var r;Object.defineProperty(e,"__esModule",{value:!0}),function(t){t[t.ALL=0]="ALL",t[t.RGB=1]="RGB",t[t.HSL=2]="HSL"}(r||(r={})),e.TYPE=r},function(t,e,n){"use strict";var r=n(10);t.exports=i;function i(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function s(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+""+o+""+(r.isUndefined(i)?"\0":i)}function c(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return s(t,e.v,e.w,e.name)}i.prototype._nodeCount=0,i.prototype._edgeCount=0,i.prototype.isDirected=function(){return this._isDirected},i.prototype.isMultigraph=function(){return this._isMultigraph},i.prototype.isCompound=function(){return this._isCompound},i.prototype.setGraph=function(t){return this._label=t,this},i.prototype.graph=function(){return this._label},i.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},i.prototype.nodeCount=function(){return this._nodeCount},i.prototype.nodes=function(){return r.keys(this._nodes)},i.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},i.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},i.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},i.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]="\0",this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},i.prototype.node=function(t){return this._nodes[t]},i.prototype.hasNode=function(t){return r.has(this._nodes,t)},i.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},i.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e="\0";else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},i.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},i.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if("\0"!==e)return e}},i.prototype.children=function(t){if(r.isUndefined(t)&&(t="\0"),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if("\0"===t)return this.nodes();if(this.hasNode(t))return[]}},i.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},i.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},i.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},i.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},i.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,function t(r){var a=n.parent(r);return void 0===a||e.hasNode(a)?(i[r]=a,a):a in i?i[a]:t(a)}(t))})),e},i.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},i.prototype.edgeCount=function(){return this._edgeCount},i.prototype.edges=function(){return r.values(this._edgeObjs)},i.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},i.prototype.setEdge=function(){var t,e,n,i,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var l=s(this._isDirected,t,e,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=c(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},i.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return this._edgeLabels[r]},i.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},i.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},i.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},i.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},i.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){var r=n(33)(n(16),"Map");t.exports=r},function(t,e,n){var r=n(217),i=n(224),a=n(226),o=n(227),s=n(228);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){(function(t){var r=n(109),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{var t=a&&a.require&&a.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(this,n(7)(t))},function(t,e,n){var r=n(62),i=n(234),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(116),i=n(117),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(t,e,n){var r=n(42);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i4,u=c?1:17,l=c?8:4,h=s?0:-1,f=c?255:15;return i.default.set({r:(r>>l*(h+3)&f)*u,g:(r>>l*(h+2)&f)*u,b:(r>>l*(h+1)&f)*u,a:s?(r&f)*u/255:1},t)}}},stringify:function(t){return t.a<1?"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]+r.default.unit.frac2hex(t.a):"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]}};e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a=n(15);e.default=function(t,e,n,o){void 0===o&&(o=1);var s=i.default.set({h:r.default.channel.clamp.h(t),s:r.default.channel.clamp.s(e),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(o)});return a.default.stringify(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"a")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t){var e=i.default.parse(t),n=e.r,a=e.g,o=e.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(a)+.0722*r.default.channel.toLinear(o);return r.default.lang.round(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(102);e.default=function(t){return r.default(t)>=.5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(52);e.default=function(t,e){var n=r.default.parse(t),a={};for(var o in e)e[o]&&(a[o]=n[o]+e[o]);return i.default(t,a)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(51);e.default=function(t,e,n){void 0===n&&(n=50);var a=r.default.parse(t),o=a.r,s=a.g,c=a.b,u=a.a,l=r.default.parse(e),h=l.r,f=l.g,d=l.b,p=l.a,g=n/100,y=2*g-1,v=u-p,m=((y*v==-1?y:(y+v)/(1+y*v))+1)/2,b=1-m,x=o*m+h*b,_=s*m+f*b,k=c*m+d*b,w=u*g+p*(1-g);return i.default(x,_,k,w)}},function(t,e,n){var r=n(53),i=n(79),a=n(58),o=n(229),s=n(235),c=n(114),u=n(115),l=n(238),h=n(239),f=n(119),d=n(240),p=n(41),g=n(244),y=n(245),v=n(124),m=n(5),b=n(39),x=n(249),_=n(11),k=n(251),w=n(30),E={};E["[object Arguments]"]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object DataView]"]=E["[object Boolean]"]=E["[object Date]"]=E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Map]"]=E["[object Number]"]=E["[object Object]"]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[object Symbol]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Error]"]=E["[object Function]"]=E["[object WeakMap]"]=!1,t.exports=function t(e,n,T,C,A,S){var M,O=1&n,D=2&n,N=4&n;if(T&&(M=A?T(e,C,A,S):T(e)),void 0!==M)return M;if(!_(e))return e;var B=m(e);if(B){if(M=g(e),!O)return u(e,M)}else{var L=p(e),F="[object Function]"==L||"[object GeneratorFunction]"==L;if(b(e))return c(e,O);if("[object Object]"==L||"[object Arguments]"==L||F&&!A){if(M=D||F?{}:v(e),!O)return D?h(e,s(M,e)):l(e,o(M,e))}else{if(!E[L])return A?e:{};M=y(e,L,O)}}S||(S=new r);var P=S.get(e);if(P)return P;S.set(e,M),k(e)?e.forEach((function(r){M.add(t(r,n,T,r,e,S))})):x(e)&&e.forEach((function(r,i){M.set(i,t(r,n,T,i,e,S))}));var I=N?D?d:f:D?keysIn:w,j=B?void 0:I(e);return i(j||e,(function(r,i){j&&(r=e[i=r]),a(M,i,t(r,n,T,i,e,S))})),M}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(211))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(33),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(230),i=n(47),a=n(5),o=n(39),s=n(60),c=n(48),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),h=!n&&!l&&o(t),f=!n&&!l&&!h&&c(t),d=n||l||h||f,p=d?r(t.length,String):[],g=p.length;for(var y in t)!e&&!u.call(t,y)||d&&("length"==y||h&&("offset"==y||"parent"==y)||f&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||s(y,g))||p.push(y);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(16),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(7)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var f=c.get(t);if(f&&c.get(e))return f==e;var d=-1,p=!0,g=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++d0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(u);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){var r=n(10);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority2?e[2]:void 0;for(u&&a(e[0],e[1],u)&&(r=1);++n1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o);return{x:i+n,y:a+r}}},function(t,e,n){t.exports=function t(e){"use strict";var n=/^\0+/g,r=/[\0\r\f]/g,i=/: */g,a=/zoo|gra/,o=/([,: ])(transform)/g,s=/,+\s*(?![^(]*[)])/g,c=/ +\s*(?![^(]*[)])/g,u=/ *[\0] */g,l=/,\r+?/g,h=/([\t\r\n ])*\f?&/g,f=/:global\(((?:[^\(\)\[\]]*|\[.*\]|\([^\(\)]*\))*)\)/g,d=/\W+/g,p=/@(k\w+)\s*(\S*)\s*/,g=/::(place)/g,y=/:(read-only)/g,v=/\s+(?=[{\];=:>])/g,m=/([[}=:>])\s+/g,b=/(\{[^{]+?);(?=\})/g,x=/\s{2,}/g,_=/([^\(])(:+) */g,k=/[svh]\w+-[tblr]{2}/,w=/\(\s*(.*)\s*\)/g,E=/([\s\S]*?);/g,T=/-self|flex-/g,C=/[^]*?(:[rp][el]a[\w-]+)[^]*/,A=/stretch|:\s*\w+\-(?:conte|avail)/,S=/([^-])(image-set\()/,M="-webkit-",O="-moz-",D="-ms-",N=1,B=1,L=0,F=1,P=1,I=1,j=0,R=0,Y=0,z=[],U=[],$=0,W=null,H=0,V=1,G="",q="",X="";function Z(t,e,i,a,o){for(var s,c,l=0,h=0,f=0,d=0,v=0,m=0,b=0,x=0,k=0,E=0,T=0,C=0,A=0,S=0,O=0,D=0,j=0,U=0,W=0,K=i.length,it=K-1,at="",ot="",st="",ct="",ut="",lt="";O0&&(ot=ot.replace(r,"")),ot.trim().length>0)){switch(b){case 32:case 9:case 59:case 13:case 10:break;default:ot+=i.charAt(O)}b=59}if(1===j)switch(b){case 123:case 125:case 59:case 34:case 39:case 40:case 41:case 44:j=0;case 9:case 13:case 10:case 32:break;default:for(j=0,W=O,v=b,O--,b=59;W0&&(++O,b=v);case 123:W=K}}switch(b){case 123:for(v=(ot=ot.trim()).charCodeAt(0),T=1,W=++O;O0&&(ot=ot.replace(r,"")),m=ot.charCodeAt(1)){case 100:case 109:case 115:case 45:s=e;break;default:s=z}if(W=(st=Z(e,s,st,m,o+1)).length,Y>0&&0===W&&(W=ot.length),$>0&&(c=nt(3,st,s=J(z,ot,U),e,B,N,W,m,o,a),ot=s.join(""),void 0!==c&&0===(W=(st=c.trim()).length)&&(m=0,st="")),W>0)switch(m){case 115:ot=ot.replace(w,et);case 100:case 109:case 45:st=ot+"{"+st+"}";break;case 107:st=(ot=ot.replace(p,"$1 $2"+(V>0?G:"")))+"{"+st+"}",st=1===P||2===P&&tt("@"+st,3)?"@"+M+st+"@"+st:"@"+st;break;default:st=ot+st,112===a&&(ct+=st,st="")}else st="";break;default:st=Z(e,J(e,ot,U),st,a,o+1)}ut+=st,C=0,j=0,S=0,D=0,U=0,A=0,ot="",st="",b=i.charCodeAt(++O);break;case 125:case 59:if((W=(ot=(D>0?ot.replace(r,""):ot).trim()).length)>1)switch(0===S&&(45===(v=ot.charCodeAt(0))||v>96&&v<123)&&(W=(ot=ot.replace(" ",":")).length),$>0&&void 0!==(c=nt(1,ot,e,t,B,N,ct.length,a,o,a))&&0===(W=(ot=c.trim()).length)&&(ot="\0\0"),v=ot.charCodeAt(0),m=ot.charCodeAt(1),v){case 0:break;case 64:if(105===m||99===m){lt+=ot+i.charAt(O);break}default:if(58===ot.charCodeAt(W-1))break;ct+=Q(ot,v,m,ot.charCodeAt(2))}C=0,j=0,S=0,D=0,U=0,ot="",b=i.charCodeAt(++O)}}switch(b){case 13:case 10:if(h+d+f+l+R===0)switch(E){case 41:case 39:case 34:case 64:case 126:case 62:case 42:case 43:case 47:case 45:case 58:case 44:case 59:case 123:case 125:break;default:S>0&&(j=1)}47===h?h=0:F+C===0&&107!==a&&ot.length>0&&(D=1,ot+="\0"),$*H>0&&nt(0,ot,e,t,B,N,ct.length,a,o,a),N=1,B++;break;case 59:case 125:if(h+d+f+l===0){N++;break}default:switch(N++,at=i.charAt(O),b){case 9:case 32:if(d+l+h===0)switch(x){case 44:case 58:case 9:case 32:at="";break;default:32!==b&&(at=" ")}break;case 0:at="\\0";break;case 12:at="\\f";break;case 11:at="\\v";break;case 38:d+h+l===0&&F>0&&(U=1,D=1,at="\f"+at);break;case 108:if(d+h+l+L===0&&S>0)switch(O-S){case 2:112===x&&58===i.charCodeAt(O-3)&&(L=x);case 8:111===k&&(L=k)}break;case 58:d+h+l===0&&(S=O);break;case 44:h+f+d+l===0&&(D=1,at+="\r");break;case 34:case 39:0===h&&(d=d===b?0:0===d?b:d);break;case 91:d+h+f===0&&l++;break;case 93:d+h+f===0&&l--;break;case 41:d+h+l===0&&f--;break;case 40:if(d+h+l===0){if(0===C)switch(2*x+3*k){case 533:break;default:T=0,C=1}f++}break;case 64:h+f+d+l+S+A===0&&(A=1);break;case 42:case 47:if(d+l+f>0)break;switch(h){case 0:switch(2*b+3*i.charCodeAt(O+1)){case 235:h=47;break;case 220:W=O,h=42}break;case 42:47===b&&42===x&&W+2!==O&&(33===i.charCodeAt(W+2)&&(ct+=i.substring(W,O+1)),at="",h=0)}}if(0===h){if(F+d+l+A===0&&107!==a&&59!==b)switch(b){case 44:case 126:case 62:case 43:case 41:case 40:if(0===C){switch(x){case 9:case 32:case 10:case 13:at+="\0";break;default:at="\0"+at+(44===b?"":"\0")}D=1}else switch(b){case 40:S+7===O&&108===x&&(S=0),C=++T;break;case 41:0==(C=--T)&&(D=1,at+="\0")}break;case 9:case 32:switch(x){case 0:case 123:case 125:case 59:case 44:case 12:case 9:case 32:case 10:case 13:break;default:0===C&&(D=1,at+="\0")}}ot+=at,32!==b&&9!==b&&(E=b)}}k=x,x=b,O++}if(W=ct.length,Y>0&&0===W&&0===ut.length&&0===e[0].length==0&&(109!==a||1===e.length&&(F>0?q:X)===e[0])&&(W=e.join(",").length+2),W>0){if(s=0===F&&107!==a?function(t){for(var e,n,i=0,a=t.length,o=Array(a);i1)){if(f=c.charCodeAt(c.length-1),d=n.charCodeAt(0),e="",0!==l)switch(f){case 42:case 126:case 62:case 43:case 32:case 40:break;default:e=" "}switch(d){case 38:n=e+q;case 126:case 62:case 43:case 32:case 41:case 40:break;case 91:n=e+n+q;break;case 58:switch(2*n.charCodeAt(1)+3*n.charCodeAt(2)){case 530:if(I>0){n=e+n.substring(8,h-1);break}default:(l<1||s[l-1].length<1)&&(n=e+q+n)}break;case 44:e="";default:n=h>1&&n.indexOf(":")>0?e+n.replace(_,"$1"+q+"$2"):e+n+q}c+=n}o[i]=c.replace(r,"").trim()}return o}(e):e,$>0&&void 0!==(c=nt(2,ct,s,t,B,N,W,a,o,a))&&0===(ct=c).length)return lt+ct+ut;if(ct=s.join(",")+"{"+ct+"}",P*L!=0){switch(2!==P||tt(ct,2)||(L=0),L){case 111:ct=ct.replace(y,":-moz-$1")+ct;break;case 112:ct=ct.replace(g,"::-webkit-input-$1")+ct.replace(g,"::-moz-$1")+ct.replace(g,":-ms-input-$1")+ct}L=0}}return lt+ct+ut}function J(t,e,n){var r=e.trim().split(l),i=r,a=r.length,o=t.length;switch(o){case 0:case 1:for(var s=0,c=0===o?"":t[0]+" ";s0&&F>0)return i.replace(f,"$1").replace(h,"$1"+X);break;default:return t.trim()+i.replace(h,"$1"+t.trim())}default:if(n*F>0&&i.indexOf("\f")>0)return i.replace(h,(58===t.charCodeAt(0)?"":"$1")+t.trim())}return t+i}function Q(t,e,n,r){var u,l=0,h=t+";",f=2*e+3*n+4*r;if(944===f)return function(t){var e=t.length,n=t.indexOf(":",9)+1,r=t.substring(0,n).trim(),i=t.substring(n,e-1).trim();switch(t.charCodeAt(9)*V){case 0:break;case 45:if(110!==t.charCodeAt(10))break;default:var a=i.split((i="",s)),o=0;for(n=0,e=a.length;o64&&h<90||h>96&&h<123||95===h||45===h&&45!==u.charCodeAt(1)))switch(isNaN(parseFloat(u))+(-1!==u.indexOf("("))){case 1:switch(u){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:u+=G}}l[n++]=u}i+=(0===o?"":",")+l.join(" ")}}return i=r+i+";",1===P||2===P&&tt(i,1)?M+i+i:i}(h);if(0===P||2===P&&!tt(h,1))return h;switch(f){case 1015:return 97===h.charCodeAt(10)?M+h+h:h;case 951:return 116===h.charCodeAt(3)?M+h+h:h;case 963:return 110===h.charCodeAt(5)?M+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return M+h+h;case 978:return M+h+O+h+h;case 1019:case 983:return M+h+O+h+D+h+h;case 883:return 45===h.charCodeAt(8)?M+h+h:h.indexOf("image-set(",11)>0?h.replace(S,"$1-webkit-$2")+h:h;case 932:if(45===h.charCodeAt(4))switch(h.charCodeAt(5)){case 103:return M+"box-"+h.replace("-grow","")+M+h+D+h.replace("grow","positive")+h;case 115:return M+h+D+h.replace("shrink","negative")+h;case 98:return M+h+D+h.replace("basis","preferred-size")+h}return M+h+D+h+h;case 964:return M+h+D+"flex-"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return u=h.substring(h.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),M+"box-pack"+u+M+h+D+"flex-pack"+u+h;case 1005:return a.test(h)?h.replace(i,":"+M)+h.replace(i,":"+O)+h:h;case 1e3:switch(l=(u=h.substring(13).trim()).indexOf("-")+1,u.charCodeAt(0)+u.charCodeAt(l)){case 226:u=h.replace(k,"tb");break;case 232:u=h.replace(k,"tb-rl");break;case 220:u=h.replace(k,"lr");break;default:return h}return M+h+D+u+h;case 1017:if(-1===h.indexOf("sticky",9))return h;case 975:switch(l=(h=t).length-10,f=(u=(33===h.charCodeAt(l)?h.substring(0,l):h).substring(t.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|u.charCodeAt(7))){case 203:if(u.charCodeAt(8)<111)break;case 115:h=h.replace(u,M+u)+";"+h;break;case 207:case 102:h=h.replace(u,M+(f>102?"inline-":"")+"box")+";"+h.replace(u,M+u)+";"+h.replace(u,D+u+"box")+";"+h}return h+";";case 938:if(45===h.charCodeAt(5))switch(h.charCodeAt(6)){case 105:return u=h.replace("-items",""),M+h+M+"box-"+u+D+"flex-"+u+h;case 115:return M+h+D+"flex-item-"+h.replace(T,"")+h;default:return M+h+D+"flex-line-pack"+h.replace("align-content","").replace(T,"")+h}break;case 973:case 989:if(45!==h.charCodeAt(3)||122===h.charCodeAt(4))break;case 931:case 953:if(!0===A.test(t))return 115===(u=t.substring(t.indexOf(":")+1)).charCodeAt(0)?Q(t.replace("stretch","fill-available"),e,n,r).replace(":fill-available",":stretch"):h.replace(u,M+u)+h.replace(u,O+u.replace("fill-",""))+h;break;case 962:if(h=M+h+(102===h.charCodeAt(5)?D+h:"")+h,n+r===211&&105===h.charCodeAt(13)&&h.indexOf("transform",10)>0)return h.substring(0,h.indexOf(";",27)+1).replace(o,"$1-webkit-$2")+h}return h}function tt(t,e){var n=t.indexOf(1===e?":":"{"),r=t.substring(0,3!==e?n:10),i=t.substring(n+1,t.length-1);return W(2!==e?r:r.replace(C,"$1"),i,e)}function et(t,e){var n=Q(e,e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2));return n!==e+";"?n.replace(E," or ($1)").substring(4):"("+e+")"}function nt(t,e,n,r,i,a,o,s,c,u){for(var l,h=0,f=e;h<$;++h)switch(l=U[h].call(at,t,f,n,r,i,a,o,s,c,u)){case void 0:case!1:case!0:case null:break;default:f=l}if(f!==e)return f}function rt(t,e,n,r){for(var i=e+1;i0&&(G=i.replace(d,91===a?"":"-")),a=1,1===F?X=i:q=i;var o,s=[X];$>0&&void 0!==(o=nt(-1,n,s,s,B,N,0,0,0,0))&&"string"==typeof o&&(n=o);var c=Z(z,s,n,0,0);return $>0&&void 0!==(o=nt(-2,c,s,s,B,N,c.length,0,0,0))&&"string"!=typeof(c=o)&&(a=0),G="",X="",q="",L=0,B=1,N=1,j*a==0?c:function(t){return t.replace(r,"").replace(v,"").replace(m,"$1").replace(b,"$1").replace(x," ")}(c)}return at.use=function t(e){switch(e){case void 0:case null:$=U.length=0;break;default:if("function"==typeof e)U[$++]=e;else if("object"==typeof e)for(var n=0,r=e.length;n=255?255:t<0?0:t},g:function(t){return t>=255?255:t<0?0:t},b:function(t){return t>=255?255:t<0?0:t},h:function(t){return t%360},s:function(t){return t>=100?100:t<0?0:t},l:function(t){return t>=100?100:t<0?0:t},a:function(t){return t>=1?1:t<0?0:t}},toLinear:function(t){var e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:function(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t},hsl2rgb:function(t,e){var n=t.h,i=t.s,a=t.l;if(100===i)return 2.55*a;n/=360,i/=100;var o=(a/=100)<.5?a*(1+i):a+i-a*i,s=2*a-o;switch(e){case"r":return 255*r.hue2rgb(s,o,n+1/3);case"g":return 255*r.hue2rgb(s,o,n);case"b":return 255*r.hue2rgb(s,o,n-1/3)}},rgb2hsl:function(t,e){var n=t.r,r=t.g,i=t.b;n/=255,r/=255,i/=255;var a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if("l"===e)return 100*s;if(a===o)return 0;var c=a-o;if("s"===e)return 100*(s>.5?c/(2-a-o):c/(a+o));switch(a){case n:return 60*((r-i)/c+(r1?e:"0"+e},dec2hex:function(t){var e=Math.round(t).toString(16);return e.length>1?e:"0"+e}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(75),a=n(177),o=function(){function t(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a.default}return t.prototype.set=function(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.TYPE.ALL,this},t.prototype._ensureHSL=function(){void 0===this.data.h&&(this.data.h=r.default.channel.rgb2hsl(this.data,"h")),void 0===this.data.s&&(this.data.s=r.default.channel.rgb2hsl(this.data,"s")),void 0===this.data.l&&(this.data.l=r.default.channel.rgb2hsl(this.data,"l"))},t.prototype._ensureRGB=function(){void 0===this.data.r&&(this.data.r=r.default.channel.hsl2rgb(this.data,"r")),void 0===this.data.g&&(this.data.g=r.default.channel.hsl2rgb(this.data,"g")),void 0===this.data.b&&(this.data.b=r.default.channel.hsl2rgb(this.data,"b"))},Object.defineProperty(t.prototype,"r",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.r?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"r")):this.data.r},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.r=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"g",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.g?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"g")):this.data.g},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.g=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"b",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.b?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"b")):this.data.b},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.b=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"h",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.h?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"h")):this.data.h},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.h=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"s",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.s?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"s")):this.data.s},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.s=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"l",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.l?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"l")):this.data.l},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.l=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"a",{get:function(){return this.data.a},set:function(t){this.changed=!0,this.data.a=t},enumerable:!0,configurable:!0}),t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(75),i=function(){function t(){this.type=r.TYPE.ALL}return t.prototype.get=function(){return this.type},t.prototype.set=function(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t},t.prototype.reset=function(){this.type=r.TYPE.ALL},t.prototype.is=function(t){return this.type===t},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i={};e.DEC2HEX=i;for(var a=0;a<=255;a++)i[a]=r.default.unit.dec2hex(a)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:function(t){t=t.toLowerCase();var e=i.colors[t];if(e)return r.default.parse(e)},stringify:function(t){var e=r.default.stringify(t);for(var n in i.colors)if(i.colors[n]===e)return n}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:function(t){var e=t.charCodeAt(0);if(114===e||82===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5],h=n[6],f=n[7],d=n[8];return i.default.set({r:r.default.channel.clamp.r(s?2.55*parseFloat(o):parseFloat(o)),g:r.default.channel.clamp.g(u?2.55*parseFloat(c):parseFloat(c)),b:r.default.channel.clamp.b(h?2.55*parseFloat(l):parseFloat(l)),a:f?r.default.channel.clamp.a(d?parseFloat(f)/100:parseFloat(f)):1},t)}}},stringify:function(t){return t.a<1?"rgba("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+", "+r.default.lang.round(t.a)+")":"rgb("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+")"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:function(t){var e=t.match(a.hueRe);if(e){var n=e[1];switch(e[2]){case"grad":return r.default.channel.clamp.h(.9*parseFloat(n));case"rad":return r.default.channel.clamp.h(180*parseFloat(n)/Math.PI);case"turn":return r.default.channel.clamp.h(360*parseFloat(n))}}return r.default.channel.clamp.h(parseFloat(t))},parse:function(t){var e=t.charCodeAt(0);if(104===e||72===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5];return i.default.set({h:a._hue2deg(o),s:r.default.channel.clamp.s(parseFloat(s)),l:r.default.channel.clamp.l(parseFloat(c)),a:u?r.default.channel.clamp.a(l?parseFloat(u)/100:parseFloat(u)):1},t)}}},stringify:function(t){return t.a<1?"hsla("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%, "+t.a+")":"hsl("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%)"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"r")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"g")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"b")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"h")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"s")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"l")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(103);e.default=function(t){return!r.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15);e.default=function(t){try{return r.default.parse(t),!0}catch(t){return!1}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t){return r.default(t,"h",180)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(52);e.default=function(t){return r.default(t,{s:0})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(107);e.default=function(t,e){void 0===e&&(e=100);var n=r.default.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,i.default(n,t,e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15),a=n(106);e.default=function(t,e){var n,o,s,c=i.default.parse(t),u={};for(var l in e)u[l]=(n=c[l],o=e[l],s=r.default.channel.max[l],o>0?(s-n)*o/100:n*o/100);return a.default(t,u)}},function(t,e,n){t.exports={Graph:n(76),version:n(300)}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,4)}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(55),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():i.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(55);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(55);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(55);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(54);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(54),i=n(77),a=n(78);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(37),i=n(214),a=n(11),o=n(110),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,h=u.hasOwnProperty,f=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||i(t))&&(r(t)?f:s).test(o(t))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(38),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,i=n(215),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},function(t,e,n){var r=n(16)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(218),i=n(54),a=n(77);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(t,e,n){var r=n(219),i=n(220),a=n(221),o=n(222),s=n(223);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(131),i=n(292),a=n(296),o=n(132),s=n(297),c=n(90);t.exports=function(t,e,n){var u=-1,l=i,h=t.length,f=!0,d=[],p=d;if(n)f=!1,l=a;else if(h>=200){var g=e?null:s(t);if(g)return c(g);f=!1,l=o,p=new r}else p=e?[]:d;t:for(;++u-1}},function(t,e,n){var r=n(145),i=n(294),a=n(295);t.exports=function(t,e,n){return e==e?a(t,e,n):r(t,i,n)}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r1||1===e.length&&t.hasEdge(e[0],e[0])}))}},function(t,e,n){var r=n(10);t.exports=function(t,e,n){return function(t,e,n){var r={},i=t.nodes();return i.forEach((function(t){r[t]={},r[t][t]={distance:0},i.forEach((function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})})),n(t).forEach((function(n){var i=n.v===t?n.w:n.v,a=e(n);r[t][i]={distance:a,predecessor:t}}))})),i.forEach((function(t){var e=r[t];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[t],i=e[n],o=a[n],s=r.distance+i.distance;s0;){if(n=c.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(n).forEach(u)}return o}},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e,n){"use strict";var r=n(4),i=n(345),a=n(348),o=n(349),s=n(8).normalizeRanks,c=n(351),u=n(8).removeEmptyRanks,l=n(352),h=n(353),f=n(354),d=n(355),p=n(364),g=n(8),y=n(17).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?g.time:g.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new y({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},m,T(n,v),r.pick(n,b))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(T(i,x),_)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,T(i,k),r.pick(i,E)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){l.run(t)})),e(" rank",(function(){o(g.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};g.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){u(t)})),e(" nestingGraph.cleanup",(function(){l.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){d(t)})),e(" insertSelfEdges",(function(){!function(t){var e=g.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){g.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){f.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){f.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function u(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){u(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&u(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(g.intersectRect(a,n)),i.points.push(g.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var v=["nodesep","edgesep","ranksep","marginx","marginy"],m={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],x=["width","height"],_={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function T(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,5)}},function(t,e,n){var r=n(315)(n(316));t.exports=r},function(t,e,n){var r=n(25),i=n(24),a=n(30);t.exports=function(t){return function(e,n,o){var s=Object(e);if(!i(e)){var c=r(n,3);e=a(e),n=function(t){return c(s[t],t,s)}}var u=t(e,n,o);return u>-1?s[c?e[u]:u]:void 0}}},function(t,e,n){var r=n(145),i=n(25),a=n(317),o=Math.max;t.exports=function(t,e,n){var s=null==t?0:t.length;if(!s)return-1;var c=null==n?0:a(n);return c<0&&(c=o(s+c,0)),r(t,i(e,3),c)}},function(t,e,n){var r=n(155);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(11),i=n(42),a=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(r(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(a,"");var n=s.test(t);return n||c.test(t)?u(t.slice(2),n?2:8):o.test(t)?NaN:+t}},function(t,e,n){var r=n(89),i=n(127),a=n(40);t.exports=function(t,e){return null==t?t:r(t,i(e),a)}},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){var r=n(59),i=n(88),a=n(25);t.exports=function(t,e){var n={};return e=a(e,3),i(t,(function(t,i,a){r(n,i,e(t,i,a))})),n}},function(t,e,n){var r=n(95),i=n(323),a=n(35);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},function(t,e){t.exports=function(t,e){return t>e}},function(t,e,n){var r=n(325),i=n(328)((function(t,e,n){r(t,e,n)}));t.exports=i},function(t,e,n){var r=n(53),i=n(157),a=n(89),o=n(326),s=n(11),c=n(40),u=n(159);t.exports=function t(e,n,l,h,f){e!==n&&a(n,(function(a,c){if(f||(f=new r),s(a))o(e,n,c,l,t,h,f);else{var d=h?h(u(e,c),a,c+"",e,n,f):void 0;void 0===d&&(d=a),i(e,c,d)}}),c)}},function(t,e,n){var r=n(157),i=n(114),a=n(123),o=n(115),s=n(124),c=n(47),u=n(5),l=n(146),h=n(39),f=n(37),d=n(11),p=n(158),g=n(48),y=n(159),v=n(327);t.exports=function(t,e,n,m,b,x,_){var k=y(t,n),w=y(e,n),E=_.get(w);if(E)r(t,n,E);else{var T=x?x(k,w,n+"",t,e,_):void 0,C=void 0===T;if(C){var A=u(w),S=!A&&h(w),M=!A&&!S&&g(w);T=w,A||S||M?u(k)?T=k:l(k)?T=o(k):S?(C=!1,T=i(w,!0)):M?(C=!1,T=a(w,!0)):T=[]:p(w)||c(w)?(T=k,c(k)?T=v(k):d(k)&&!f(k)||(T=s(w))):C=!1}C&&(_.set(w,T),b(T,w,m,x,_),_.delete(w)),r(t,n,T)}}},function(t,e,n){var r=n(46),i=n(40);t.exports=function(t){return r(t,i(t))}},function(t,e,n){var r=n(67),i=n(68);t.exports=function(t){return r((function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r1&&o(t,e[0],e[1])?e=[]:n>2&&o(e[0],e[1],e[2])&&(e=[e[0]]),i(t,r(e,1),[])}));t.exports=s},function(t,e,n){var r=n(66),i=n(25),a=n(141),o=n(340),s=n(61),c=n(341),u=n(35);t.exports=function(t,e,n){var l=-1;e=r(e.length?e:[u],s(i));var h=a(t,(function(t,n,i){return{criteria:r(e,(function(e){return e(t)})),index:++l,value:t}}));return o(h,(function(t,e){return c(t,e,n)}))}},function(t,e){t.exports=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}},function(t,e,n){var r=n(342);t.exports=function(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,s=a.length,c=n.length;++i=c?u:u*("desc"==n[i]?-1:1)}return t.index-e.index}},function(t,e,n){var r=n(42);t.exports=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,a=t==t,o=r(t),s=void 0!==e,c=null===e,u=e==e,l=r(e);if(!c&&!l&&!o&&t>e||o&&s&&u&&!c&&!l||i&&s&&u||!n&&u||!a)return 1;if(!i&&!o&&!l&&t0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(u,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},function(t,e){function n(){var t={};t._next=t._prev=t,this._sentinel=t}function r(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function i(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=n,n.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return r(e),e},n.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&r(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},n.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,i)),n=n._prev;return"["+t.join(", ")+"]"}},function(t,e,n){"use strict";var r=n(4),i=n(8);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,u=t.node(c).rank,l=e.name,h=t.edge(e),f=h.labelRank;if(u===s+1)return;for(t.removeEdge(e),a=0,++s;sc.lim&&(u=c,l=!0);var h=r.filter(e.edges(),(function(e){return l===m(t,t.node(e.v),u)&&l!==m(t,t.node(e.w),u)}));return r.minBy(h,(function(t){return a(e,t)}))}function v(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),d(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function m(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=l,l.initLowLimValues=d,l.initCutValues=h,l.calcCutValue=f,l.leaveEdge=g,l.enterEdge=y,l.exchangeEdges=v},function(t,e,n){var r=n(4);t.exports=function(t){var e=function(t){var e={},n=0;function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}}return r.forEach(t.children(),i),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),u=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||u>e[i].lim));a=i,i=r;for(;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,u=o[c],l=!0;n!==i.w;){if(r=t.node(n),l){for(;(u=o[c])!==s&&t.node(u).maxRank=2),s=l.buildLayerMatrix(t);var y=a(t,s);y0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;u+=t.weight*n}))),u}t.exports=function(t,e){for(var n=0,r=1;r=t.barycenter)&&function(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},function(t,e,n){var r=n(4),i=n(8);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n=i.partition(t,(function(t){return r.has(t,"barycenter")})),o=n.lhs,s=r.sortBy(n.rhs,(function(t){return-t.i})),c=[],u=0,l=0,h=0;o.sort((f=!!e,function(t,e){return t.barycentere.barycenter?1:f?e.i-t.i:t.i-e.i})),h=a(c,s,h),r.forEach(o,(function(t){h+=t.vs.length,c.push(t.vs),u+=t.barycenter*t.weight,l+=t.weight,h=a(c,s,h)}));var f;var d={vs:r.flatten(c,!0)};l&&(d.barycenter=u/l,d.weight=l);return d}},function(t,e,n){var r=n(4),i=n(17).Graph;t.exports=function(t,e,n){var a=function(t){var e;for(;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},function(t,e,n){var r=n(4);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},function(t,e,n){"use strict";var r=n(4),i=n(8),a=n(365).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},function(t,e,n){"use strict";var r=n(4),i=n(17).Graph,a=n(8);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,u=r.last(i);return r.forEach(i,(function(e,l){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),f=h?t.node(h).order:s;(h||e===u)&&(r.forEach(i.slice(o,l+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(os)&&c(n,e,u)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var u=t.predecessors(r);u.length&&(a=t.node(u[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function u(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function l(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length)for(var l=((c=r.sortBy(c,(function(t){return s[t]}))).length-1)/2,h=Math.floor(l),f=Math.ceil(l);h<=f;++h){var d=c[h];o[t]===t&&e0}t.exports=function(t,e,r,i){var a,o,s,c,u,l,h,f,d,p,g,y,v;if(a=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,d=a*r.x+s*r.y+u,p=a*i.x+s*i.y+u,0!==d&&0!==p&&n(d,p))return;if(o=i.y-r.y,c=r.x-i.x,l=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+l,f=o*e.x+c*e.y+l,0!==h&&0!==f&&n(h,f))return;if(0===(g=a*c-o*s))return;return y=Math.abs(g/2),{x:(v=s*l-c*u)<0?(v-y)/g:(v+y)/g,y:(v=o*u-a*l)<0?(v-y)/g:(v+y)/g}}},function(t,e,n){var r=n(43),i=n(31),a=n(153).layout;t.exports=function(){var t=n(371),e=n(374),i=n(375),u=n(376),l=n(377),h=n(378),f=n(379),d=n(380),p=n(381),g=function(n,g){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(g);var y=c(n,"output"),v=c(y,"clusters"),m=c(y,"edgePaths"),b=i(c(y,"edgeLabels"),g),x=t(c(y,"nodes"),g,d);a(g),l(x,g),h(b,g),u(m,g,p);var _=e(v,g);f(_,g),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(g)};return g.createNodes=function(e){return arguments.length?(t=e,g):t},g.createClusters=function(t){return arguments.length?(e=t,g):e},g.createEdgeLabels=function(t){return arguments.length?(i=t,g):i},g.createEdgePaths=function(t){return arguments.length?(u=t,g):u},g.shapes=function(t){return arguments.length?(d=t,g):d},g.arrows=function(t){return arguments.length?(p=t,g):p},g};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},function(t,e,n){"use strict";var r=n(43),i=n(97),a=n(12),o=n(31);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),u=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);u.exit().remove(),u.enter().append("g").attr("class","node").style("opacity",0),(u=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var u=c.append("g").attr("class","label"),l=i(u,s),h=n[s.shape],f=r.pick(l.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&u.attr("id",s.labelId),r.has(s,"width")&&(f.width=s.width),r.has(s,"height")&&(f.height=s.height),f.width+=s.paddingLeft+s.paddingRight,f.height+=s.paddingTop+s.paddingBottom,u.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var d=o.select(this);d.select(".label-container").remove();var p=h(d,f,s).classed("label-container",!0);a.applyStyle(p,s.style);var g=p.node().getBBox();s.width=g.width,s.height=g.height})),s=u.exit?u.exit():u.selectAll(null);return a.applyTransition(s,e).style("opacity",0).remove(),u}},function(t,e,n){var r=n(12);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==s[t]&&(t=s[t])),c.trace=function(){},c.debug=function(){},c.info=function(){},c.warn=function(){},c.error=function(){},c.fatal=function(){},t<=s.fatal&&(c.fatal=console.error?console.error.bind(console,l("FATAL"),"color: orange"):console.log.bind(console,"",l("FATAL"))),t<=s.error&&(c.error=console.error?console.error.bind(console,l("ERROR"),"color: orange"):console.log.bind(console,"",l("ERROR"))),t<=s.warn&&(c.warn=console.warn?console.warn.bind(console,l("WARN"),"color: orange"):console.log.bind(console,"",l("WARN"))),t<=s.info&&(c.info=console.info?console.info.bind(console,l("INFO"),"color: lightblue"):console.log.bind(console,"",l("INFO"))),t<=s.debug&&(c.debug=console.debug?console.debug.bind(console,l("DEBUG"),"color: lightgreen"):console.log.bind(console,"",l("DEBUG")))},l=function(t){var e=o()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")},h=n(169),f=n.n(h),d=n(0),p=n(44),g=n(70),y=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}return e},v=//gi,m=function(t){return t.replace(v,"#br#")},b=function(t){return t.replace(/#br#/g,"
")},x={getRows:function(t){if(!t)return 1;var e=m(t);return(e=e.replace(/\\n/g,"#br#")).split("#br#")},sanitizeText:function(t,e){var n=t,r=!0;if(!e.flowchart||!1!==e.flowchart.htmlLabels&&"false"!==e.flowchart.htmlLabels||(r=!1),r){var i=e.securityLevel;"antiscript"===i?n=y(n):"loose"!==i&&(n=(n=(n=m(n)).replace(//g,">")).replace(/=/g,"="),n=b(n))}return n},hasBreaks:function(t){return//gi.test(t)},splitBreaks:function(t){return t.split(//gi)},lineBreakRegex:v,removeScript:y};function _(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(C.source,")(?=[}][%]{2}).*\n"),"ig");t=t.trim().replace(n,"").replace(/'/gm,'"'),c.debug("Detecting diagram directive".concat(null!==e?" type:"+e:""," based on the text:").concat(t));for(var r,i=[];null!==(r=T.exec(t));)if(r.index===T.lastIndex&&T.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){var a=r[1]?r[1]:r[2],o=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;i.push({type:a,args:o})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return c.error("ERROR: ".concat(n.message," - Unable to parse directive").concat(null!==e?" type:"+e:""," based on the text:").concat(t)),{type:null,args:null}}},M=function(t){return t=t.replace(T,"").replace(A,"\n"),c.debug("Detecting diagram type based on the text "+t),t.match(/^\s*sequenceDiagram/)?"sequence":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram-v2/)?"classDiagram":t.match(/^\s*classDiagram/)?"class":t.match(/^\s*stateDiagram-v2/)?"stateDiagram":t.match(/^\s*stateDiagram/)?"state":t.match(/^\s*gitGraph/)?"git":t.match(/^\s*flowchart/)?"flowchart-v2":t.match(/^\s*info/)?"info":t.match(/^\s*pie/)?"pie":t.match(/^\s*erDiagram/)?"er":t.match(/^\s*journey/)?"journey":"flowchart"},O=function(t,e){var n={};return function(){for(var r=arguments.length,i=new Array(r),a=0;a"},n),x.lineBreakRegex.test(t))return t;var r=t.split(" "),i=[],a="";return r.forEach((function(t,o){var s=z("".concat(t," "),n),c=z(a,n);if(s>e){var u=Y(t,e,"-",n),l=u.hyphenatedStrings,h=u.remainingWord;i.push.apply(i,[a].concat(w(l))),a=h}else c+s>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");o+1===r.length&&i.push(a)})),i.filter((function(t){return""!==t})).join(n.joinWith)}),(function(t,e,n){return"".concat(t,"-").concat(e,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),Y=O((function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var i=t.split(""),a=[],o="";return i.forEach((function(t,s){var c="".concat(o).concat(t);if(z(c,r)>=e){var u=s+1,l=i.length===u,h="".concat(c).concat(n);a.push(l?c:h),o=""}else o=c})),{hyphenatedStrings:a,remainingWord:o}}),(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(t,"-").concat(e,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),z=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),U(t,e).width},U=O((function(t,e){var n=e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),r=n.fontSize,i=n.fontFamily,a=n.fontWeight;if(!t)return{width:0,height:0};var o=["sans-serif",i],s=t.split(x.lineBreakRegex),c=[],u=Object(d.select)("body");if(!u.remove)return{width:0,height:0,lineHeight:0};for(var l=u.append("svg"),h=0,f=o;hc[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),(function(t,e){return"".concat(t,"-").concat(e.fontSize,"-").concat(e.fontWeight,"-").concat(e.fontFamily)})),$=function(t,e,n){var r=new Map;return r.set("height",t),n?(r.set("width","100%"),r.set("style","max-width: ".concat(e,"px;"))):r.set("width",e),r},W=function(t,e,n,r){!function(t,e){var n=!0,r=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;t.attr(s[0],s[1])}}catch(t){r=!0,i=t}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}(t,$(e,n,r))},H={assignWithDepth:I,wrapLabel:R,calculateTextHeight:function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),U(t,e).height},calculateTextWidth:z,calculateTextDimensions:U,calculateSvgSizeAttrs:$,configureSvgSize:W,detectInit:function(t){var e=S(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(e)){var r=e.map((function(t){return t.args}));n=I(n,w(r))}else n=e.args;if(n){var i=M(t);["config"].forEach((function(t){void 0!==n[t]&&("flowchart-v2"===i&&(i="flowchart"),n[i]=n[t],delete n[t])}))}return n},detectDirective:S,detectType:M,isSubstringInArray:function(t,e){for(var n=0;n=1&&(i={x:t.x,y:t.y}),a>0&&a<1&&(i={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),i}(t)},calcCardinalityPosition:function(t,e,n){var r;c.info("our points",e),e[0]!==n&&(e=e.reverse()),e.forEach((function(t){N(t,r),r=t}));var i,a=25;r=void 0,e.forEach((function(t){if(r&&!i){var e=N(t,r);if(e=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var o=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),u={x:0,y:0};return u.x=Math.sin(s)*o+(e[0].x+i.x)/2,u.y=-Math.cos(s)*o+(e[0].y+i.y)/2,u},calcTerminalLabelPosition:function(t,e,n){var r,i=JSON.parse(JSON.stringify(n));c.info("our points",i),"start_left"!==e&&"start_right"!==e&&(i=i.reverse()),i.forEach((function(t){N(t,r),r=t}));var a,o=25;r=void 0,i.forEach((function(t){if(r&&!a){var e=N(t,r);if(e=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var s=10,u=Math.atan2(i[0].y-a.y,i[0].x-a.x),l={x:0,y:0};return l.x=Math.sin(u)*s+(i[0].x+a.x)/2,l.y=-Math.cos(u)*s+(i[0].y+a.y)/2,"start_left"===e&&(l.x=Math.sin(u+Math.PI)*s+(i[0].x+a.x)/2,l.y=-Math.cos(u+Math.PI)*s+(i[0].y+a.y)/2),"end_right"===e&&(l.x=Math.sin(u-Math.PI)*s+(i[0].x+a.x)/2-5,l.y=-Math.cos(u-Math.PI)*s+(i[0].y+a.y)/2-5),"end_left"===e&&(l.x=Math.sin(u)*s+(i[0].x+a.x)/2-5,l.y=-Math.cos(u)*s+(i[0].y+a.y)/2-5),l},formatUrl:function(t,e){var n=t.trim();if(n)return"loose"!==e.securityLevel?Object(g.sanitizeUrl)(n):n},getStylesFromArray:B,generateId:F,random:P,memoize:O,runFunc:function(t){for(var e,n=t.split("."),r=n.length-1,i=n[r],a=window,o=0;o1?s-1:0),u=1;u=0&&(n=!0)})),n},qt=function(t,e){var n=[];return t.nodes.forEach((function(r,i){Gt(e,r)||n.push(t.nodes[i])})),{nodes:n}},Xt={parseDirective:function(t,e,n){Go.parseDirective(this,t,e,n)},defaultConfig:function(){return gt.flowchart},addVertex:function(t,e,n,r,i){var a,o=t;void 0!==o&&0!==o.trim().length&&(void 0===Dt[o]&&(Dt[o]={id:o,domId:"flowchart-"+o+"-"+Mt,styles:[],classes:[]}),Mt++,void 0!==e?(Ot=_t(),'"'===(a=x.sanitizeText(e.trim(),Ot))[0]&&'"'===a[a.length-1]&&(a=a.substring(1,a.length-1)),Dt[o].text=a):void 0===Dt[o].text&&(Dt[o].text=t),void 0!==n&&(Dt[o].type=n),null!=r&&r.forEach((function(t){Dt[o].styles.push(t)})),null!=i&&i.forEach((function(t){Dt[o].classes.push(t)})))},lookUpDomId:Yt,addLink:function(t,e,n,r){var i,a;for(i=0;i/)&&(At="LR"),At.match(/.*v/)&&(At="TB")},setClass:Ut,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(Pt["gen-1"===St?Yt(t):t]=x.sanitizeText(e,Ot))}))},getTooltip:function(t){return Pt[t]},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){var r=Yt(t);if("loose"===_t().securityLevel&&void 0!==e){var i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var a=0;a=0)&&s.push(t))})),"gen-1"===St){c.warn("LOOKING UP");for(var l=0;l0&&function t(e,n){var r=Lt[n].nodes;if(!((Ht+=1)>2e3)){if(Vt[Ht]=n,Lt[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i=0){var s=t(e,o);if(s.result)return{result:!0,count:a+s.count};a+=s.count}i+=1}return{result:!1,count:a}}}("none",Lt.length-1)},getSubGraphs:function(){return Lt},destructLink:function(t,e){var n,r=function(t){var e=t.trim(),n=e.slice(0,-1),r="arrow_open";switch(e.slice(-1)){case"x":r="arrow_cross","x"===e[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===e[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===e[0]&&(r="double_"+r,n=n.slice(1))}var i="normal",a=n.length-1;"="===n[0]&&(i="thick");var o=function(t,e){for(var n=e.length,r=0,i=0;in.height/2-a)){var o=a*a*(1-r*r/(i*i));0!=o&&(o=Math.sqrt(o)),o=a-o,t.y-n.y>0&&(o=-o),e.y+=o}return e},c}function de(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("transform","translate("+-e/2+","+n/2+")")}var pe={addToRender:function(t){t.shapes().question=ne,t.shapes().hexagon=re,t.shapes().stadium=le,t.shapes().subroutine=he,t.shapes().cylinder=fe,t.shapes().rect_left_inv_arrow=ie,t.shapes().lean_right=ae,t.shapes().lean_left=oe,t.shapes().trapezoid=se,t.shapes().inv_trapezoid=ce,t.shapes().rect_right_inv_arrow=ue},addToRenderV2:function(t){t({question:ne}),t({hexagon:re}),t({stadium:le}),t({subroutine:he}),t({cylinder:fe}),t({rect_left_inv_arrow:ie}),t({lean_right:ae}),t({lean_left:oe}),t({trapezoid:se}),t({inv_trapezoid:ce}),t({rect_right_inv_arrow:ue})}},ge={},ye=function(t,e,n){var r=Object(d.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var o,s=B(i.styles),u=void 0!==i.text?i.text:i.id;if(_t().flowchart.htmlLabels){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=ee()(r,l).node()).parentNode.removeChild(o)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var f=u.split(x.lineBreakRegex),d=0;d').concat(a.text.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")})),"
")):(u.labelType="text",u.label=a.text.replace(x.lineBreakRegex,"\n"),void 0===a.style&&(u.style=u.style||"stroke: #333; stroke-width: 1.5px;fill:none"),u.labelStyle=u.labelStyle.replace("color:","fill:"))),u.id=o,u.class=s+" "+c,u.minlen=a.length||1,e.setEdge(Xt.lookUpDomId(a.start),Xt.lookUpDomId(a.end),u,i)}))},me=function(t){for(var e=Object.keys(t),n=0;n=0;h--)i=l[h],Xt.addVertex(i.id,i.title,"group",void 0,i.classes);var f=Xt.getVertices();c.warn("Get vertices",f);var p=Xt.getEdges(),g=0;for(g=l.length-1;g>=0;g--){i=l[g],Object(d.selectAll)("cluster").append("text");for(var y=0;y"),c.info("vertexText"+i),function(t){var e,n,r=Object(d.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),i=r.append("xhtml:div"),a=t.label,o=t.isNode?"nodeLabel":"edgeLabel";return i.html(''+a+""),e=i,(n=t.labelStyle)&&e.attr("style",n),i.style("display","inline-block"),i.style("white-space","nowrap"),i.attr("xmlns","http://www.w3.org/1999/xhtml"),r.node()}({isNode:r,label:i.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")})),labelStyle:e.replace("fill:","color:")});var a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));var o=[];o="string"==typeof i?i.split(/\\n|\n|/gi):Array.isArray(i)?i:[];for(var s=0;s0)t(a,n,r,i);else{var o=n.node(a);c.info("cp ",a," to ",i," with parent ",e),r.setNode(a,o),i!==n.parent(a)&&(c.warn("Setting parent",a,n.parent(a)),r.setParent(a,n.parent(a))),e!==i&&a!==e?(c.debug("Setting parent",a,e),r.setParent(a,e)):(c.info("In copy ",e,"root",i,"data",n.node(e),i),c.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==i,"node!==clusterId",a!==e));var s=n.edges(a);c.debug("Copying Edges",s),s.forEach((function(t){c.info("Edge",t);var a=n.edge(t.v,t.w,t.name);c.info("Edge data",a,i);try{!function(t,e){return c.info("Decendants of ",e," is ",Oe[e]),c.info("Edge is ",t),t.v!==e&&(t.w!==e&&(Oe[e]?(c.info("Here "),Oe[e].indexOf(t.v)>=0||(!!Ne(t.v,e)||(!!Ne(t.w,e)||Oe[e].indexOf(t.w)>=0))):(c.debug("Tilt, ",e,",not in decendants"),!1)))}(t,i)?c.info("Skipping copy of edge ",t.v,"--\x3e",t.w," rootId: ",i," clusterId:",e):(c.info("Copying as ",t.v,t.w,a,t.name),r.setEdge(t.v,t.w,a,t.name),c.info("newGraph edges ",r.edges(),r.edge(r.edges()[0])))}catch(t){c.error(t)}}))}c.debug("Removing node",a),n.removeNode(a)}))},Le=function t(e,n){c.trace("Searching",e);var r=n.children(e);if(c.trace("Searching children of id ",e,r),r.length<1)return c.trace("This is a valid node",e),e;for(var i=0;i ",a),a}},Fe=function(t){return Me[t]&&Me[t].externalConnections&&Me[t]?Me[t].id:t},Pe=function(t,e){!t||e>10?c.debug("Opting out, no graph "):(c.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(c.warn("Cluster identified",e," Replacement id in edges: ",Le(e,t)),Oe[e]=function t(e,n){for(var r=n.children(e),i=[].concat(r),a=0;a0?(c.debug("Cluster identified",e,Oe),r.forEach((function(t){t.v!==e&&t.w!==e&&(Ne(t.v,e)^Ne(t.w,e)&&(c.warn("Edge: ",t," leaves cluster ",e),c.warn("Decendants of XXX ",e,": ",Oe[e]),Me[e].externalConnections=!0))}))):c.debug("Not a cluster ",e,Oe)})),t.edges().forEach((function(e){var n=t.edge(e);c.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),c.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));var r=e.v,i=e.w;c.warn("Fix XXX",Me,"ids:",e.v,e.w,"Translateing: ",Me[e.v]," --- ",Me[e.w]),(Me[e.v]||Me[e.w])&&(c.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=Fe(e.v),i=Fe(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),c.warn("Fix Replacing with XXX",r,i,e.name),t.setEdge(r,i,n,e.name))})),c.warn("Adjusted Graph",G.a.json.write(t)),Ie(t,0),c.trace(Me))},Ie=function t(e,n){if(c.warn("extractor - ",n,G.a.json.write(e),e.children("D")),n>10)c.error("Bailing out");else{for(var r=e.nodes(),i=!1,a=0;a0}if(i){c.debug("Nodes = ",r,n);for(var u=0;u0){c.warn("Cluster without external connections, without a parent and with children",l,n);var h=e.graph(),f=new G.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TB"===h.rankdir?"LR":"TB",nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));c.warn("Old graph before copy",G.a.json.write(e)),Be(l,e,f,l),e.setNode(l,{clusterNode:!0,id:l,clusterData:Me[l].clusterData,labelText:Me[l].labelText,graph:f}),c.warn("New graph after copy node: (",l,")",G.a.json.write(f)),c.debug("Old graph after copy",G.a.json.write(e))}else c.warn("Cluster ** ",l," **not meeting the criteria !externalConnections:",!Me[l].externalConnections," no parent: ",!e.parent(l)," children ",e.children(l)&&e.children(l).length>0,e.children("D"),n),c.debug(Me);else c.debug("Not a cluster",l,n)}r=e.nodes(),c.warn("New list of nodes",r);for(var d=0;d0}var $e=function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,g,y;if(i=e.y-t.y,o=t.x-e.x,c=e.x*t.y-t.x*e.y,f=i*n.x+o*n.y+c,d=i*r.x+o*r.y+c,!(0!==f&&0!==d&&Ue(f,d)||(a=r.y-n.y,s=n.x-r.x,u=r.x*n.y-n.x*r.y,l=a*t.x+s*t.y+u,h=a*e.x+s*e.y+u,0!==l&&0!==h&&Ue(l,h)||0==(p=i*s-a*o))))return g=Math.abs(p/2),{x:(y=o*u-s*c)<0?(y-g)/p:(y+g)/p,y:(y=a*c-i*u)<0?(y-g)/p:(y+g)/p}},We=function(t,e,n){var r=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)})):(o=Math.min(o,e.x),s=Math.min(s,e.y));for(var c=r-t.width/2-o,u=i-t.height/2-s,l=0;l1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}},Ve={node:n.n(Re).a,circle:ze,ellipse:Ye,polygon:We,rect:He},Ge=function(t,e){var n=Ce(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;c.info("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Ae(e,o),e.intersect=function(t){return Ve.rect(e,t)},r};function qe(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e0){var r=t.split("~");n=r[0],e=r[1]}return{className:n,type:e}},tn=function(t){var e=Qe(t);void 0===Ze[e.className]&&(Ze[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:"classid-"+e.className+"-"+Je},Je++)},en=function(t){for(var e=Object.keys(Ze),n=0;n>")?r.annotations.push(i.substring(2,i.length-2)):i.indexOf(")")>0?r.methods.push(i):i&&r.members.push(i)}},rn=function(t,e){t.split(",").forEach((function(t){var n=t;t[0].match(/\d/)&&(n="classid-"+n),void 0!==Ze[n]&&Ze[n].cssClasses.push(e)}))},an=function(t,e,n){var r=_t(),i=t,a=en(i);if("loose"===r.securityLevel&&void 0!==e&&void 0!==Ze[i]){var o=[];if("string"==typeof n){o=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var s=0;s1&&a>i&&a<=t.length){var o="",s="",c=t.substring(0,1);c.match(/\w/)?s=t.substring(0,i).trim():(c.match(/\+|-|~|#/)&&(o=c),s=t.substring(1,i).trim());var u=t.substring(i+1,a),l=t.substring(a+1,1);n=yn(l),e=o+s+"("+gn(u.trim())+")",a<"".length&&""!==(r=t.substring(a+2).trim())&&(r=" : "+gn(r))}else e=gn(t);return{displayText:e,cssStyle:n}},pn=function(t,e,n,r){var i=ln(e),a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},gn=function t(e){var n=e;return-1!=e.indexOf("~")?t(n=(n=n.replace("~","<")).replace("~",">")):n},yn=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},vn=function(t,e,n){c.info("Rendering class "+e);var r,i=e.id,a={id:i,label:e.id,width:0,height:0},o=t.append("g").attr("id",en(i)).attr("class","classGroup");r=e.link?o.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):o.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var s=!0;e.annotations.forEach((function(t){var e=r.append("tspan").text("«"+t+"»");s||e.attr("dy",n.textHeight),s=!1}));var u=e.id;void 0!==e.type&&""!==e.type&&(u+="<"+e.type+">");var l=r.append("tspan").text(u).attr("class","title");s||l.attr("dy",n.textHeight);var h=r.node().getBBox().height,f=o.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin/2).attr("y2",n.padding+h+n.dividerMargin/2),d=o.append("text").attr("x",n.padding).attr("y",h+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.members.forEach((function(t){pn(d,t,s,n),s=!1}));var p=d.node().getBBox(),g=o.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin+p.height).attr("y2",n.padding+h+n.dividerMargin+p.height),y=o.append("text").attr("x",n.padding).attr("y",h+2*n.dividerMargin+p.height+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.methods.forEach((function(t){pn(y,t,s,n),s=!1}));var v=o.node().getBBox(),m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));var b=o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",v.width+2*n.padding).attr("height",v.height+n.padding+.5*n.dividerMargin).attr("class",m).node().getBBox().width;return r.node().childNodes.forEach((function(t){t.setAttribute("x",(b-t.getBBox().width)/2)})),e.tooltip&&r.insert("title").text(e.tooltip),f.attr("x2",b),g.attr("x2",b),a.width=b,a.height=v.height+n.padding+.5*n.dividerMargin,a},mn=function(t,e,n,r){var i=function(t){switch(t){case on.AGGREGATION:return"aggregation";case on.EXTENSION:return"extension";case on.COMPOSITION:return"composition";case on.DEPENDENCY:return"dependency"}};e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var a,o,s=e.points,u=Object(d.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d.curveBasis),l=t.append("path").attr("d",u(s)).attr("id","edge"+un).attr("class","relation"),h="";r.arrowMarkerAbsolute&&(h=(h=(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&l.attr("class","relation dashed-line"),"none"!==n.relation.type1&&l.attr("marker-start","url("+h+"#"+i(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&l.attr("marker-end","url("+h+"#"+i(n.relation.type2)+"End)");var f,p,g,y,v=e.points.length,m=H.calcLabelPosition(e.points);if(a=m.x,o=m.y,v%2!=0&&v>1){var b=H.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),x=H.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[v-1]);c.debug("cardinality_1_point "+JSON.stringify(b)),c.debug("cardinality_2_point "+JSON.stringify(x)),f=b.x,p=b.y,g=x.x,y=x.y}if(void 0!==n.title){var _=t.append("g").attr("class","classLabel"),k=_.append("text").attr("class","label").attr("x",a).attr("y",o).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=k;var w=k.node().getBBox();_.insert("rect",":first-child").attr("class","box").attr("x",w.x-r.padding/2).attr("y",w.y-r.padding/2).attr("width",w.width+r.padding).attr("height",w.height+r.padding)}(c.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1)&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",f).attr("y",p).attr("fill","black").attr("font-size","6").text(n.relationTitle1);void 0!==n.relationTitle2&&"none"!==n.relationTitle2&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",g).attr("y",y).attr("fill","black").attr("font-size","6").text(n.relationTitle2);un++},bn=function(t,e,n){var r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;"LR"===n&&(i=10,a=70);var o=r.append("rect").style("stroke","black").style("fill","black").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return Ae(e,o),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return Ve.rect(e,t)},r},xn={question:function(t,e){var n=Ce(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding+(i.height+e.padding),o=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}];c.info("Question main (Circle)");var s=Se(r,a,a,o);return Ae(e,s),e.intersect=function(t){return c.warn("Intersect called"),Ve.polygon(e,o,t)},r},rect:function(t,e){var n=Ce(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;c.trace("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),Ae(e,o),e.intersect=function(t){return Ve.rect(e,t)},r},rectWithTitle:function(t,e){var n;n=e.classes?"node "+e.classes:"node default";var r=t.insert("g").attr("class",n).attr("id",e.domId||e.id),i=r.insert("rect",":first-child"),a=r.insert("line"),o=r.insert("g").attr("class","label"),s=e.labelText.flat();c.info("Label text",s[0]);var u,l=o.node().appendChild(Te(s[0],e.labelStyle,!0,!0));if(_t().flowchart.htmlLabels){var h=l.children[0],f=Object(d.select)(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}c.info("Text 2",s);var p=s.slice(1,s.length),g=l.getBBox(),y=o.node().appendChild(Te(p.join("
"),e.labelStyle,!0,!0));if(_t().flowchart.htmlLabels){var v=y.children[0],m=Object(d.select)(y);u=v.getBoundingClientRect(),m.attr("width",u.width),m.attr("height",u.height)}var b=e.padding/2;return Object(d.select)(y).attr("transform","translate( "+(u.width>g.width?0:(g.width-u.width)/2)+", "+(g.height+b+5)+")"),Object(d.select)(l).attr("transform","translate( "+(u.widthe.height/2-s)){var i=s*s*(1-r*r/(o*o));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},r},start:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Ae(e,r),e.intersect=function(t){return Ve.circle(e,7,t)},n},end:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Ae(e,i),e.intersect=function(t){return Ve.circle(e,7,t)},n},note:Ge,subroutine:function(t,e){var n=Ce(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=Se(r,a,o,[{x:0,y:0},{x:a,y:0},{x:a,y:-o},{x:0,y:-o},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-o},{x:-8,y:-o},{x:-8,y:0}]);return Ae(e,s),e.intersect=function(t){return Ve.polygon(e,t)},r},fork:bn,join:bn,class_box:function(t,e){var n,r=e.padding/2;n=e.classes?"node "+e.classes:"node default";var i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),o=i.insert("line"),s=i.insert("line"),c=0,u=4,l=i.insert("g").attr("class","label"),h=0,f=e.classData.annotations&&e.classData.annotations[0],p=e.classData.annotations[0]?"«"+e.classData.annotations[0]+"»":"",g=l.node().appendChild(Te(p,e.labelStyle,!0,!0)),y=g.getBBox();if(_t().flowchart.htmlLabels){var v=g.children[0],m=Object(d.select)(g);y=v.getBoundingClientRect(),m.attr("width",y.width),m.attr("height",y.height)}e.classData.annotations[0]&&(u+=y.height+4,c+=y.width);var b=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(b+="<"+e.classData.type+">");var x=l.node().appendChild(Te(b,e.labelStyle,!0,!0));Object(d.select)(x).attr("class","classTitle");var _=x.getBBox();if(_t().flowchart.htmlLabels){var k=x.children[0],w=Object(d.select)(x);_=k.getBoundingClientRect(),w.attr("width",_.width),w.attr("height",_.height)}u+=_.height+4,_.width>c&&(c=_.width);var E=[];e.classData.members.forEach((function(t){var n=ln(t).displayText,r=l.node().appendChild(Te(n,e.labelStyle,!0,!0)),i=r.getBBox();if(_t().flowchart.htmlLabels){var a=r.children[0],o=Object(d.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),u+=i.height+4,E.push(r)})),u+=8;var T=[];if(e.classData.methods.forEach((function(t){var n=ln(t).displayText,r=l.node().appendChild(Te(n,e.labelStyle,!0,!0)),i=r.getBBox();if(_t().flowchart.htmlLabels){var a=r.children[0],o=Object(d.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),u+=i.height+4,T.push(r)})),u+=8,f){var C=(c-y.width)/2;Object(d.select)(g).attr("transform","translate( "+(-1*c/2+C)+", "+-1*u/2+")"),h=y.height+4}var A=(c-_.width)/2;return Object(d.select)(x).attr("transform","translate( "+(-1*c/2+A)+", "+(-1*u/2+h)+")"),h+=_.height+4,o.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+h).attr("y2",-u/2-r+8+h),h+=8,E.forEach((function(t){Object(d.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+h+4)+")"),h+=_.height+4})),h+=8,s.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+h).attr("y2",-u/2-r+8+h),h+=8,T.forEach((function(t){Object(d.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+h)+")"),h+=_.height+4})),a.attr("class","outer title-state").attr("x",-c/2-r).attr("y",-u/2-r).attr("width",c+e.padding).attr("height",u+e.padding),Ae(e,a),e.intersect=function(t){return Ve.rect(e,t)},i}},_n={},kn=function(t){var e=_n[t.id];c.trace("Transforming node",t,"translate("+(t.x-t.width/2-5)+", "+(t.y-t.height/2-5)+")");t.clusterNode?e.attr("transform","translate("+(t.x-t.width/2-8)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")")},wn={rect:function(t,e){c.trace("Creating subgraph rect for ",e.id,e);var n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(Te(e.labelText,e.labelStyle,void 0,!0)),o=a.getBBox();if(_t().flowchart.htmlLabels){var s=a.children[0],u=Object(d.select)(a);o=s.getBoundingClientRect(),u.attr("width",o.width),u.attr("height",o.height)}var l=0*e.padding,h=l/2;c.trace("Data ",e,JSON.stringify(e)),r.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-h).attr("y",e.y-e.height/2-h).attr("width",e.width+l).attr("height",e.height+l),i.attr("transform","translate("+(e.x-o.width/2)+", "+(e.y-e.height/2+e.padding/3)+")");var f=r.node().getBBox();return e.width=f.width,e.height=f.height,e.intersect=function(t){return He(e,t)},n},roundedWithTitle:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),o=i.node().appendChild(Te(e.labelText,e.labelStyle,void 0,!0)),s=o.getBBox();if(_t().flowchart.htmlLabels){var c=o.children[0],u=Object(d.select)(o);s=c.getBoundingClientRect(),u.attr("width",s.width),u.attr("height",s.height)}s=o.getBBox();var l=0*e.padding,h=l/2;r.attr("class","outer").attr("x",e.x-e.width/2-h).attr("y",e.y-e.height/2-h).attr("width",e.width+l).attr("height",e.height+l),a.attr("class","inner").attr("x",e.x-e.width/2-h).attr("y",e.y-e.height/2-h+s.height-1).attr("width",e.width+l).attr("height",e.height+l-s.height-3),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2-e.padding/3+(_t().flowchart.htmlLabels?5:3))+")");var f=r.node().getBBox();return e.width=f.width,e.height=f.height,e.intersect=function(t){return He(e,t)},n},noteGroup:function(t,e){var n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return He(e,t)},n},divider:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return He(e,t)},n}},En={},Tn={},Cn={},An=function(t,e){var n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),o=t.width/2,s=t.height/2;return i>=o||a>=s},Sn=function(t,e,n){c.warn("intersection calc o:",e," i:",n,t);var r=t.x,i=t.y,a=Math.abs(r-n.x),o=t.width/2,s=n.xMath.abs(r-e.x)*u){var y=n.y0&&c.info("Recursive edges",n.edge(n.edges()[0]));var s=o.insert("g").attr("class","clusters"),u=o.insert("g").attr("class","edgePaths"),l=o.insert("g").attr("class","edgeLabels"),h=o.insert("g").attr("class","nodes");return n.nodes().forEach((function(e){var o=n.node(e);if(void 0!==i){var s=JSON.parse(JSON.stringify(i.clusterData));c.info("Setting data for cluster XXX (",e,") ",s,i),n.setNode(i.id,s),n.parent(e)||(c.warn("Setting parent",e,i.id),n.setParent(e,i.id,s))}if(c.info("(Insert) Node XXX"+e+": "+JSON.stringify(n.node(e))),o&&o.clusterNode){c.info("Cluster identified",e,o,n.node(e));var u=t(h,o.graph,r,n.node(e));Ae(o,u),function(t,e){_n[e.id]=t}(u,o),c.warn("Recursive render complete",u,o)}else n.children(e).length>0?(c.info("Cluster - the non recursive path XXX",e,o.id,o,n),c.info(Le(o.id,n)),Me[o.id]={id:Le(o.id,n),node:o}):(c.info("Node - the non recursive path",e,o.id,o),function(t,e,n){var r,i;e.link?(r=t.insert("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget||"_blank"),i=xn[e.shape](r,e,n)):r=i=xn[e.shape](t,e,n),e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),_n[e.id]=r,e.haveCallback&&_n[e.id].attr("class",_n[e.id].attr("class")+" clickable")}(h,n.node(e),a))})),n.edges().forEach((function(t){var e=n.edge(t.v,t.w,t.name);c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),c.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(n.edge(t))),c.info("Fix",Me,"ids:",t.v,t.w,"Translateing: ",Me[t.v],Me[t.w]),function(t,e){var n=Te(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);var a=n.getBBox();if(_t().flowchart.htmlLabels){var o=n.children[0],s=Object(d.select)(n);a=o.getBoundingClientRect(),s.attr("width",a.width),s.attr("height",a.height)}if(i.attr("transform","translate("+-a.width/2+", "+-a.height/2+")"),Tn[e.id]=r,e.width=a.width,e.height=a.height,e.startLabelLeft){var c=Te(e.startLabelLeft,e.labelStyle),u=t.insert("g").attr("class","edgeTerminals"),l=u.insert("g").attr("class","inner");l.node().appendChild(c);var h=c.getBBox();l.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),Cn[e.id]||(Cn[e.id]={}),Cn[e.id].startLeft=u}if(e.startLabelRight){var f=Te(e.startLabelRight,e.labelStyle),p=t.insert("g").attr("class","edgeTerminals"),g=p.insert("g").attr("class","inner");p.node().appendChild(f),g.node().appendChild(f);var y=f.getBBox();g.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),Cn[e.id]||(Cn[e.id]={}),Cn[e.id].startRight=p}if(e.endLabelLeft){var v=Te(e.endLabelLeft,e.labelStyle),m=t.insert("g").attr("class","edgeTerminals"),b=m.insert("g").attr("class","inner");b.node().appendChild(v);var x=v.getBBox();b.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),m.node().appendChild(v),Cn[e.id]||(Cn[e.id]={}),Cn[e.id].endLeft=m}if(e.endLabelRight){var _=Te(e.endLabelRight,e.labelStyle),k=t.insert("g").attr("class","edgeTerminals"),w=k.insert("g").attr("class","inner");w.node().appendChild(_);var E=_.getBBox();w.attr("transform","translate("+-E.width/2+", "+-E.height/2+")"),k.node().appendChild(_),Cn[e.id]||(Cn[e.id]={}),Cn[e.id].endRight=k}}(l,e)})),n.edges().forEach((function(t){c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),c.info("#############################################"),c.info("### Layout ###"),c.info("#############################################"),c.info(n),ke.a.layout(n),c.info("Graph after layout:",G.a.json.write(n)),je(n).forEach((function(t){var e=n.node(t);c.info("Position "+t+": "+JSON.stringify(n.node(t))),c.info("Position "+t+": ("+e.x,","+e.y,") width: ",e.width," height: ",e.height),e&&e.clusterNode?kn(e):n.children(t).length>0?(!function(t,e){c.trace("Inserting cluster");var n=e.shape||"rect";En[e.id]=wn[n](t,e)}(s,e),Me[e.id].node=e):kn(e)})),n.edges().forEach((function(t){var e=n.edge(t);c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e),e);var i=function(t,e,n,r,i,a){var o=n.points,s=!1,u=a.node(e.v),l=a.node(e.w);if(l.intersect&&u.intersect&&((o=o.slice(1,n.points.length-1)).unshift(u.intersect(o[0])),c.info("Last point",o[o.length-1],l,l.intersect(o[o.length-1])),o.push(l.intersect(o[o.length-1]))),n.toCluster){var h;c.trace("edge",n),c.trace("to cluster",r[n.toCluster]),o=[];var f=!1;n.points.forEach((function(t){var e=r[n.toCluster].node;if(An(e,t)||f)f||o.push(t);else{c.trace("inside",n.toCluster,t,h);var i=Sn(e,h,t),a=!1;o.forEach((function(t){a=a||t.x===i.x&&t.y===i.y})),o.find((function(t){return t.x===i.x&&t.y===i.y}))?c.warn("no intersect",i,o):o.push(i),f=!0}h=t})),s=!0}if(n.fromCluster){c.trace("edge",n),c.warn("from cluster",r[n.fromCluster]);for(var p,g=[],y=!1,v=o.length-1;v>=0;v--){var m=o[v],b=r[n.fromCluster].node;if(An(b,m)||y)c.trace("Outside point",m),y||g.unshift(m);else{c.warn("inside",n.fromCluster,m,b);var x=Sn(b,p,m);g.unshift(x),y=!0}p=m}o=g,s=!0}var _,k=o.filter((function(t){return!Number.isNaN(t.y)})),w=Object(d.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d.curveBasis);switch(n.thickness){case"normal":_="edge-thickness-normal";break;case"thick":_="edge-thickness-thick";break;default:_=""}switch(n.pattern){case"solid":_+=" edge-pattern-solid";break;case"dotted":_+=" edge-pattern-dotted";break;case"dashed":_+=" edge-pattern-dashed"}var E=t.append("path").attr("d",w(k)).attr("id",n.id).attr("class"," "+_+(n.classes?" "+n.classes:"")).attr("style",n.style),T="";switch(_t().state.arrowMarkerAbsolute&&(T=(T=(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),c.info("arrowTypeStart",n.arrowTypeStart),c.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":E.attr("marker-start","url("+T+"#"+i+"-crossStart)");break;case"arrow_point":E.attr("marker-start","url("+T+"#"+i+"-pointStart)");break;case"arrow_barb":E.attr("marker-start","url("+T+"#"+i+"-barbStart)");break;case"arrow_circle":E.attr("marker-start","url("+T+"#"+i+"-circleStart)");break;case"aggregation":E.attr("marker-start","url("+T+"#"+i+"-aggregationStart)");break;case"extension":E.attr("marker-start","url("+T+"#"+i+"-extensionStart)");break;case"composition":E.attr("marker-start","url("+T+"#"+i+"-compositionStart)");break;case"dependency":E.attr("marker-start","url("+T+"#"+i+"-dependencyStart)")}switch(n.arrowTypeEnd){case"arrow_cross":E.attr("marker-end","url("+T+"#"+i+"-crossEnd)");break;case"arrow_point":E.attr("marker-end","url("+T+"#"+i+"-pointEnd)");break;case"arrow_barb":E.attr("marker-end","url("+T+"#"+i+"-barbEnd)");break;case"arrow_circle":E.attr("marker-end","url("+T+"#"+i+"-circleEnd)");break;case"aggregation":E.attr("marker-end","url("+T+"#"+i+"-aggregationEnd)");break;case"extension":E.attr("marker-end","url("+T+"#"+i+"-extensionEnd)");break;case"composition":E.attr("marker-end","url("+T+"#"+i+"-compositionEnd)");break;case"dependency":E.attr("marker-end","url("+T+"#"+i+"-dependencyEnd)")}var C={};return s&&(C.updatedPath=o),C.originalPath=n.points,C}(u,t,e,Me,r,n);!function(t,e){c.info("Moving label",t.id,t.label,Tn[t.id]);var n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){var r=Tn[t.id],i=t.x,a=t.y;if(n){var o=H.calcLabelPosition(n);c.info("Moving label from (",i,",",a,") to (",o.x,",",o.y,")")}r.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){var s=Cn[t.id].startLeft,u=t.x,l=t.y;if(n){var h=H.calcTerminalLabelPosition(0,"start_left",n);u=h.x,l=h.y}s.attr("transform","translate("+u+", "+l+")")}if(t.startLabelRight){var f=Cn[t.id].startRight,d=t.x,p=t.y;if(n){var g=H.calcTerminalLabelPosition(0,"start_right",n);d=g.x,p=g.y}f.attr("transform","translate("+d+", "+p+")")}if(t.endLabelLeft){var y=Cn[t.id].endLeft,v=t.x,m=t.y;if(n){var b=H.calcTerminalLabelPosition(0,"end_left",n);v=b.x,m=b.y}y.attr("transform","translate("+v+", "+m+")")}if(t.endLabelRight){var x=Cn[t.id].endRight,_=t.x,k=t.y;if(n){var w=H.calcTerminalLabelPosition(0,"end_right",n);_=w.x,k=w.y}x.attr("transform","translate("+_+", "+k+")")}}(e,i)})),o},On=function(t,e,n,r,i){Ee(t,n,r,i),_n={},Tn={},Cn={},En={},Oe={},De={},Me={},c.warn("Graph at first:",G.a.json.write(e)),Pe(e),c.warn("Graph after:",G.a.json.write(e)),Mn(t,e,r)},Dn={},Nn=function(t,e,n){var r=Object(d.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var o,s=B(i.styles),u=void 0!==i.text?i.text:i.id;if(_t().flowchart.htmlLabels){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=ee()(r,l).node()).parentNode.removeChild(o)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var f=u.split(x.lineBreakRegex),d=0;d=0;h--)i=l[h],c.info("Subgraph - ",i),Xt.addVertex(i.id,i.title,"group",void 0,i.classes);var f=Xt.getVertices(),p=Xt.getEdges();c.info(p);var g=0;for(g=l.length-1;g>=0;g--){i=l[g],Object(d.selectAll)("cluster").append("text");for(var y=0;y0)switch(e.valign){case"top":case"start":s=function(){return Math.round(e.y+e.textMargin)};break;case"middle":case"center":s=function(){return Math.round(e.y+(n+r+e.textMargin)/2)};break;case"bottom":case"end":s=function(){return Math.round(e.y+(n+r+2*e.textMargin)-e.textMargin)}}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="text-after-edge",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="text-before-edge",e.alignmentBaseline="middle"}for(var c=0;c0&&(r+=(l._groups||l)[0][0].getBBox().height,n=r),a.push(l)}return a},jn=function(t,e){var n,r,i,a,o,s=t.append("polygon");return s.attr("points",(n=e.x,r=e.y,i=e.width,a=e.height,n+","+r+" "+(n+i)+","+r+" "+(n+i)+","+(r+a-(o=7))+" "+(n+i-1.2*o)+","+(r+a)+" "+n+","+(r+a))),s.attr("class","labelBox"),e.y=e.y+e.height/2,In(t,e),s},Rn=-1,Yn=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},zn=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Un=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var u=c.actorFontSize,l=c.actorFontFamily,h=c.actorFontWeight,f=t.split(x.lineBreakRegex),d=0;d2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===ir.ACTIVE_END){var i=er(t.actor);if(i<1){var a=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw a.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},a}}return qn.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap,type:r}),!0},rr=function(){return Qn},ir={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23},ar=function(t,e,n){var r={actor:t,placement:e,message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap},i=[].concat(t,t);Xn.push(r),qn.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap,type:ir.NOTE,placement:e})},or=function(t){Zn=t.text,Jn=void 0===t.wrap&&rr()||!!t.wrap},sr={addActor:tr,addMessage:function(t,e,n,r){qn.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap,answer:r})},addSignal:nr,autoWrap:rr,setWrap:function(t){Qn=t},enableSequenceNumbers:function(){Kn=!0},showSequenceNumbers:function(){return Kn},getMessages:function(){return qn},getActors:function(){return Gn},getActor:function(t){return Gn[t]},getActorKeys:function(){return Object.keys(Gn)},getTitle:function(){return Zn},parseDirective:function(t,e,n){Go.parseDirective(this,t,e,n)},getConfig:function(){return _t().sequence},getTitleWrapped:function(){return Jn},clear:function(){Gn={},qn=[]},parseMessage:function(t){var e=t.trim(),n={text:e.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^[:]?wrap:/)||null===e.match(/^[:]?nowrap:/)&&void 0};return c.debug("parseMessage:",n),n},LINETYPE:ir,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:ar,setTitle:or,apply:function t(e){if(e instanceof Array)e.forEach((function(e){t(e)}));else switch(e.type){case"addActor":tr(e.actor,e.actor,e.description);break;case"activeStart":case"activeEnd":nr(e.actor,void 0,void 0,e.signalType);break;case"addNote":ar(e.actor,e.placement,e.text);break;case"addMessage":nr(e.from,e.to,e.msg,e.signalType);break;case"loopStart":nr(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":nr(void 0,void 0,void 0,e.signalType);break;case"rectStart":nr(void 0,void 0,e.color,e.signalType);break;case"rectEnd":nr(void 0,void 0,void 0,e.signalType);break;case"optStart":nr(void 0,void 0,e.optText,e.signalType);break;case"optEnd":nr(void 0,void 0,void 0,e.signalType);break;case"altStart":case"else":nr(void 0,void 0,e.altText,e.signalType);break;case"altEnd":nr(void 0,void 0,void 0,e.signalType);break;case"setTitle":or(e.text);break;case"parStart":case"and":nr(void 0,void 0,e.parText,e.signalType);break;case"parEnd":nr(void 0,void 0,void 0,e.signalType)}}};Wn.parser.yy=sr;var cr={},ur={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((function(t){return t.height||0})))+(0===this.loops.length?0:this.loops.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.messages.length?0:this.messages.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.notes.length?0:this.notes.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,pr(Wn.parser.yy.getConfig())},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=this,a=0;function o(o){return function(s){a++;var c=i.sequenceItems.length-a+1;i.updateVal(s,"starty",e-c*cr.boxMargin,Math.min),i.updateVal(s,"stopy",r+c*cr.boxMargin,Math.max),i.updateVal(ur.data,"startx",t-c*cr.boxMargin,Math.min),i.updateVal(ur.data,"stopx",n+c*cr.boxMargin,Math.max),"activation"!==o&&(i.updateVal(s,"startx",t-c*cr.boxMargin,Math.min),i.updateVal(s,"stopx",n+c*cr.boxMargin,Math.max),i.updateVal(ur.data,"starty",e-c*cr.boxMargin,Math.min),i.updateVal(ur.data,"stopy",r+c*cr.boxMargin,Math.max))}}this.sequenceItems.forEach(o()),this.activations.forEach(o("activation"))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(ur.data,"startx",i,Math.min),this.updateVal(ur.data,"starty",o,Math.min),this.updateVal(ur.data,"stopx",a,Math.max),this.updateVal(ur.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},newActivation:function(t,e,n){var r=n[t.from.actor],i=gr(t.from.actor).length||0,a=r.x+r.width/2+(i-1)*cr.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+cr.activationWidth,stopy:void 0,actor:t.from.actor,anchored:$n.anchorElement(e)})},endActivation:function(t){var e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:ur.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},lr=function(t){return{fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}},hr=function(t){return{fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}},fr=function(t){return{fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}},dr=function(t,e,n,r){for(var i=0,a=0,o=0;o0&&o.forEach((function(r){if(n=r,i.startx===i.stopx){var a=e[t.from],o=e[t.to];n.from=Math.min(a.x-i.width/2,a.x-a.width/2,n.from),n.to=Math.max(o.x+i.width/2,o.x+a.width/2,n.to),n.width=Math.max(n.width,Math.abs(n.to-n.from))-cr.labelBoxWidth}else n.from=Math.min(i.startx,n.from),n.to=Math.max(i.stopx,n.to),n.width=Math.max(n.width,i.width)-cr.labelBoxWidth})))})),ur.activations=[],c.debug("Loop type widths:",a),a},_r={bounds:ur,drawActors:dr,setConf:pr,draw:function(t,e){cr=_t().sequence,Wn.parser.yy.clear(),Wn.parser.yy.setWrap(cr.wrap),Wn.parser.parse(t+"\n"),ur.init(),c.debug("C:".concat(JSON.stringify(cr,null,2)));var n=Object(d.select)('[id="'.concat(e,'"]')),r=Wn.parser.yy.getActors(),i=Wn.parser.yy.getActorKeys(),a=Wn.parser.yy.getMessages(),o=Wn.parser.yy.getTitle(),s=mr(r,a);cr.height=br(r,s),dr(n,r,i,0);var u=xr(a,r,s);$n.insertArrowHead(n),$n.insertArrowCrossHead(n),$n.insertSequenceNumber(n);var l=1;a.forEach((function(t){var e,i,a;switch(t.type){case Wn.parser.yy.LINETYPE.NOTE:i=t.noteModel,function(t,e){ur.bumpVerticalPos(cr.boxMargin),e.height=cr.boxMargin,e.starty=ur.getVerticalPos();var n=$n.getNoteRect();n.x=e.startx,n.y=e.starty,n.width=e.width||cr.width,n.class="note";var r=t.append("g"),i=$n.drawRect(r,n),a=$n.getTextObj();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=cr.noteFontFamily,a.fontSize=cr.noteFontSize,a.fontWeight=cr.noteFontWeight,a.anchor=cr.noteAlign,a.textMargin=cr.noteMargin,a.valign=cr.noteAlign;var o=In(r,a),s=Math.round(o.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));i.attr("height",s+2*cr.noteMargin),e.height+=s+2*cr.noteMargin,ur.bumpVerticalPos(s+2*cr.noteMargin),e.stopy=e.starty+s+2*cr.noteMargin,e.stopx=e.startx+n.width,ur.insert(e.startx,e.starty,e.stopx,e.stopy),ur.models.addNote(e)}(n,i);break;case Wn.parser.yy.LINETYPE.ACTIVE_START:ur.newActivation(t,n,r);break;case Wn.parser.yy.LINETYPE.ACTIVE_END:!function(t,e){var r=ur.endActivation(t);r.starty+18>e&&(r.starty=e-6,e+=12),$n.drawActivation(n,r,e,cr,gr(t.from.actor).length),ur.insert(r.startx,e-10,r.stopx,e)}(t,ur.getVerticalPos());break;case Wn.parser.yy.LINETYPE.LOOP_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.LOOP_END:e=ur.endLoop(),$n.drawLoop(n,e,"loop",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;case Wn.parser.yy.LINETYPE.RECT_START:vr(u,t,cr.boxMargin,cr.boxMargin,(function(t){return ur.newLoop(void 0,t.message)}));break;case Wn.parser.yy.LINETYPE.RECT_END:e=ur.endLoop(),$n.drawBackgroundRect(n,e),ur.models.addLoop(e),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos());break;case Wn.parser.yy.LINETYPE.OPT_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.OPT_END:e=ur.endLoop(),$n.drawLoop(n,e,"opt",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;case Wn.parser.yy.LINETYPE.ALT_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.ALT_ELSE:vr(u,t,cr.boxMargin+cr.boxTextMargin,cr.boxMargin,(function(t){return ur.addSectionToLoop(t)}));break;case Wn.parser.yy.LINETYPE.ALT_END:e=ur.endLoop(),$n.drawLoop(n,e,"alt",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;case Wn.parser.yy.LINETYPE.PAR_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.PAR_AND:vr(u,t,cr.boxMargin+cr.boxTextMargin,cr.boxMargin,(function(t){return ur.addSectionToLoop(t)}));break;case Wn.parser.yy.LINETYPE.PAR_END:e=ur.endLoop(),$n.drawLoop(n,e,"par",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;default:try{(a=t.msgModel).starty=ur.getVerticalPos(),a.sequenceIndex=l,function(t,e){ur.bumpVerticalPos(10);var n=e.startx,r=e.stopx,i=e.starty,a=e.message,o=e.type,s=e.sequenceIndex,c=x.splitBreaks(a).length,u=H.calculateTextDimensions(a,lr(cr)),l=u.height/c;e.height+=l,ur.bumpVerticalPos(l);var h=$n.getTextObj();h.x=n,h.y=i+10,h.width=r-n,h.class="messageText",h.dy="1em",h.text=a,h.fontFamily=cr.messageFontFamily,h.fontSize=cr.messageFontSize,h.fontWeight=cr.messageFontWeight,h.anchor=cr.messageAlign,h.valign=cr.messageAlign,h.textMargin=cr.wrapPadding,h.tspan=!1,In(t,h);var f,d,p=u.height-10,g=u.width;if(n===r){d=ur.getVerticalPos()+p,cr.rightAngles?f=t.append("path").attr("d","M ".concat(n,",").concat(d," H ").concat(n+Math.max(cr.width/2,g/2)," V ").concat(d+25," H ").concat(n)):(p+=cr.boxMargin,d=ur.getVerticalPos()+p,f=t.append("path").attr("d","M "+n+","+d+" C "+(n+60)+","+(d-10)+" "+(n+60)+","+(d+30)+" "+n+","+(d+20))),p+=30;var y=Math.max(g/2,cr.width/2);ur.insert(n-y,ur.getVerticalPos()-10+p,r+y,ur.getVerticalPos()+30+p)}else p+=cr.boxMargin,d=ur.getVerticalPos()+p,(f=t.append("line")).attr("x1",n),f.attr("y1",d),f.attr("x2",r),f.attr("y2",d),ur.insert(n,d-10,r,d);o===Wn.parser.yy.LINETYPE.DOTTED||o===Wn.parser.yy.LINETYPE.DOTTED_CROSS||o===Wn.parser.yy.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");var v="";cr.arrowMarkerAbsolute&&(v=(v=(v=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","none"),f.style("fill","none"),o!==Wn.parser.yy.LINETYPE.SOLID&&o!==Wn.parser.yy.LINETYPE.DOTTED||f.attr("marker-end","url("+v+"#arrowhead)"),o!==Wn.parser.yy.LINETYPE.SOLID_CROSS&&o!==Wn.parser.yy.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+v+"#crosshead)"),(sr.showSequenceNumbers()||cr.showSequenceNumbers)&&(f.attr("marker-start","url("+v+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",d+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("textLength","16px").attr("class","sequenceNumber").text(s)),ur.bumpVerticalPos(p),e.height+=p,e.stopy=e.starty+e.height,ur.insert(e.fromBounds,e.starty,e.toBounds,e.stopy)}(n,a),ur.models.addMessage(a)}catch(t){c.error("error while drawing message",t)}}[Wn.parser.yy.LINETYPE.SOLID_OPEN,Wn.parser.yy.LINETYPE.DOTTED_OPEN,Wn.parser.yy.LINETYPE.SOLID,Wn.parser.yy.LINETYPE.DOTTED,Wn.parser.yy.LINETYPE.SOLID_CROSS,Wn.parser.yy.LINETYPE.DOTTED_CROSS].includes(t.type)&&l++})),cr.mirrorActors&&(ur.bumpVerticalPos(2*cr.boxMargin),dr(n,r,i,ur.getVerticalPos()));var h=ur.getBounds().bounds;c.debug("For line height fix Querying: #"+e+" .actor-line"),Object(d.selectAll)("#"+e+" .actor-line").attr("y2",h.stopy);var f=h.stopy-h.starty+2*cr.diagramMarginY;cr.mirrorActors&&(f=f-cr.boxMargin+cr.bottomMarginAdj);var p=h.stopx-h.startx+2*cr.diagramMarginX;o&&n.append("text").text(o).attr("x",(h.stopx-h.startx)/2-2*cr.diagramMarginX).attr("y",-25),W(n,f,p,cr.useMaxWidth);var g=o?40:0;n.attr("viewBox",h.startx-cr.diagramMarginX+" -"+(cr.diagramMarginY+g)+" "+p+" "+(f+g)),c.debug("models:",ur.models)}},kr=n(27),wr=n.n(kr);function Er(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e=6&&n.indexOf("weekends")>=0||(n.indexOf(t.format("dddd").toLowerCase())>=0||n.indexOf(t.format(e.trim()))>=0)},Yr=function(t,e,n){if(n.length&&!t.manualEndTime){var r=o()(t.startTime,e,!0);r.add(1,"d");var i=o()(t.endTime,e,!0),a=zr(r,i,e,n);t.endTime=i.toDate(),t.renderEndTime=a}},zr=function(t,e,n,r){for(var i=!1,a=null;t<=e;)i||(a=e.toDate()),(i=Rr(t,n,r))&&e.add(1,"d"),t.add(1,"d");return a},Ur=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var i=null;if(r[1].split(" ").forEach((function(t){var e=Xr(t);void 0!==e&&(i?e.endTime>i.endTime&&(i=e):i=e)})),i)return i.endTime;var a=new Date;return a.setHours(0,0,0,0),a}var s=o()(n,e.trim(),!0);return s.isValid()?s.toDate():(c.debug("Invalid date:"+n),c.debug("With date format:"+e.trim()),new Date)},$r=function(t,e){if(null!==t)switch(t[2]){case"s":e.add(t[1],"seconds");break;case"m":e.add(t[1],"minutes");break;case"h":e.add(t[1],"hours");break;case"d":e.add(t[1],"days");break;case"w":e.add(t[1],"weeks")}return e.toDate()},Wr=function(t,e,n,r){r=r||!1,n=n.trim();var i=o()(n,e.trim(),!0);return i.isValid()?(r&&i.add(1,"d"),i.toDate()):$r(/^([\d]+)([wdhms])/.exec(n.trim()),o()(t))},Hr=0,Vr=function(t){return void 0===t?"task"+(Hr+=1):t},Gr=[],qr={},Xr=function(t){var e=qr[t];return Gr[e]},Zr=function(){for(var t=function(t){var e=Gr[t],n="";switch(Gr[t].raw.startTime.type){case"prevTaskEnd":var r=Xr(e.prevTaskId);e.startTime=r.endTime;break;case"getStartDate":(n=Ur(0,Ar,Gr[t].raw.startTime.startData))&&(Gr[t].startTime=n)}return Gr[t].startTime&&(Gr[t].endTime=Wr(Gr[t].startTime,Ar,Gr[t].raw.endTime.data,Ir),Gr[t].endTime&&(Gr[t].processed=!0,Gr[t].manualEndTime=o()(Gr[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Yr(Gr[t],Ar,Or))),Gr[t].processed},e=!0,n=0;nr?i=1:n0&&(e=t.classes.join(" "));for(var n=0,r=0;rn-e?n+a+1.5*ni.leftPadding>u?e+r-5:n+r+5:(n-e)/2+e+r})).attr("y",(function(t,r){return t.order*e+ni.barHeight/2+(ni.fontSize/2-2)+n})).attr("text-height",i).attr("class",(function(t){var e=o(t.startTime),n=o(t.endTime);t.milestone&&(n=e+i);var r=this.getBBox().width,a="";t.classes.length>0&&(a=t.classes.join(" "));for(var c=0,l=0;ln-e?n+r+1.5*ni.leftPadding>u?a+" taskTextOutsideLeft taskTextOutside"+c+" "+h:a+" taskTextOutsideRight taskTextOutside"+c+" "+h+" width-"+r:a+" taskText taskText"+c+" "+h+" width-"+r}))}(t,i,c,h,r,0,e),function(t,e){for(var n=[],r=0,i=0;i0&&a.setAttribute("dy","1em"),a.textContent=e[i],r.appendChild(a)}return r})).attr("x",10).attr("y",(function(i,a){if(!(a>0))return i[1]*t/2+e;for(var o=0;o "+t.w+": "+JSON.stringify(i.edge(t))),mn(r,i.edge(t),i.edge(t).relation,ci))}));var h=r.node().getBBox(),f=h.width+40,p=h.height+40;W(r,p,f,ci.useMaxWidth);var g="".concat(h.x-20," ").concat(h.y-20," ").concat(f," ").concat(p);c.debug("viewBox ".concat(g)),r.attr("viewBox",g)};ai.parser.yy=cn;var fi={dividerMargin:10,padding:5,textHeight:10},di=function(t){Object.keys(t).forEach((function(e){fi[e]=t[e]}))},pi=function(t,e){c.info("Drawing class"),cn.clear(),ai.parser.parse(t);var n=_t().flowchart;c.info("config:",n);var r=n.nodeSpacing||50,i=n.rankSpacing||50,a=new G.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TD",nodesep:r,ranksep:i,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),o=cn.getClasses(),s=cn.getRelations();c.info(s),function(t,e){var n=Object.keys(t);c.info("keys:",n),c.info(t),n.forEach((function(n){var r=t[n],i="";r.cssClasses.length>0&&(i=i+" "+r.cssClasses.join(" "));var a={labelStyle:""},o=void 0!==r.text?r.text:r.id,s="";switch(r.type){case"class":s="class_box";break;default:s="class_box"}e.setNode(r.id,{labelStyle:a.labelStyle,shape:s,labelText:o,classData:r,rx:0,ry:0,class:i,style:a.style,id:r.id,domId:r.domId,haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:_t().flowchart.padding}),c.info("setNode",{labelStyle:a.labelStyle,shape:s,labelText:o,rx:0,ry:0,class:i,style:a.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:_t().flowchart.padding})}))}(o,a),function(t,e){var n=0;t.forEach((function(r){n++;var i={classes:"relation"};i.pattern=1==r.relation.lineType?"dashed":"solid",i.id="id"+n,"arrow_open"===r.type?i.arrowhead="none":i.arrowhead="normal",c.info(i,r),i.startLabelRight="none"===r.relationTitle1?"":r.relationTitle1,i.endLabelLeft="none"===r.relationTitle2?"":r.relationTitle2,i.arrowTypeStart=gi(r.relation.type1),i.arrowTypeEnd=gi(r.relation.type2);var a="",o="";if(void 0!==r.style){var s=B(r.style);a=s.style,o=s.labelStyle}else a="fill:none";i.style=a,i.labelStyle=o,void 0!==r.interpolate?i.curve=D(r.interpolate,d.curveLinear):void 0!==t.defaultInterpolate?i.curve=D(t.defaultInterpolate,d.curveLinear):i.curve=D(fi.curve,d.curveLinear),r.text=r.title,void 0===r.text?void 0!==r.style&&(i.arrowheadStyle="fill: #333"):(i.arrowheadStyle="fill: #333",i.labelpos="c",_t().flowchart.htmlLabels,i.labelType="text",i.label=r.text.replace(x.lineBreakRegex,"\n"),void 0===r.style&&(i.style=i.style||"stroke: #333; stroke-width: 1.5px;fill:none"),i.labelStyle=i.labelStyle.replace("color:","fill:")),e.setEdge(r.id1,r.id2,i,n)}))}(s,a);var u=Object(d.select)('[id="'.concat(e,'"]'));u.attr("xmlns:xlink","http://www.w3.org/1999/xlink");var l=Object(d.select)("#"+e+" g");On(l,a,["aggregation","extension","composition","dependency"],"classDiagram",e);var h=u.node().getBBox(),f=h.width+16,p=h.height+16;if(c.debug("new ViewBox 0 0 ".concat(f," ").concat(p),"translate(".concat(8-a._label.marginx,", ").concat(8-a._label.marginy,")")),W(u,p,f,n.useMaxWidth),u.attr("viewBox","0 0 ".concat(f," ").concat(p)),u.select("g").attr("transform","translate(".concat(8-a._label.marginx,", ").concat(8-h.y,")")),!n.htmlLabels)for(var g=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),y=0;y0&&o.length>0){var c={stmt:"state",id:F(),type:"divider",doc:mi(o)};i.push(mi(c)),n.doc=i}n.doc.forEach((function(e){return t(n,e,!0)}))}}({id:"root"},{id:"root",doc:bi},!0),{id:"root",doc:bi}},extract:function(t){var e;e=t.doc?t.doc:t,c.info(e),Ei(),c.info("Extract",e),e.forEach((function(t){"state"===t.stmt&&wi(t.id,t.type,t.doc,t.description,t.note),"relation"===t.stmt&&Ti(t.state1.id,t.state2.id,t.description)}))},trimColon:function(t){return t&&":"===t[0]?t.substr(1).trim():t.trim()}},Oi=n(22),Di=n.n(Oi),Ni={},Bi=function(t,e){Ni[t]=e},Li=function(t,e){var n=t.append("text").attr("x",2*_t().state.padding).attr("y",_t().state.textHeight+1.3*_t().state.padding).attr("font-size",_t().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",_t().state.padding).attr("y",r+.4*_t().state.padding+_t().state.dividerMargin+_t().state.textHeight).attr("class","state-description"),a=!0,o=!0;e.descriptions.forEach((function(t){a||(!function(t,e,n){var r=t.append("tspan").attr("x",2*_t().state.padding).text(e);n||r.attr("dy",_t().state.textHeight)}(i,t,o),o=!1),a=!1}));var s=t.append("line").attr("x1",_t().state.padding).attr("y1",_t().state.padding+r+_t().state.dividerMargin/2).attr("y2",_t().state.padding+r+_t().state.dividerMargin/2).attr("class","descr-divider"),c=i.node().getBBox(),u=Math.max(c.width,n.width);return s.attr("x2",u+3*_t().state.padding),t.insert("rect",":first-child").attr("x",_t().state.padding).attr("y",_t().state.padding).attr("width",u+2*_t().state.padding).attr("height",c.height+r+2*_t().state.padding).attr("rx",_t().state.radius),t},Fi=function(t,e,n){var r,i=_t().state.padding,a=2*_t().state.padding,o=t.node().getBBox(),s=o.width,c=o.x,u=t.append("text").attr("x",0).attr("y",_t().state.titleShift).attr("font-size",_t().state.fontSize).attr("class","state-title").text(e.id),l=u.node().getBBox().width+a,h=Math.max(l,s);h===s&&(h+=a);var f=t.node().getBBox();e.doc,r=c-i,l>s&&(r=(s-h)/2+i),Math.abs(c-f.x)s&&(r=c-(l-s)/2);var d=1-_t().state.textHeight;return t.insert("rect",":first-child").attr("x",r).attr("y",d).attr("class",n?"alt-composit":"composit").attr("width",h).attr("height",f.height+_t().state.textHeight+_t().state.titleShift+1).attr("rx","0"),u.attr("x",r+i),l<=s&&u.attr("x",c+(h-a)/2-l/2+i),t.insert("rect",":first-child").attr("x",r).attr("y",_t().state.titleShift-_t().state.textHeight-_t().state.padding).attr("width",h).attr("height",3*_t().state.textHeight).attr("rx",_t().state.radius),t.insert("rect",":first-child").attr("x",r).attr("y",_t().state.titleShift-_t().state.textHeight-_t().state.padding).attr("width",h).attr("height",f.height+3+2*_t().state.textHeight).attr("rx",_t().state.radius),t},Pi=function(t,e){e.attr("class","state-note");var n=e.append("rect").attr("x",0).attr("y",_t().state.padding),r=function(t,e,n,r){var i=0,a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");var o=t.replace(/\r\n/g,"
"),s=(o=o.replace(/\n/g,"
")).split(x.lineBreakRegex),c=1.25*_t().state.noteMargin,u=!0,l=!1,h=void 0;try{for(var f,d=s[Symbol.iterator]();!(u=(f=d.next()).done);u=!0){var p=f.value.trim();if(p.length>0){var g=a.append("tspan");if(g.text(p),0===c)c+=g.node().getBBox().height;i+=c,g.attr("x",e+_t().state.noteMargin),g.attr("y",n+i+1.25*_t().state.noteMargin)}}}catch(t){l=!0,h=t}finally{try{u||null==d.return||d.return()}finally{if(l)throw h}}return{textWidth:a.node().getBBox().width,textHeight:i}}(t,0,0,e.append("g")),i=r.textWidth,a=r.textHeight;return n.attr("height",a+2*_t().state.noteMargin),n.attr("width",i+2*_t().state.noteMargin),n},Ii=function(t,e){var n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&function(t){t.append("circle").attr("class","start-state").attr("r",_t().state.sizeUnit).attr("cx",_t().state.padding+_t().state.sizeUnit).attr("cy",_t().state.padding+_t().state.sizeUnit)}(i),"end"===e.type&&function(t){t.append("circle").attr("class","end-state-outer").attr("r",_t().state.sizeUnit+_t().state.miniPadding).attr("cx",_t().state.padding+_t().state.sizeUnit+_t().state.miniPadding).attr("cy",_t().state.padding+_t().state.sizeUnit+_t().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",_t().state.sizeUnit).attr("cx",_t().state.padding+_t().state.sizeUnit+2).attr("cy",_t().state.padding+_t().state.sizeUnit+2)}(i),"fork"!==e.type&&"join"!==e.type||function(t,e){var n=_t().state.forkWidth,r=_t().state.forkHeight;if(e.parentId){var i=n;n=r,r=i}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",_t().state.padding).attr("y",_t().state.padding)}(i,e),"note"===e.type&&Pi(e.note.text,i),"divider"===e.type&&function(t){t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",_t().state.textHeight).attr("class","divider").attr("x2",2*_t().state.textHeight).attr("y1",0).attr("y2",0)}(i),"default"===e.type&&0===e.descriptions.length&&function(t,e){var n=t.append("text").attr("x",2*_t().state.padding).attr("y",_t().state.textHeight+2*_t().state.padding).attr("font-size",_t().state.fontSize).attr("class","state-title").text(e.id),r=n.node().getBBox();t.insert("rect",":first-child").attr("x",_t().state.padding).attr("y",_t().state.padding).attr("width",r.width+2*_t().state.padding).attr("height",r.height+2*_t().state.padding).attr("rx",_t().state.radius)}(i,e),"default"===e.type&&e.descriptions.length>0&&Li(i,e);var a=i.node().getBBox();return r.width=a.width+2*_t().state.padding,r.height=a.height+2*_t().state.padding,Bi(n,r),r},ji=0;Oi.parser.yy=Mi;var Ri={},Yi=function t(e,n,r,i){var a,o=new G.a.Graph({compound:!0,multigraph:!0}),s=!0;for(a=0;a "+t.w+": "+JSON.stringify(o.edge(t))),function(t,e,n){e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var r=e.points,i=Object(d.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d.curveBasis),a=t.append("path").attr("d",i(r)).attr("id","edge"+ji).attr("class","transition"),o="";if(_t().state.arrowMarkerAbsolute&&(o=(o=(o=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),a.attr("marker-end","url("+o+"#"+function(t){switch(t){case Mi.relationType.AGGREGATION:return"aggregation";case Mi.relationType.EXTENSION:return"extension";case Mi.relationType.COMPOSITION:return"composition";case Mi.relationType.DEPENDENCY:return"dependency"}}(Mi.relationType.DEPENDENCY)+"End)"),void 0!==n.title){for(var s=t.append("g").attr("class","stateLabel"),u=H.calcLabelPosition(e.points),l=u.x,h=u.y,f=x.getRows(n.title),p=0,g=[],y=0,v=0,m=0;m<=f.length;m++){var b=s.append("text").attr("text-anchor","middle").text(f[m]).attr("x",l).attr("y",h+p),_=b.node().getBBox();if(y=Math.max(y,_.width),v=Math.min(v,_.x),c.info(_.x,l,h+p),0===p){var k=b.node().getBBox();p=k.height,c.info("Title height",p,h)}g.push(b)}var w=p*f.length;if(f.length>1){var E=(f.length-1)*p*.5;g.forEach((function(t,e){return t.attr("y",h+e*p-E)})),w=p*f.length}var T=s.node().getBBox();s.insert("rect",":first-child").attr("class","box").attr("x",l-y/2-_t().state.padding/2).attr("y",h-w/2-_t().state.padding/2-3.5).attr("width",y+_t().state.padding).attr("height",w+_t().state.padding),c.info(T)}ji++}(n,o.edge(t),o.edge(t).relation))})),w=k.getBBox();var E={id:r||"root",label:r||"root",width:0,height:0};return E.width=w.width+2*vi.padding,E.height=w.height+2*vi.padding,c.debug("Doc rendered",E,o),E},zi=function(){},Ui=function(t,e){vi=_t().state,Oi.parser.yy.clear(),Oi.parser.parse(t),c.debug("Rendering diagram "+t);var n=Object(d.select)("[id='".concat(e,"']"));n.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z"),new G.a.Graph({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));var r=Mi.getRootDoc();Yi(r,n,void 0,!1);var i=vi.padding,a=n.node().getBBox(),o=a.width+2*i,s=a.height+2*i;W(n,s,1.75*o,vi.useMaxWidth),n.attr("viewBox","".concat(a.x-vi.padding," ").concat(a.y-vi.padding," ")+o+" "+s)},$i={},Wi={},Hi=function(t,e,n,r){if("root"!==n.id){var i="rect";!0===n.start&&(i="start"),!1===n.start&&(i="end"),"default"!==n.type&&(i=n.type),Wi[n.id]||(Wi[n.id]={id:n.id,shape:i,description:n.id,classes:"statediagram-state"}),n.description&&(Array.isArray(Wi[n.id].description)?(Wi[n.id].shape="rectWithTitle",Wi[n.id].description.push(n.description)):Wi[n.id].description.length>0?(Wi[n.id].shape="rectWithTitle",Wi[n.id].description===n.id?Wi[n.id].description=[n.description]:Wi[n.id].description=[Wi[n.id].description,n.description]):(Wi[n.id].shape="rect",Wi[n.id].description=n.description)),!Wi[n.id].type&&n.doc&&(c.info("Setting cluser for ",n.id),Wi[n.id].type="group",Wi[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",Wi[n.id].classes=Wi[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var a={labelStyle:"",shape:Wi[n.id].shape,labelText:Wi[n.id].description,classes:Wi[n.id].classes,style:"",id:n.id,domId:"state-"+n.id+"-"+Vi,type:Wi[n.id].type,padding:15};if(n.note){var o={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note",domId:"state-"+n.id+"----note-"+Vi,type:Wi[n.id].type,padding:15},s={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:Wi[n.id].classes,style:"",id:n.id+"----parent",domId:"state-"+n.id+"----parent-"+Vi,type:"group",padding:0};Vi++,t.setNode(n.id+"----parent",s),t.setNode(o.id,o),t.setNode(n.id,a),t.setParent(n.id,n.id+"----parent"),t.setParent(o.id,n.id+"----parent");var u=n.id,l=o.id;"left of"===n.note.position&&(u=o.id,l=n.id),t.setEdge(u,l,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else t.setNode(n.id,a)}e&&"root"!==e.id&&(c.info("Setting node ",n.id," to be child of its parent ",e.id),t.setParent(n.id,e.id)),n.doc&&(c.info("Adding nodes children "),Gi(t,n,n.doc,!r))},Vi=0,Gi=function(t,e,n,r){Vi=0,c.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)Hi(t,e,n,r);else if("relation"===n.stmt){Hi(t,e,n.state1,r),Hi(t,e,n.state2,r);var i={id:"edge"+Vi,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:n.description,arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},a=n.state1.id,o=n.state2.id;t.setEdge(a,o,i,Vi),Vi++}}))},qi=function(t){for(var e=Object.keys(t),n=0;ne.seq?t:e}),t[0]),n="";t.forEach((function(t){n+=t===e?"\t*":"\t|"}));var r,i,a,o=[n,e.id,e.seq];for(var s in Ki)Ki[s]===e.id&&o.push(s);if(c.debug(o.join(" ")),Array.isArray(e.parent)){var u=Zi[e.parent[0]];aa(t,e,u),t.push(Zi[e.parent[1]])}else{if(null==e.parent)return;var l=Zi[e.parent];aa(t,e,l)}r=t,i=function(t){return t.id},a=Object.create(null),oa(t=r.reduce((function(t,e){var n=i(e);return a[n]||(a[n]=!0,t.push(e)),t}),[]))}var sa,ca=function(){var t=Object.keys(Zi).map((function(t){return Zi[t]}));return t.forEach((function(t){c.debug(t.id)})),t.sort((function(t,e){return e.seq-t.seq})),t},ua={setDirection:function(t){ta=t},setOptions:function(t){c.debug("options str",t),t=(t=t&&t.trim())||"{}";try{ia=JSON.parse(t)}catch(t){c.error("error while parsing gitGraph options",t.message)}},getOptions:function(){return ia},commit:function(t){var e={id:na(),message:t,seq:ea++,parent:null==Ji?null:Ji.id};Ji=e,Zi[e.id]=e,Ki[Qi]=e.id,c.debug("in pushCommit "+e.id)},branch:function(t){Ki[t]=null!=Ji?Ji.id:null,c.debug("in createBranch")},merge:function(t){var e=Zi[Ki[Qi]],n=Zi[Ki[t]];if(function(t,e){return t.seq>e.seq&&ra(e,t)}(e,n))c.debug("Already merged");else{if(ra(e,n))Ki[Qi]=Ki[t],Ji=Zi[Ki[Qi]];else{var r={id:na(),message:"merged branch "+t+" into "+Qi,seq:ea++,parent:[null==Ji?null:Ji.id,Ki[t]]};Ji=r,Zi[r.id]=r,Ki[Qi]=r.id}c.debug(Ki),c.debug("in mergeBranch")}},checkout:function(t){c.debug("in checkout");var e=Ki[Qi=t];Ji=Zi[e]},reset:function(t){c.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?Ji:Zi[Ki[e]];for(c.debug(r,n);n>0;)if(n--,!(r=Zi[r.parent])){var i="Critical error - unique parent commit not found during reset";throw c.error(i),i}Ji=r,Ki[Qi]=r.id},prettyPrint:function(){c.debug(Zi),oa([ca()[0]])},clear:function(){Zi={},Ki={master:Ji=null},Qi="master",ea=0},getBranchesAsObjArray:function(){var t=[];for(var e in Ki)t.push({name:e,commit:Zi[Ki[e]]});return t},getBranches:function(){return Ki},getCommits:function(){return Zi},getCommitsArray:ca,getCurrentBranch:function(){return Qi},getDirection:function(){return ta},getHead:function(){return Ji}},la=n(71),ha=n.n(la),fa={},da={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},pa={};function ga(t,e,n,r){var i=D(r,d.curveBasis),a=da.branchColors[n%da.branchColors.length],o=Object(d.line)().x((function(t){return Math.round(t.x)})).y((function(t){return Math.round(t.y)})).curve(i);t.append("svg:path").attr("d",o(e)).style("stroke",a).style("stroke-width",da.lineStrokeWidth).style("fill","none")}function ya(t,e){e=e||t.node().getBBox();var n=t.node().getCTM();return{left:n.e+e.x*n.a,top:n.f+e.y*n.d,width:e.width,height:e.height}}function va(t,e,n,r,i){c.debug("svgDrawLineForCommits: ",e,n);var a=ya(t.select("#node-"+e+" circle")),o=ya(t.select("#node-"+n+" circle"));switch(r){case"LR":if(a.left-o.left>da.nodeSpacing){var s={x:a.left-da.nodeSpacing,y:o.top+o.height/2};ga(t,[s,{x:o.left+o.width,y:o.top+o.height/2}],i,"linear"),ga(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-da.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-da.nodeSpacing/2,y:s.y},s],i)}else ga(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-da.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-da.nodeSpacing/2,y:o.top+o.height/2},{x:o.left+o.width,y:o.top+o.height/2}],i);break;case"BT":if(o.top-a.top>da.nodeSpacing){var u={x:o.left+o.width/2,y:a.top+a.height+da.nodeSpacing};ga(t,[u,{x:o.left+o.width/2,y:o.top}],i,"linear"),ga(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+a.height+da.nodeSpacing/2},{x:o.left+o.width/2,y:u.y-da.nodeSpacing/2},u],i)}else ga(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+da.nodeSpacing/2},{x:o.left+o.width/2,y:o.top-da.nodeSpacing/2},{x:o.left+o.width/2,y:o.top}],i)}}function ma(t,e){return t.select(e).node().cloneNode(!0)}function ba(t,e,n,r){var i,a=Object.keys(fa).length;if("string"==typeof e)do{if(i=fa[e],c.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append((function(){return ma(t,"#def-commit")})).attr("class","commit").attr("id",(function(){return"node-"+i.id})).attr("transform",(function(){switch(r){case"LR":return"translate("+(i.seq*da.nodeSpacing+da.leftMargin)+", "+sa*da.branchOffset+")";case"BT":return"translate("+(sa*da.branchOffset+da.leftMargin)+", "+(a-i.seq)*da.nodeSpacing+")"}})).attr("fill",da.nodeFillColor).attr("stroke",da.nodeStrokeColor).attr("stroke-width",da.nodeStrokeWidth);var o=void 0;for(var s in n)if(n[s].commit===i){o=n[s];break}o&&(c.debug("found branch ",o.name),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(o.name+", ")),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===r&&t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),e=i.parent}while(e&&fa[e]);Array.isArray(e)&&(c.debug("found merge commmit",e),ba(t,e[0],n,r),sa++,ba(t,e[1],n,r),sa--)}function xa(t,e,n,r){for(r=r||0;e.seq>0&&!e.lineDrawn;)"string"==typeof e.parent?(va(t,e.id,e.parent,n,r),e.lineDrawn=!0,e=fa[e.parent]):Array.isArray(e.parent)&&(va(t,e.id,e.parent[0],n,r),va(t,e.id,e.parent[1],n,r+1),xa(t,fa[e.parent[1]],n,r+1),e.lineDrawn=!0,e=fa[e.parent[0]])}var _a,ka=function(t){pa=t},wa=function(t,e,n){try{var r=ha.a.parser;r.yy=ua,r.yy.clear(),c.debug("in gitgraph renderer",t+"\n","id:",e,n),r.parse(t+"\n"),da=Object.assign(da,pa,ua.getOptions()),c.debug("effective options",da);var i=ua.getDirection();fa=ua.getCommits();var a=ua.getBranchesAsObjArray();"BT"===i&&(da.nodeLabel.x=a.length*da.branchOffset,da.nodeLabel.width="100%",da.nodeLabel.y=-2*da.nodeRadius);var o=Object(d.select)('[id="'.concat(e,'"]'));for(var s in function(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",da.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",da.nodeLabel.width).attr("height",da.nodeLabel.height).attr("x",da.nodeLabel.x).attr("y",da.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(o),sa=1,a){var u=a[s];ba(o,u.commit.id,a,i),xa(o,u.commit,i),sa++}o.attr("height",(function(){return"BT"===i?Object.keys(fa).length*da.nodeSpacing:(a.length+1)*da.branchOffset}))}catch(t){c.error("Error while rendering gitgraph"),c.error(t.message)}},Ea="",Ta=!1,Ca={setMessage:function(t){c.debug("Setting message to: "+t),Ea=t},getMessage:function(){return Ea},setInfo:function(t){Ta=t},getInfo:function(){return Ta}},Aa=n(72),Sa=n.n(Aa),Ma={},Oa=function(t){Object.keys(t).forEach((function(e){Ma[e]=t[e]}))},Da=function(t,e,n){try{var r=Sa.a.parser;r.yy=Ca,c.debug("Renering info diagram\n"+t),r.parse(t),c.debug("Parsed info diagram");var i=Object(d.select)("#"+e);i.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),i.attr("height",100),i.attr("width",400)}catch(t){c.error("Error while rendering info diagram"),c.error(t.message)}},Na={},Ba=function(t){Object.keys(t).forEach((function(e){Na[e]=t[e]}))},La=function(t,e){try{c.debug("Renering svg for syntax error\n");var n=Object(d.select)("#"+t),r=n.append("g");r.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),r.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),r.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),r.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),r.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),r.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),r.append("text").attr("class","error-text").attr("x",1240).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),r.append("text").attr("class","error-text").attr("x",1050).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+e),n.attr("height",100),n.attr("width",400),n.attr("viewBox","768 0 512 512")}catch(t){c.error("Error while rendering info diagram"),c.error(t.message)}},Fa={},Pa="",Ia={parseDirective:function(t,e,n){Go.parseDirective(this,t,e,n)},getConfig:function(){return _t().pie},addSection:function(t,e){void 0===Fa[t]&&(Fa[t]=e,c.debug("Added new section :",t))},getSections:function(){return Fa},cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){Fa={},Pa=""},setTitle:function(t){Pa=t},getTitle:function(){return Pa}},ja=n(73),Ra=n.n(ja),Ya={},za=function(t){Object.keys(t).forEach((function(e){Ya[e]=t[e]}))},Ua=function(t,e){try{var n=Ra.a.parser;n.yy=Ia,c.debug("Rendering info diagram\n"+t),n.yy.clear(),n.parse(t),c.debug("Parsed info diagram");var r=document.getElementById(e);void 0===(_a=r.parentElement.offsetWidth)&&(_a=1200),void 0!==Ya.useWidth&&(_a=Ya.useWidth);var i=Object(d.select)("#"+e);W(i,450,_a,Ya.useMaxWidth),r.setAttribute("viewBox","0 0 "+_a+" 450");var a=Math.min(_a,450)/2-40,o=i.append("g").attr("transform","translate("+_a/2+",225)"),s=Ia.getSections(),u=0;Object.keys(s).forEach((function(t){u+=s[t]}));var l=Object(d.scaleOrdinal)().domain(s).range(d.schemeSet2),h=Object(d.pie)().value((function(t){return t.value}))(Object(d.entries)(s)),f=Object(d.arc)().innerRadius(0).outerRadius(a);o.selectAll("mySlices").data(h).enter().append("path").attr("d",f).attr("fill",(function(t){return l(t.data.key)})).attr("stroke","black").style("stroke-width","2px").style("opacity",.7),o.selectAll("mySlices").data(h).enter().append("text").text((function(t){return(t.data.value/u*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+f.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice").style("font-size",17),o.append("text").text(n.yy.getTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var p=o.selectAll(".legend").data(l.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*l.domain().length/2)+")"}));p.append("rect").attr("width",18).attr("height",18).style("fill",l).style("stroke",l),p.append("text").attr("x",22).attr("y",14).text((function(t){return t}))}catch(t){c.error("Error while rendering info diagram"),c.error(t)}},$a={},Wa=[],Ha="",Va=function(t){return void 0===$a[t]&&($a[t]={attributes:[]},c.info("Added new entity :",t)),$a[t]},Ga={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){Go.parseDirective(this,t,e,n)},getConfig:function(){return _t().er},addEntity:Va,addAttributes:function(t,e){var n,r=Va(t);for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),c.debug("Added attribute ",e[n].attributeName)},getEntities:function(){return $a},addRelationship:function(t,e,n,r){var i={entityA:t,roleA:e,entityB:n,relSpec:r};Wa.push(i),c.debug("Added new relationship :",i)},getRelationships:function(){return Wa},clear:function(){$a={},Wa=[],Ha=""},setTitle:function(t){Ha=t},getTitle:function(){return Ha}},qa=n(74),Xa=n.n(qa),Za={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},Ja=Za,Ka=function(t,e){var n;t.append("defs").append("marker").attr("id",Za.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",Za.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",Za.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",Za.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",Za.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",Za.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),(n=t.append("defs").append("marker").attr("id",Za.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),(n=t.append("defs").append("marker").attr("id",Za.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},Qa={},to=function(t,e,n){var r;return Object.keys(e).forEach((function(i){var a=t.append("g").attr("id",i);r=void 0===r?i:r;var o="entity-"+i,s=a.append("text").attr("class","er entityLabel").attr("id",o).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("style","font-family: "+_t().fontFamily+"; font-size: "+Qa.fontSize+"px").text(i),c=function(t,e,n){var r=Qa.entityPadding/3,i=Qa.entityPadding/3,a=.85*Qa.fontSize,o=e.node().getBBox(),s=[],c=0,u=0,l=o.height+2*r,h=1;n.forEach((function(n){var i="".concat(e.node().id,"-attr-").concat(h),o=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-type")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+_t().fontFamily+"; font-size: "+a+"px").text(n.attributeType),f=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-name")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+_t().fontFamily+"; font-size: "+a+"px").text(n.attributeName);s.push({tn:o,nn:f});var d=o.node().getBBox(),p=f.node().getBBox();c=Math.max(c,d.width),u=Math.max(u,p.width),l+=Math.max(d.height,p.height)+2*r,h+=1}));var f={width:Math.max(Qa.minEntityWidth,Math.max(o.width+2*Qa.entityPadding,c+u+4*i)),height:n.length>0?l:Math.max(Qa.minEntityHeight,o.height+2*Qa.entityPadding)},d=Math.max(0,f.width-(c+u)-4*i);if(n.length>0){e.attr("transform","translate("+f.width/2+","+(r+o.height/2)+")");var p=o.height+2*r,g="attributeBoxOdd";s.forEach((function(e){var n=p+r+Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)/2;e.tn.attr("transform","translate("+i+","+n+")");var a=t.insert("rect","#"+e.tn.node().id).attr("class","er ".concat(g)).attr("fill",Qa.fill).attr("fill-opacity","100%").attr("stroke",Qa.stroke).attr("x",0).attr("y",p).attr("width",c+2*i+d/2).attr("height",e.tn.node().getBBox().height+2*r);e.nn.attr("transform","translate("+(parseFloat(a.attr("width"))+i)+","+n+")"),t.insert("rect","#"+e.nn.node().id).attr("class","er ".concat(g)).attr("fill",Qa.fill).attr("fill-opacity","100%").attr("stroke",Qa.stroke).attr("x","".concat(a.attr("x")+a.attr("width"))).attr("y",p).attr("width",u+2*i+d/2).attr("height",e.nn.node().getBBox().height+2*r),p+=Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)+2*r,g="attributeBoxOdd"==g?"attributeBoxEven":"attributeBoxOdd"}))}else f.height=Math.max(Qa.minEntityHeight,l),e.attr("transform","translate("+f.width/2+","+f.height/2+")");return f}(a,s,e[i].attributes),u=c.width,l=c.height,h=a.insert("rect","#"+o).attr("class","er entityBox").attr("fill",Qa.fill).attr("fill-opacity","100%").attr("stroke",Qa.stroke).attr("x",0).attr("y",0).attr("width",u).attr("height",l).node().getBBox();n.setNode(i,{width:h.width,height:h.height,shape:"rect",id:i})})),r},eo=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},no=0,ro=function(t){for(var e=Object.keys(t),n=0;n/gi," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(n),r},bo=-1,xo=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},_o=function(){function t(t,e,n,i,a,o,s,c){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("font-color",c).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c,u){for(var l=c.taskFontSize,h=c.taskFontFamily,f=t.split(//gi),d=0;d3?function(t){var e=Object(d.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+o.cx+","+(o.cy+2)+")")}(s):o.score<3?function(t){var e=Object(d.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+o.cx+","+(o.cy+7)+")")}(s):function(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",o.cx-5).attr("y1",o.cy+7).attr("x2",o.cx+5).attr("y2",o.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(s);var c=xo();c.x=e.x,c.y=e.y,c.fill=e.fill,c.width=n.width,c.height=n.height,c.class="task task-type-"+e.num,c.rx=3,c.ry=3,yo(i,c);var u=e.x+14;e.people.forEach((function(t){var n=e.actors[t],r={cx:u,cy:e.y,r:7,fill:n,stroke:"#000",title:t};vo(i,r),u+=10})),_o(n)(e.task,i,c.x,c.y,c.width,c.height,{class:"task"},n,e.colour)},Co=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")};ao.parser.yy=go;var Ao={leftMargin:150,diagramMarginX:50,diagramMarginY:20,taskMargin:50,width:150,height:50,taskFontSize:14,taskFontFamily:'"Open-Sans", "sans-serif"',boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},So={};var Mo=Ao.leftMargin,Oo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i,a=this,o=0;this.sequenceItems.forEach((function(s){o++;var c=a.sequenceItems.length-o+1;a.updateVal(s,"starty",e-c*Ao.boxMargin,Math.min),a.updateVal(s,"stopy",r+c*Ao.boxMargin,Math.max),a.updateVal(Oo.data,"startx",t-c*Ao.boxMargin,Math.min),a.updateVal(Oo.data,"stopx",n+c*Ao.boxMargin,Math.max),"activation"!==i&&(a.updateVal(s,"startx",t-c*Ao.boxMargin,Math.min),a.updateVal(s,"stopx",n+c*Ao.boxMargin,Math.max),a.updateVal(Oo.data,"starty",e-c*Ao.boxMargin,Math.min),a.updateVal(Oo.data,"stopy",r+c*Ao.boxMargin,Math.max))}))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(Oo.data,"startx",i,Math.min),this.updateVal(Oo.data,"starty",o,Math.min),this.updateVal(Oo.data,"stopx",a,Math.max),this.updateVal(Oo.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Do=Ao.sectionFills,No=Ao.sectionColours,Bo=function(t,e,n){for(var r="",i=n+(2*Ao.height+Ao.diagramMarginY),a=0,o="#CCC",s="black",c=0,u=0;u tspan {\n fill: ").concat(t.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(t.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(t.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(t.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(t.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .messageText {\n fill: ").concat(t.signalTextColor,";\n stroke: ").concat(t.signalTextColor,";\n }\n\n .labelBox {\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(t.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(t.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n")},gantt:function(t){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: '.concat(t.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(t.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(t.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(t.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(t.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .taskText:not([font-size]) {\n font-size: 11px;\n }\n\n .taskTextOutsideRight {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: start;\n font-size: 11px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: end;\n font-size: 11px;\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(t.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(t.taskBkgColor,";\n stroke: ").concat(t.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(t.activeTaskBkgColor,";\n stroke: ").concat(t.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(t.doneTaskBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(t.textColor," ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n")},classDiagram:Po,"classDiagram-v2":Po,class:Po,stateDiagram:jo,state:jo,git:function(){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n"},info:function(){return""},pie:function(t){return".pieTitleText {\n text-anchor: middle;\n font-size: 25px;\n fill: ".concat(t.taskTextDarkColor,";\n font-family: ").concat(t.fontFamily,";\n }\n .slice {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(t.taskTextDarkColor,";\n font-family: ").concat(t.fontFamily,";\n font-size: 17px;\n }\n")},er:function(t){return"\n .entityBox {\n fill: ".concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxOdd {\n fill: #ffffff;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxEven {\n fill: #f2f2f2;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(t.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(t.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(t.lineColor,";\n }\n")},journey:function(t){return".label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ".concat(t.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(t.textColor,"\n }\n\n .legend {\n fill: ").concat(t.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(t.textColor,"\n }\n\n .face {\n fill: #FFF8DC;\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType7):"",";\n }\n")}},Yo=function(t,e,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(Ro[t](n),"\n\n ").concat(e,"\n\n ").concat(t," { fill: apa;}\n")};function zo(t){return(zo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Uo={},$o=function(t,e,n){switch(c.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),e.args,wt(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;default:c.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}};function Wo(t){ka(t.git),me(t.flowchart),Ln(t.flowchart),void 0!==t.sequenceDiagram&&_r.setConf(I(t.sequence,t.sequenceDiagram)),_r.setConf(t.sequence),ri(t.gantt),li(t.class),zi(t.state),qi(t.state),Oa(t.class),za(t.class),ro(t.er),Lo(t.journey),Ba(t.class)}function Ho(){}var Vo=Object.freeze({render:function(t,e,n,r){Et();var i=e,a=H.detectInit(i);a&&wt(a);var o=_t();if(e.length>o.maxTextSize&&(i="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),void 0!==r)r.innerHTML="",Object(d.select)(r).append("div").attr("id","d"+t).attr("style","font-family: "+o.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var s=document.getElementById(t);s&&s.remove();var u=document.querySelector("#d"+t);u&&u.remove(),Object(d.select)("body").append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=i,i=function(t){var e=t;return e=(e=(e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/#\w+;/g,(function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"}))}(i);var l=Object(d.select)("#d"+t).node(),h=H.detectType(i),g=l.firstChild,y=g.firstChild,v="";if(void 0!==o.themeCSS&&(v+="\n".concat(o.themeCSS)),void 0!==o.fontFamily&&(v+="\n:root { --mermaid-font-family: ".concat(o.fontFamily,"}")),void 0!==o.altFontFamily&&(v+="\n:root { --mermaid-alt-font-family: ".concat(o.altFontFamily,"}")),"flowchart"===h||"flowchart-v2"===h||"graph"===h){var m=be(i);for(var b in m)v+="\n.".concat(b," > * { ").concat(m[b].styles.join(" !important; ")," !important; }"),m[b].textStyles&&(v+="\n.".concat(b," tspan { ").concat(m[b].textStyles.join(" !important; ")," !important; }"))}var x=(new f.a)("#".concat(t),Yo(h,v,o.themeVariables)),_=document.createElement("style");_.innerHTML=x,g.insertBefore(_,y);try{switch(h){case"git":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,ka(o.git),wa(i,t,!1);break;case"flowchart":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,me(o.flowchart),xe(i,t,!1);break;case"flowchart-v2":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,Ln(o.flowchart),Fn(i,t,!1);break;case"sequence":o.sequence.arrowMarkerAbsolute=o.arrowMarkerAbsolute,o.sequenceDiagram?(_r.setConf(Object.assign(o.sequence,o.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")):_r.setConf(o.sequence),_r.draw(i,t);break;case"gantt":o.gantt.arrowMarkerAbsolute=o.arrowMarkerAbsolute,ri(o.gantt),ii(i,t);break;case"class":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,li(o.class),hi(i,t);break;case"classDiagram":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,di(o.class),pi(i,t);break;case"state":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,zi(o.state),Ui(i,t);break;case"stateDiagram":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,qi(o.state),Xi(i,t);break;case"info":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,Oa(o.class),Da(i,t,p.version);break;case"pie":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,za(o.pie),Ua(i,t,p.version);break;case"er":ro(o.er),io(i,t,p.version);break;case"journey":Lo(o.journey),Fo(i,t,p.version)}}catch(e){throw La(t,p.version),e}Object(d.select)('[id="'.concat(t,'"]')).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var k=Object(d.select)("#d"+t).node().innerHTML;if(c.debug("cnf.arrowMarkerAbsolute",o.arrowMarkerAbsolute),o.arrowMarkerAbsolute&&"false"!==o.arrowMarkerAbsolute||(k=k.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),k=function(t){var e=t;return e=(e=(e=e.replace(/fl°°/g,(function(){return"&#"}))).replace(/fl°/g,(function(){return"&"}))).replace(/¶ß/g,(function(){return";"}))}(k),void 0!==n)switch(h){case"flowchart":case"flowchart-v2":n(k,Xt.bindFunctions);break;case"gantt":n(k,Qr.bindFunctions);break;case"class":case"classDiagram":n(k,cn.bindFunctions);break;default:n(k)}else c.debug("CB = undefined!");var w=Object(d.select)("#d"+t).node();return null!==w&&"function"==typeof w.remove&&Object(d.select)("#d"+t).node().remove(),k},parse:function(t){var e=H.detectInit(t);e&&c.debug("reinit ",e);var n,r=H.detectType(t);switch(c.debug("Type "+r),r){case"git":(n=ha.a).parser.yy=ua;break;case"flowchart":case"flowchart-v2":Xt.clear(),(n=Jt.a).parser.yy=Xt;break;case"sequence":(n=Hn.a).parser.yy=sr;break;case"gantt":(n=wr.a).parser.yy=Qr;break;case"class":case"classDiagram":(n=oi.a).parser.yy=cn;break;case"state":case"stateDiagram":(n=Di.a).parser.yy=Mi;break;case"info":c.debug("info info info"),(n=Sa.a).parser.yy=Ca;break;case"pie":c.debug("pie"),(n=Ra.a).parser.yy=Ia;break;case"er":c.debug("er"),(n=Xa.a).parser.yy=Ga;break;case"journey":c.debug("Journey"),(n=oo.a).parser.yy=go}return n.parser.yy.graphType=r,n.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},n.parse(t),n},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":Uo={};break;case"type_directive":Uo.type=e.toLowerCase();break;case"arg_directive":Uo.args=JSON.parse(e);break;case"close_directive":$o(t,Uo,r),Uo=null}}catch(t){c.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),c.error(t.message)}},initialize:function(t){t&&t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),dt=I({},t),t&&t.theme&&ht[t.theme]?t.themeVariables=ht[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=ht.default.getThemeVariables(t.themeVariables));var e="object"===zo(t)?function(t){return yt=I({},gt),yt=I(yt,t),t.theme&&(yt.themeVariables=ht[t.theme].getThemeVariables(t.themeVariables)),mt=bt(yt,vt),yt}(t):xt();Wo(e),u(e.logLevel)},reinitialize:Ho,getConfig:_t,setConfig:function(t){return I(mt,t),_t()},getSiteConfig:xt,updateSiteConfig:function(t){return yt=I(yt,t),bt(yt,vt),yt},reset:function(){Et()},globalReset:function(){Et(),Wo(_t())},defaultConfig:gt});u(_t().logLevel),Et(_t());var Go=Vo,qo=function(){Xo.startOnLoad?Go.getConfig().startOnLoad&&Xo.init():void 0===Xo.startOnLoad&&(c.debug("In start, no config"),Go.getConfig().startOnLoad&&Xo.init())};"undefined"!=typeof document&& +/*! + * Wait for document loaded before starting the execution + */ +window.addEventListener("load",(function(){qo()}),!1);var Xo={startOnLoad:!0,htmlLabels:!0,mermaidAPI:Go,parse:Go.parse,render:Go.render,init:function(){var t,e,n=this,r=Go.getConfig();arguments.length>=2?( +/*! sequence config was passed as #1 */ +void 0!==arguments[0]&&(Xo.sequenceConfig=arguments[0]),t=arguments[1]):t=arguments[0],"function"==typeof arguments[arguments.length-1]?(e=arguments[arguments.length-1],c.debug("Callback function found")):void 0!==r.mermaid&&("function"==typeof r.mermaid.callback?(e=r.mermaid.callback,c.debug("Callback function found")):c.debug("No Callback function found")),t=void 0===t?document.querySelectorAll(".mermaid"):"string"==typeof t?document.querySelectorAll(t):t instanceof window.Node?[t]:t,c.debug("Start On Load before: "+Xo.startOnLoad),void 0!==Xo.startOnLoad&&(c.debug("Start On Load inner: "+Xo.startOnLoad),Go.updateSiteConfig({startOnLoad:Xo.startOnLoad})),void 0!==Xo.ganttConfig&&Go.updateSiteConfig({gantt:Xo.ganttConfig});for(var a,o=H.initIdGeneratior(r.deterministicIds,r.deterministicIDSeed).next,s=function(r){var s=t[r]; +/*! Check if previously processed */if(s.getAttribute("data-processed"))return"continue";s.setAttribute("data-processed",!0);var u="mermaid-".concat(o());a=i(a=s.innerHTML).trim().replace(//gi,"
");var l=H.detectInit(a);l&&c.debug("Detected early reinit: ",l);try{Go.render(u,a,(function(t,n){s.innerHTML=t,void 0!==e&&e(u),n&&n(s)}),s)}catch(t){c.warn("Syntax Error rendering"),c.warn(t),n.parseError&&n.parseError(t)}},u=0;u=n[1]?(e.length>n[1]&&(r="invalid"),n.shift(),n.shift(),this.next=n.shift()):this.next="",r},regex:/"#*/,next:"start"},{defaultToken:"string.quoted.raw.source.rust"}]},{token:"string.quoted.double.source.rust",regex:'"',push:[{token:"string.quoted.double.source.rust",regex:'"',next:"pop"},{token:"constant.character.escape.source.rust",regex:s},{defaultToken:"string.quoted.double.source.rust"}]},{token:["keyword.source.rust","text","entity.name.function.source.rust"],regex:"\\b(fn)(\\s+)((?:r#)?[a-zA-Z_][a-zA-Z0-9_]*)"},{token:"support.constant",regex:"\\b[a-zA-Z_][\\w\\d]*::"},{token:"keyword.source.rust",regex:"\\b(?:abstract|alignof|as|become|box|break|catch|continue|const|crate|default|do|dyn|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b"},{token:"storage.type.source.rust",regex:"\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|u128|f16|f32|f64|i8|i16|i32|i64|i128|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\b"},{token:"variable.language.source.rust",regex:"\\bself\\b"},{token:"comment.line.doc.source.rust",regex:"//!.*$"},{token:"comment.line.double-dash.source.rust",regex:"//.*$"},{token:"comment.start.block.source.rust",regex:"/\\*",stateName:"comment",push:[{token:"comment.start.block.source.rust",regex:"/\\*",push:"comment"},{token:"comment.end.block.source.rust",regex:"\\*/",next:"pop"},{defaultToken:"comment.block.source.rust"}]},{token:"keyword.operator",regex:/\$|[-=]>|[-+%^=!&|<>]=?|[*/](?![*/])=?/},{token:"punctuation.operator",regex:/[?:,;.]/},{token:"paren.lparen",regex:/[\[({]/},{token:"paren.rparen",regex:/[\])}]/},{token:"constant.language.source.rust",regex:"\\b(?:true|false|Some|None|Ok|Err)\\b"},{token:"support.constant.source.rust",regex:"\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\b"},{token:"meta.preprocessor.source.rust",regex:"\\b\\w\\(\\w\\)*!|#\\[[\\w=\\(\\)_]+\\]\\b"},{token:"constant.numeric.source.rust",regex:/\b(?:0x[a-fA-F0-9_]+|0o[0-7_]+|0b[01_]+|[0-9][0-9_]*(?!\.))(?:[iu](?:size|8|16|32|64|128))?\b/},{token:"constant.numeric.source.rust",regex:/\b(?:[0-9][0-9_]*)(?:\.[0-9][0-9_]*)?(?:[Ee][+-][0-9][0-9_]*)?(?:f32|f64)?\b/}]},this.normalizeRules()};o.metaData={fileTypes:["rs","rc"],foldingStartMarker:"^.*\\bfn\\s*(\\w+\\s*)?\\([^\\)]*\\)(\\s*\\{[^\\}]*)?\\s*$",foldingStopMarker:"^\\s*\\}",name:"Rust",scopeName:"source.rust"},r.inherits(o,i),t.RustHighlightRules=o}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/rust",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/rust_highlight_rules","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./rust_highlight_rules").RustHighlightRules,o=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o,this.$behaviour=this.$defaultBehaviour};r.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/",nestable:!0},this.$quotes={'"':'"'},this.$id="ace/mode/rust"}.call(u.prototype),t.Mode=u}); (function() { + ace.require(["ace/mode/rust"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); diff --git a/print.html b/print.html new file mode 100644 index 0000000000..807387c5a5 --- /dev/null +++ b/print.html @@ -0,0 +1,2086 @@ + + + + + + Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Polkadot Vault

+
+

+
+

Polkadot Vault - Turn your smartphone into a hardware wallet

+

Polkadot Vault is a mobile application that allows any smartphone to act as an air-gapped crypto wallet. This is also known as "cold storage".

+

You can create accounts in Substrate-based networks, sign messages/transactions, and transfer funds to and from these accounts without any sort of connectivity enabled on the device.

+

You must turn off or even physically remove the smartphone's Wifi, Mobile Network, and Bluetooth to ensure that the mobile phone containing these accounts will not be exposed to any online threat. Switching to airplane mode suffices in many cases.

+

Disabling the mobile phone's networking abilities is a requirement for the app to be used as intended, check our wiki for more details.

+

Have a look at the tutorial on our wiki to learn how to use Polkadot Vault together with Polkadot-js app.

+

Any data transfer from or to the app happens using QR code. By doing so, the most sensitive piece of information, the private keys, will never leave the phone. The Polkadot Vault mobile app can be used to store any Substrate account, this includes Polkadot (DOT) and Kusama (KSM) networks.

+

Key features

+
    +
  • This is not a complete crypto wallet in itself. The Vault does not sync with blockchain, so it does not know your account balance, whether transactions were successful or even if the account exists! This is a cold wallet app that only stores keys, reads and signs messages. It should always be used with hot wallet like polkadot.js.
  • +
  • The Vault alone does not make your accounts secure. You must maintain security yourself. Airgap should be only part of your security protocol, improper use of Vault could still lead to loss of funds and/or secrets.
  • +
  • When properly used, Vault provides best achievable security with Substrate networks to-date.
  • +
+

System requirements

+

Currently Vault is available only for iOS. Android version is coming soon.

+

Getting Started

+

These tutorials and docs are heavily outdated at the moment, please use them as references or help improving

+

If you are upgrading from older version of Vault, please see changelog and upgrading Vault

+

Please note that the Vault app is an advanced tool designed for maximum security and complex features. In many use cases, more user-friendly tools would be sufficient.

+

Getting started guide

+

User Guides

+ +

About

+ +

Legacy versions

+

Older versions of this app could be useful for development, however, they are not safe for use in production. They are available at following branches:

+ +

License

+

Polkadot-Vault is GPL 3.0 licensed.

+

FAQ

+ +

About

+

What is Vault?

+

Vault is an app for an air-gapped device, it turns an offline device — usually a smartphone — into a secure hardware wallet. Vault offers you a way to securely generate, store, manage and use your blockchain credentials.

+

Should I use Vault?

+

Vault is optimized for the highest security requirements. If you already manage many accounts on multiple networks, Vault is great for you. If you have little experience with blockchain networks but still want good security affordances, you might find the learning curve steep. We strive to make Vault as intuitive as possible; get in touch via signer@parity.io or GitHub Issues if you can help us get there!

+

How does an offline device communicate with the outside world?

+

Communication happens through scanning and generating QR codes. Scanned with Vault input-QRs interact with keys stored in Vault to, generate response-QRs on behalf of those keys. Usually, input-QR is a blockchain transaction, and a response-QR is a signature for this transaction. There are tried and true cryptographic algorithms that power these QR codes, as well as some smart engineering that make your dedicated device safe to use.

+

How do I keep my keys secure?

+

Vault is a safe way to use your keys. However, that alone won't be enough to keep your keys secure. Devices break and get lost. This is why we always recommend backing up your seed phrases and derivation paths on paper. We are such big fans of paper backups that we even support a special tool to power your paper backup game by splitting your backups into shards called Banana Split.

+

How do I know I am not interacting with malicious apps or actors?

+

The Vault does not interact with a network. The app itself does not have a way to check if an app or an account you're interacting with is malicious. +If you use Vault with PolkadotJS Browser Extension, PolkadotJS Apps, or Signer Component Browser Extension they will rely on a community-driven curated list of potentially less-than-honest operators: https://polkadot.js.org/phishing/# to prevent you from interacting with certain sites and addresses. However, there are no limitations on the use of Vault with other tools.

+

I want to play with Vault to get a better feeling of how it works. Is there a way to do it without spending valuable tokens?

+

Yes. In Vault, you should add a key for an address on Westend network and request test tokens for that address, see the step-by-step guide on Polkadot Network Wiki.

+

You can use test tokens in the same way you would use value-bearing tokens.

+

For example with PolkadotJS Apps you can create a transaction on behalf of your account, generate a signature with Vault and submit it to the network. All of this without keys ever leaving your offline device.

+

Networks

+

What networks does Vault support?

+

From-the-shelf Polkadot Vault supports Polkadot, Kusama, and Westend networks. But it's not limited to these networks. More experienced users can generate metadata for any network to expand the capability of Polkadot Vault.

+

How can I update metadata version for a network?

+

Parity verifies and publishes recent metadata versions on Metadata Update Portal. With off-the-shelf Vault you can scan one of the multipart QR-"movies" same way you scan transaction QR:
+in Vault open scanner, scan the QR for the respective network and accept new metadata.

+

Currently, Metadata Update Portal follows Polkadot, Kusama, and Westend network metadata updates. Parity is open to collaboration with participants of other networks and is currently exploring safe and more decentralized ways of publishing verified metadata.

+

If you want to update networks that you've added manually, please follow the Add Metadata steps in Add New Network guide.

+

Why do I need to update network metadata versions at all?

+

It's a safety feature. Substrate-based blockchain networks can be updated and otherwise changed; without recent metadata version of a network Vault won't be able to parse a transaction correctly, and you won't be able to read it and verify what you sign. Given that Vault is an app for an air-gapped device, you have to update the network version by using camera.

+

How can I add a new network to Vault?

+

Parity verifies and publishes network specs on Metadata Update Portal. To add one of the listed networks, in Metadata Update Portal click "Chain Specs", scan the network specs QR same way you scan transaction QR: in Vault open scanner, scan the QR and accept new network spec. Then scan the multipart QR-"movie" containing recent metadata for this network.

+

Can I add a network that does not have network specs and metadata QR published anywhere?

+

Yes. Follow the Add New Network step-by-step guide.

+

Currently, the process requires you to have rust, subkey and parity-signer repository on your machine.

+

Seeds and keys

+

Can I import my keys from polkadot{.js} apps or extension to Polkadot Vault?

+

Yes. Keys are compatible between polkadot{.js} and Polkadot Vault, except for the keys generated with Ledger (BIP39). To import seed keys into Polkadot Vault, you need to know:

+
    +
  1. Seed phrase
    +It should always be backed up in paper!
  2. +
  3. Network you are adding address to and whether Polkadot Vault installed on your device has metadata for the respective network.
    +If (2) is not one of the default built-in networks, you will need to add network yourself or find a distribution center for adding networks.
  4. +
  5. Derivation path
    +Only if you are importing a derived key, usually keys generated with polkadot{.js} are seed keys.
  6. +
+

In Polkadot Vault go to Keys, then press "Plus" icon in the top right of the screen, select "Recover seed", enter display name to identify your seed, press "Next", enter the seed phrase. Done, you've got your seed key imported!
+If you are importing a derived key select the seed from which your key is derived, select account's network, press "Plus" icon next to "Derived keys", enter your derivation path.

+

What is the difference between seed key and derived key? Why should I use derived keys?

+

A seed key is a single key pair generated from a seed phrase. You can “grow” as many derived keys from a single seed by adding derivation paths to your seed phrase.

+

Learn more about types of derivation paths on substrate.io.

+

Derivation path is sensitive information, but knowing the derivation path is not enough to recover a key. Derived keys cannot be backed up without both of the ingredients: seed phrase (can be shared between multiple keys) and a derivation path (unique for each of the keys “grown” from that seed).

+

The main reason to use derived keys is how easy it is to back up (and restore from a backup) a derivation path compared to seed phrase.

+

What is an identicon, the image next to my keys?

+

An identicon is a visual hash of a public key — a unique picture generated from your public key. The same public key should have the same identicon regardless of the application. It is a good tool to distinguish quickly between keys. However, when interacting with keys, i.g. verifying a recipient of a transaction, do not rely only on identicons, it is better to check the full public address.

+

How can I rename one of my seeds?

+

Due to security considerations, you cannot rename a seed. Please back up the seed and derived keys, remove it and add the seed again with a new name instead.

+

Security and Privacy

+

Device security

+

Polkadot Vault is built to be used offline. The mobile device used to run the app will hold important information that needs to be kept securely stored. It is therefore advised to:

+
    +
  • Get a separate mobile device.
  • +
  • Make a factory reset.
  • +
  • Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices).
  • +
  • Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords.
  • +
  • Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device.
  • +
  • Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.
  • +
+

How to get it and use it?

+

Install the app

+

The app is available in beta for Android and iOS :

+ +

Please double check carefully the origin of the app, and make sure that the company distributing it is Parity Technologies. Usual security advice apply to this air-gapped wallet:

+
    +
  • When creating an account using Polkadot Vault Mobile app, make sure to write down the recovery phrase and store it in safe places.
  • +
  • Always double check the information of the transactions you are about to sign or send.
  • +
  • Make sure to first transfer a small amount of Ether with the app and verify that everything is working as expected before transferring larger amounts of Ether.
  • +
+

How to update Polkadot Vault securely

+

Once Polkadot Vault is installed, your device should never go online. This would put your private keys at threat. To update, you will need to :

+
    +
  1. Make sure you possess the recovery phrase for each of your accounts. You can find it on Polkadot Vault by :
  2. +
+
    +
  • v4.0 choosing an identity > click the user icon at the top right > “Show Recovery Phrase”
  • +
  • v2.2 tapping an account > 3 dots menu at the top right > “Backup Recovery Phrase”
  • +
  • v2.0 tapping an account > tap on the account address > “Backup Recovery Phrase”
  • +
+
    +
  1. Factory reset the device.
  2. +
  3. Enable full-disk encryption on the device and set a strong password (might not be on by default, for example for older Android devices).
  4. +
  5. Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords.
  6. +
  7. Install Polkadot Vault from the Apple store or Android store or download the APK from Polkadot Vault's Github repository (make sure you are on the right website and verify the checksum)
  8. +
  9. Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth, and any other connection ability the device has.
  10. +
  11. Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.
  12. +
  13. Recover your accounts.
  14. +
+

What data does it collect?

+

None, it's as simple as that. The Polkadot Vault Mobile Android and iOS apps do not send any sort of data to Parity Technologies or any partner and work completely offline once installed.

+

Polkadot Vault Accounts Management

+

Polkadot Vault v4 has introduced the Hierarchical Deterministic Key Derivation (HDKD) feature for Substrate networks. This article explains how to use this feature.

+
    +
  • Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.
  • +
+

Introduction

+

Seed is the starting point for generating accounts. The seed itself does not have any network affiliation. For Substrate networks, generating a new accounts means entering a derivation path and choosing a network. With this feature, you can manage as many accounts as needed with just one seed phrase safely stored.

+

Key Generation

+

Create an account for a Substrate based network.

+

Key generation also refers to accounts creation, with your created Identity:

+
    +
  • Go to key manager and create a new seed or select an existing one
  • +
  • Choose a network
  • +
  • Tap on any key
  • +
  • Tap Derive or N+1 Button
  • +
  • In path derivation screen, input any path and name you like (or accept naming suggestion)
  • +
  • (optional) type password
  • +
  • Tap Derive Button
  • +
  • Done, you can start using new address.
  • +
+

The form of path

+

Paths also refer to the chain codes which described in , though it is different from BIP-32 style:

+
    +
  • Soft derivation starts with a single slash, like: /soft
  • +
  • Hard derivation starts with a double slash, like: //hard
  • +
+

Users are able to create any combination of hard derivation with // and/or soft derivation with /.

+

The encoded string are limited to 32 Bytes.

+

For technical information about the soft and hard derivations on Substrate, please refer to introduction here.

+

Path also could contain optional password; in Subkey standard password is prefixed with ///. However, for convenience, Vault device has separate password entry field with password confirmation, thus do not add /// to derivation field, it will result in error - instead omit /// and type password into its' special field. It will not be stored on the device and will be required for any operation that requires private key of the account. There is no way to restore this password if it is lost so please back it up carefully.

+

Further notes

+
    +
  • With the same BIP32 seed users could create keys under different networks.
  • +
  • Each derived account is bound to certain networks, which prevents it to be misused in another network until it is explicitly added for that network as well. Root account is available for all networks by default.
  • +
+

References:

+
    +
  1. https://github.com/w3f/schnorrkel
  2. +
  3. https://wiki.polkadot.network/docs/en/learn-keys
  4. +
+

Changelog

+

5.0.1

+

Android version release, minor fixes

+

New in version 5.0.0

+

Architecture

+

No more typescript or react native. Backend is completely in Rust, frontend is in native.

+

Building

+

Dependencies

+

Number of dependencies was greatly reduced; no npm/yarn/nodejs/cocoapods, etc. All dependencies are handled by:

+
    +
  • Cargo (rust packages)
  • +
  • Xcode (only default iOS frameworks are used)
  • +
  • Gradle
  • +
+

Rust backend

+

Rust libraries were moved back into the repository. Crypto functions are imported from Substrate. All logic and most of storage is written in Rust. An important hack here is that rust/signer crate has 2 versions of Cargo.toml for android and iOS architectures, as target library features could not be adjusted by normal means.

+

Native frontend

+

Frontend for both iOS and Android re-written in native frameworks. Thus, standard out-of-the-box build scripts could be used for building once Rust libraries are built and linked

+

Features

+

Secure seed storage

+

Secrets are stored in devices' encrypted storage and some effort is made to prevent them leaking in system memory. Thus, all is as safe as the phone is - the same credentials used for unlocking the phone are used to unlock seeds. User is responsible to keep them adequate.

+

Transaction preview

+

Transactions content is shown before signing; no hash signing is allowed, but signing messages is possible.

+

History feature

+

The Vault now logs all operations it performs. It it important to remember that this is not log of account operations, but log of device history. This history could be cleared if needed, but not modified by other means. Detected presence of network connection is also logged.

+

N+1 derivation

+

Much requested feature that makes Vault automatically increment numbered seeds on creation.

+

Network and metadata updates

+

All network data updates now could be performed through scanning QR codes. Whenever some update is needed, most probably you should just scan some QR video. Don't worry about skipped frames, it's fountain code so you only need enough frames.

+

All updates could be signed, and signing key will be trusted on first use, so Vault device should be linked to single source of authority on correct metadata.

+

Key re-use in different networks

+

Keys could be used only in one network. Need to re-use key in another network? Just create key with the same derivation path in that network to allow re-use and it will work.

+

User Guides

+ +

Starting with Vault

+

This is suggested usage pattern; you should adjust it to your security protocol if you are certain you know what you are doing.

+

Installation

+

Factory reset the phone

+

The Vault should be installed in most secure environment possible. To achieve that, the phone should be reset to factory state.

+

Wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor.

+

Set up phone

+

Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons).

+

Install Vault

+

Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet!

+

Disable network

+

Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app!

+

First start

+

When you first launch Vault, it prompts you to read and accept terms and conditions and privacy policy. Once that is done, the database is pre-populated with built-in networks and Vault is ready for use. It could import network data or read transactions, but to sign anything you need to create keys.

+ +

Create keys

+

Open key manager by tapping bottom left symbol. On fresh start you will be prompted to create seed (otherwise you could always create more seeds by tapping New seed button in Key Manager). Enter any convenient seed name (it does not matter anything and is not used anywhere except for this particulat Vault device) and - if you would like to use custom seed phrase - switch to recovery mode and type the seed phrase. Custom seed phrase should be used only to recover or import existing key(s), do not input custom seed phrase unless it is properly random! Security of your accounts relies on randomness of seed phrase. If you are generating new seed phrase, use built-in random generator and do not input a custom seed phrase.

+

Once you click create button, you will be prompted to authenticate yourself. This will happen every time cruptographic engine of the phone is used to handle seeds - on all creations, backups, derivations and signatures and in some OS versions on starting the Vault.

+

You will see the created secret seed. Please back it up on paper and store it in safe place. If you lose your Vault device or it will become non-functional, you will be able to recover your keys using this seed phrase. Anyone could recover your keys with knowledge of this phrase. If you lose this seed phrase, though, it will be impossible to recover your keys. You can check the seed phrase anytime in Settings menu, but make sure that it is backed up at all times.

+

Once you dismiss seed phrase backup screen, the seed and some associated keys will be created. For every network known to the Vault, a network root derivation key will be generated, hard-derived from seed phrase with network name. A root key will be generated and made available in all networks. Do not use the root key unless you know what you do!.

+

To learn more on key generation, read subkey specifications that Vault follows tightly and Vault key management.

+

Export public key

+

Once you have a keypair you would like to use, you should first export it to hot wallet. Tap the key and select Export button. You will see the export QR code you can use with hot wallet.

+

Details on signing with Pokadot.js Apps

+

Upgrading Vault

+

First of all, you need to be certain you want to upgrade Vault. Starting from v5, all network information could be downloaded through QR codes and upgrades are needed only to add new software features.

+

Preparation to upgrade

+

Back up your keys

+

Make sure your keys are backed up - you should have all seed phrases and derivations recorded somewhere. Once you proceed to the next step, there is no way to recover lost information.

+

Make sure to back up all keys for all networks you use. Ideally you should already have some kind of backup, make sure it is up to date.

+

Wipe Vault device

+

Once you are certain that you have backed up everything, open settings, select Wipe all data button and confirm your action. All data in the Vault will be factory reset; congratulations!

+

Factory reset the phone

+

When the Vault is removed, wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor.

+

Set up phone

+

Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons)

+

Install Vault

+

Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet!

+

Disable network

+

Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app!

+

Start the Vault

+

Start the app. Read and accept information provided on launch. Congratulations! The app is ready to use now, however it does not have any keys and only few basic built-in networks. Proceed with setting up keys and adding new networks.

+ +

Add New Network

+

Polkadot Vault supports adding any substrate-based networks or updating an existing network via QR code.

+

After you've installed required software, you need to add Network's Specs to Vault and add Network Metadata for this network, so that Vault is able to decode, and you could read and verify transactions you are signing on this network.

+

If you need to update metadata for already existing network you only need to update Network Metadata. +Off-the-shelf Vault comes with networks that you can update by scanning a multipart QR codes that contain recent metadata for these networks at Metadata Update Portal.

+

Network Specs

+
    +
  1. Get
  2. +
  3. Sign
  4. +
  5. Feed into Vault
  6. +
+

Network Metadata

+
    +
  1. Get
  2. +
  3. Sign
  4. +
  5. Feed into Vault
  6. +
+

Prerequisites

+
    +
  • +Network details +
      +
    • +RPC endpoint (websocket URL)
      +Hint: You can RPC endpoints for some of the public networks e.g. in polkadot-js/apps repository
    • +
    • +Encryption algorithm
    • +
    +
  • +
  • +rust
  • +
  • +a clone of parity-signer repository
  • +
  • +subkey
  • +
  • +Dedicated keypair specifically for signing updates
    +Please make sure you have a backup <secret-phrase> and Public key (hex) of this keypair. You will be able to update a network only with metadata that is signed with the same keypair as network specs. You can generate it with any tool of your choice, e.g with subkey: subkey generate.
  • +
+ +
+
+
+

Let's get started!

+

Add Network Specs

+

Get Network Specs

+

In parity-signer/rust/generate_message

+
cargo run add-specs -u <network-ws-url> --encryption <crypto>
+
+
+
// e.g.
+cargo run add-specs -u wss://statemint-rpc.polkadot.io --encryption sr25519
+
+
+

For networks supporting several tokens:

+
cargo run add-specs -d -u <network-ws-url> --encryption <crypto> --token-decimals <decimals> --token-unit <SYMBOL>
+
+
+
// e.g.
+cargo run add-specs -d -u wss://karura-rpc-0.aca-api.network --encryption sr25519 --token-decimals 12 --token-unit KAR
+
+
+
+

Now your <specs-file> is in parity-signer/rust/files/for_signing.

+

Hint: you can read more about interface with hot database if you want to maintain it.

+ +

Sign Network Spec

+

Get signature

+

In parity-signer/rust/files/for_signing

+
cat <spec-file> | subkey sign --suri <seed-phrase-and-derivation>
+
+
// e.g.
+cat sign_me_add_specs_statemint_sr25519 | subkey sign --suri "bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice"
+
+

This will return a <signature> you need to make a signed QR.

+

Make signed QR

+

In parity-signer/rust/generate_message

+
cargo run --release make --goal qr --crypto <crypto> --msg add-specs --payload <spec-file> --verifier-hex <public-key> --signature-hex <signature>
+
+
// e.g.
+cargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemint_sr25519 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex fa3ed5e1156d3d51349cd9bb4257387d8e32d49861c0952eaff1c2d982332e13afa8856bb6dfc684263aa3570499e067d4d78ea2dfa7a9b85e8ea273d3a81a86
+
+
+

Now your <spec-qr> is in parity-signer/rust/files/signed

+

Feed Network Specs into Vault

+

In Vault open scanner, scan your <spec-qr> and approve chain specs.

+
+

Add Network Metadata

+

Get Network Metadata

+

In parity-signer/rust/generate_message

+
cargo run load-metadata -d -u `<network-ws-url>`
+
+
// e.g.
+cargo run load-metadata -d -u wss://statemint-rpc.polkadot.io
+
+
+

This will fetch fresh <metadata_file>, update the database with it, and - most relevant to us currently - generate file with message body in parity-signer/rust/files/for_signing.

+

Sign Network Metadata

+

Get Signature

+

In parity-signer/rust/files/for_signing

+
cat <metadata-file> | subkey sign --suri <seed-phrase-and-derivation>
+
+
// e.g.
+cat sign_me_load_metadata_statemintV800 | subkey sign --suri "bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice"
+
+

Make signed QR

+

In parity-signer/rust/generate_message

+
cargo run --release make --goal qr --crypto <crypto> --msg load-metadata --payload <metadata-file> --verifier-hex <public-key> --signature-hex <signature>
+
+
// e.g.
+cargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load-metadata_statemintV800 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex 6a8f8dab854bec99bd8534102a964a4e71f4370683e7ff116c84d7e8d5cb344efd3b90d27059b7c8058f5c4a5230b792009c351a16c007237921bcae2ede2d84
+
+

This QR might take some time to be generated. After it is finished you can find your <metadata-qr> in parity-signer/rust/files/signed. It is a multipart QR-"movie", if your image viewer does not render it correctly, we suggest to open it in a browser.

+

Feed Network Metadata into Vault

+

In Vault open scanner, scan your <metadata-qr> and accept new metadata.

+
+
+
+

Congratulations! You've fetched network specs, signed them, fed them into Vault, fetched recent metadata for the network, signed and fed it into Vault as well. Now you are ready to safely sign transactions on this network.

+

Polkadot Vault tutorial with Polkadot-js apps

+

This tutorial will walk you through setting up a Kusama account with the Polkadot Vault Android or iOS App and then use this account together with Polkadot-js apps to see your balance and transfer funds or perform any extrinsic from this account.

+
    +
  • Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.
  • +
+

Summary

+ +

1. Get Polkadot Vault mobile application

+

Device security

+

Polkadot Vault is meant to be used offline. The mobile device used to run Polkadot Vault will hold valuable information that needs to be kept securely stored. It is therefore advised to:

+
    +
  • Get a Polkadot Vault dedicated mobile device.
  • +
  • Make a factory reset.
  • +
  • Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices).
  • +
  • Do not use any biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords.
  • +
  • Once Polkadot Vault has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device.
  • +
  • Only charge the phone using a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.
  • +
+

Please find more info here about the Polkadot Vault application.

+

Install Polkadot Vault mobile application

+

Install Polkadot Vault making sure that it originated from Parity Technologies

+ +

2. Setup or recover an Identity

+

When launching the app for the first time, no identity has been set up yet. At this stage, you will either want to create an identity directly from your mobile device or recover an identity previously created.

+

Create an identity

+

Tap on the Create button, and give a name to this identity.

+

In the next step, your recovery phrase will be presented to you. Think of it as a master key. If you lose it, you lose your money. +Write this recovery phrase down and store it in a safe place. +If your phone gets stolen/broken/forgotten this will be the only way to recover your account.

+

You will then be asked to choose a pin code. This pin will be needed later on to unlock your account to manage the identity or sign a transaction.

+

The next screen will allow you to select a network to generate an account. +If you choose an Ethereum network, the related Ethereum account will be generated for the identity,

+

If you choose a Substrate network (like Kusama), you will first create a root account, and then you will be able to derive more accounts with specified paths and names. The name can be changed later on, but once the path is set, it can not be changed. More information about path derivation see here.

+

For each derived account, you will be able to see the address and its related QR code.

+

create account

+

Recover an identity with your recovery phrase

+

If you already have an account created with either Polkadot Vault or any other wallet, you can recover it by doing so:

+
    +
  • Tap on the top right side user icon, and choose + Add Identity.
  • +
  • Input the new identity name and tap the Recover Identity button.
  • +
  • Type in the recovery phrase, word suggestion helps you prevent any typo. The field will turn red if the recovery phrase is not a bip39.
  • +
  • Tap Recover Identity.
  • +
  • Select a PIN number and confirm it by typing it again.
  • +
  • Identity generated, now you can select the network to create the first account.
  • +
+

NOTICE: For V3 user, after recovering the seed phrase of Kusama account, the account will appear as an identity root account aside with identity name in the network selection screen.

+

3. Add Polkadot Vault's account to Polkadot-js apps

+

To be able to follow this tutorial and interact with the Blockchain from a freshly created account on Polkadot Vault, you will need to get some KSMs on this account first. Polkadot-js apps allows you to manage your Vault account seamlessly.

+
    +
  • Visit Polkadot-js apps website.
  • +
  • Go to Accounts from the left sidebar.
  • +
  • Click on Add via QR button in the top right-hand corner.
  • +
  • It will ask for the webcam permission for you to scan the Polkadot Vault's account QR code, accept it.
  • +
  • On Polkadot Vault, choose on the account you want to copy the address of.
  • +
  • Scan the QR code displayed on your phone with your computer's webcam. Make sure the QR code is fully displayed on your mobile's screen.
  • +
  • You can now name this account on Polkadot-js apps.
  • +
+

4. Sign a transaction

+

Assuming that your Polkadot Vault account now has funds, you will be able to send some funds securely to anyone, without transferring your private key, and without needing any internet connection on your mobile phone.

+
    +
  • On Polkadot-js apps, click on the send button next to your account.
  • +
  • On Polkadot-js apps, enter the address of the account you want to send funds to. Make sure to try with a small amount of money first before sending larger amounts.
  • +
  • Click on Make Transfer
  • +
  • Review the transaction, you can add tip to this transaction.
  • +
  • Click on Scan via QR Code when you're done.
  • +
+

Polkadot Vault Polkadot send transaction

+

You will now be presented with a QR code that represents the transaction. Since this transaction is sending funds from your Polkadot Vault mobile app account, only this account (sitting on your phone) can sign and authorize this transaction. This is what we'll do in the next steps:

+
    +
  • From the Polkadot Vault account overview, tap the scan button on the top right and scan the QR code presented by the Polkadot-js apps website.
  • +
  • Review the transaction addresses and the amount to send on your phone. The amount and addresses must match what you've entered in apps. If you got phished, this is where you can realize it and reject the transaction.
  • +
  • Once you're sure, scroll down and click Sign Transaction to enter your pin and get the QR code of the scanned transaction.
  • +
+

Sign Polkadot apps transaction

+

Your phone has now signed the transaction offline using your Polkadot Vault account private key. The QR code that is now displayed on your phone represents a signed transaction that can be broadcasted. We will do this in the next steps:

+
    +
  • On Polkadot-js apps, click on Scan Signature QR, this will ask to turn on your webcam again.
  • +
  • Face your phone's display to your webcam for the website to be able to read the signed transaction.
  • +
  • Your transaction is sent automatically.
  • +
  • Congrats you just sent funds from an air-gapped account :)
  • +
+

Recover Account from PolkadotJS

+

The default behavior on Polkadot Vault and PolkadotJS Apps is a little different. This tutorial will walk you through recovering an account on Polkadot Vault from PolkadotJS Apps.

+
    +
  • Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.
  • +
+

Get the mnemonic phrase and path

+

When creating an account on PolkadotJS, it will give you a mnemonic phrase on the beginning without any key derivation. You can change it if you click Advanced creation options button, here you can specify any path you like, leave it as an empty string if you do not want changes.

+

Create Account on PolkadotJS Apps

+

Recover identity with mnemonic phrase

+

On Polkadot Vault, each mnemonic phrase represents an identity, every account starts with an identity, and identity could derive infinite accounts from it. So firstly let's recover the identity from the mnemonic phrase.

+

recover the identity.

+

After tapping one network from the list, you will have the default account created for this network with a default path (as on the above image, //polkadot), but this one is different from the one created from Polkadot.js Apps, because the paths are different.

+

create the account by path

+

On Polkadot Vault, accounts are grouped by different networks, and the accounts generated by the default way are always prefixed with the network name. For example, //polkadot//fund or //polkadot//staking. So to recover an account with an arbitrary path, we need tap Add Network Account -> Create Custom Path.

+

Recover Account

+

Here We can input the path from PolkadotJS Apps, if you do not have a specific path, then just leave it empty. And then after we choose the network, we will have the same account as we created from PolkadotJS Apps.

+

Development

+

Build

+

First and foremost, make sure you have the latest Rust installed in your system. Nothing will work without Rust.

+

If you get errors like cargo: feature X is required, it most likely means you have an old version of Rust. Update it by running rustup update stable.

+

iOS

+

1. You probably already have Xcode installed if you are reading this. If not, go get it.

+

2. Compile the core Rust library first:

+
cd scripts && ./build.sh ios
+
+

3. Open the NativeSigner.xcodeproj project from the ios folder in your Xcode and click Run (Cmd+R).

+

4. The first time you start the app, you will need to put your device into Airplane Mode. In the iOS simulator, you can do this by turning off WiFi on your Mac (yes, this is an official apple-recommended way).

+

However, we strongly recommend that you use a real device for development, as some important parts (e.g. camera) may not work in the simulator.

+

Android

+

1. Download Android Studio.

+

2. Open the project from the android directory.

+

3. Install NDK. Go to File -> Project Structure -> SDK Location. Next to the "Android NDK location" section, click "Download Android NDK" button.

+

We highly recommend you to update all existing plugins and SDK's for Kotlin, Gradle, etc even if you just downloaded a fresh Android Studio. It's always a good idea to restart Android Studio after that. This can save you many hours on Stackoverflow trying to fix random errors like "NDK not found".

+

4. Connect your device or create a virtual one. Open Tools -> Device Manager and create a new phone simulator with the latest Android.

+

5. (macOS) Specify path to python in local.properties.

+

rust.pythonCommand=python3

+

6. Run the project (Ctrl+R). It should build the Rust core library automatically.

+

Vault structure

+

Architectural structure

+

On top level, Vault consists of following parts:

+
    +
  1. Rust backend core
  2. +
  3. FFI interface
  4. +
  5. Native frontend
  6. +
  7. Database
  8. +
+

Rust backend

+

There are 3 actual endpoints in rust folder: signer, which is source of +library used for Vault itself; generate_message, which is used to update +Vault repo with new built-in network information and to generate +over-the-airgap updates; and qr_reader_pc which is a minimalistic app to parse +qr codes that we had to write since there was no reasonably working alternative.

+

Sub-folders of the rust folder:

+
    +
  • constants — constant values defined for the whole workspace.
  • +
  • db_handling — all database-related operations for Vault and +generate_message tool. Most of the business logic is contained here.
  • +
  • defaults — built-in and test data for database
  • +
  • definitions — objects used across the workspace are defined here
  • +
  • files — contains test files and is used for build and update generation +processes. Most contents are gitignored.
  • +
  • generate_message — tool to generate over-the-airgap updates and maintain +network info database on hot side
  • +
  • navigator — navigation for Vault app; it is realized in rust to unify app +behavior across the platforms
  • +
  • parser - parses signable transactions. This is internal logic for +transaction_parsing that is used when signable transaction is identified, but +it could be used as a standalone lib for the same purpose.
  • +
  • printing_balance — small lib to render tokens with proper units
  • +
  • qr_reader_pc — small standalone PC app to parse QR codes in Vault +ecosystem. Also is capable of parsing multiframe payloads (theoretically, in +practice it is not feasible due to PC webcam low performance)
  • +
  • qr_reader_phone — logic to parse QR payloads in Vault
  • +
  • qrcode_rtx — multiframe erasure-encoded payload generator for signer update +QR animation.
  • +
  • qrcode_static — generation of static qr codes used all over the workspace
  • +
  • signer — FFI interface crate to generate bindings that bridge native code +and rust backend
  • +
  • transaction_parsing — high-level parser for all QR payloads sent into Vault
  • +
  • transaction_signing — all operations that could be performed when user +accepts payload parsed with transaction_parsing
  • +
+

FFI interface

+

For interfacing rust code and native interface we use +uniffi framework. It is a framework +intended to aid building cross-platform software in Rust especially for the +cases of re-using components written in Rust in the smartphone application +development contexts. Other than Vault itself one of the most notable users of +the uniffi framework are the Mozilla Application Services

+

uniffi framework provides a way for the developer to define a clear and a +typesafe FFI interface between components written in Rust and languages such +as Kotlin and Swift. This approach leads to a much more robust architecture +than implementing a homegrown FFI with, say, passing JSON-serialized data back +and forth between Kotlin and Rust code. Here is why.

+

Suppose the application needs to pass a following structure through FFI from +Kotlin to Rust or back:

+
#[derive(Serialize, Deserialize)]
+ struct Address { street:String, city: String, }
+

This would mean that on the Kotlin side of the FFI there would have to be some +way of turning this type from JSON into a Kotlin type. It may be some sort of +scheme or even a manual JSON value-by-key data extraction.

+

Now suppose this struct is changed by adding and removing some fields:

+
#[derive(Serialize, Deserialize)]
+ struct Address { country: String, city: String, index: usize, }
+

After this change on a Rust-side the developer would have to remember to +reflect these changes on the Kotlin and Swift sides and if that is not done +there is a chance that it will not be caught in build-time by CI. It is quite +hard to remember everything and having a guarantee that such things would be +caught at compile time is much better than not having this sort of guarantee. +One of the things uniffi solves is exactly this: it provides compile-time +guarantees of typesafety.

+

The other concern with the JSON serialization approach is performance. As long +as small objects are transferred back and forth it is no trouble encoding them +into strings. But suppose the application requires transferring bigger blobs of +binary data such as png images or even some metadata files. Using JSON would +force the developer to encode such blobs as Strings before passing them into +FFI and decoding them back into binary blobs on the other side of the FFI. +uniffi helps to avoid this also.

+

Native frontend

+

Native frontends are made separately for each supported platform. To keep things +uniform, interfaces are made as simple as possible and as much code is written +in unified Rust component, as possible. Yet, platform-specific functions, +including runtime management and threading, are also accessed through native +framework. The structure of native frontend follows modern (2022) reactive +design pattern of View-Action-Model triad. Thus, all backend is located in data +model section, along with few native business logic components.

+

It is important to note, that native navigation is not used, as due to +subtle differences in its seemingly uniform design across platforms. Navigation +is instead implemented on Rust side and, as an additional advantage, is tested +there at lower computational cost for CI pipelines.

+

Database

+

For storage of all data except secrets, a sled database is used. Choice of db +was based on its lightweightness, reliability, portability.

+

Vault database structure

+

Functional structure

+

Vault has the following systems:

+
    +
  • Secure key management
  • +
  • Signing
  • +
  • Transaction parsing
  • +
  • Transaction visualization
  • +
  • Airgap data transfer
  • +
  • Airgap updating
  • +
  • Network detector
  • +
  • Logging
  • +
  • Self-signing updating capability
  • +
  • UI
  • +
+

These systems are located in different parts the app and some of them rely on +hot-side infrastructure. The general design goal was to isolate as much as +possible in easily maintainable Rust code and keep only necessary functions in +native side. Currently, those include:

+
    +
  • Hardware secret storage: we rely on hardware designer's KMS in accordance with +best practices
  • +
  • Network detector: network operations are limited by OS and we try to keep +network access permissions for the app to minimum while still maintaining +simple breach detection
  • +
  • Camera: currently image capture and recognition systems implementations in +native environments by far surpass 3rd party ones. This might change in the +future, but at least image capture will be managed by OS to maintain platform +compatibility.
  • +
  • UI: we use native frameworks and components for rendering and user interaction +for best look and feel of the app.
  • +
+

Secure key management

+

Keypairs used in Vault are generated from secret seed phrase, derivation path +and optional secret password, in accordance with specifications described in +subkey manual using code imported directly from substrate codebase for best +conformance.

+

Secret seed phrase storage

+

Secret seed phrase is stored as a string in devices original KMS. It is +symmetrically encrypted with a strong key that either is stored in a +hardware-protected keyring or uses biometric data (in case of legacy android +devices without strongbox system). Secrets access is managed by operating +system's built-in authorization interface. Authorization is required for +creation of seeds, access to seeds and removal of seeds. One particular special +case is addition of the first seed on iOS platform, that does not trigger +authorization mechanism as the storage is empty at this moment; this is in +agreement with iOS key management system design and potentially leads to a +threat of attacker replacing a single key by adding it to empty device; this +attack is countered by authorization on seed removal.

+

Thus, secret seeds source of truth is KMS. To synchronize the rest of the app, +list of seed identifiers is sent to backend on app startup and on all events +related to changes in this list by calling update_seed_names(Vec<String>).

+

Random seed generator and seed recovery tools are implemented in Rust. These +are the only 2 cases where seed originates not in KMS.

+

Derivation path management

+

The most complex part of key management is storage of derivation strings and +public keys. Improper handling here may lead to user's loss of control over +their assets.

+

Key records are stored as strings in database associated with secret seed +identifiers, crypto algorithm, and list of allowed networks. Public key and its +cryptographic algorithm are used to deterministically generate database record +key - thus by design distinct key entries directly correspond to addresses on +chain.

+

Creation of new records requires generation of public keys through derivation +process, thus secret seed should be queried - so adding items to this database +requires authentication.

+

Substrate keys could be natively used across all networks supporting their +crypto algorithm. This may lead to accidental re-use of keys; thus it is not +forbidden by the app, but networks are isolated unless user explicitly expresses +desire to enable key in given network. From user side, it is abstracted into +creation of independent addresses; however, real implementation stores addresses +with public keys as storage keys and thus does not distinguish between networks. +To isolate networks, each key stores a field with a list of allowed networks, +and when user "creates" address with the same pubkey as already existing one, it +is just another network added to the list of networks.

+

Keys could be imported through QR code created by generate_message tool +(instructions). A +plaintext newline-separated list of derivations should be supplied to the tool +along with network identifier; the import thus is bound to certain network, +however, it is not bound to any particular seed - user can select any of +created seeds and, after authorization, create keys with given paths. Bulk +import of password-protected keys is forbidden at the moment.

+

Optional password

+

Optional password (part of derivation path after ///) is never stored, only +addresses that have password in their derivation path are marked. Thus, password +is queried every time it is needed with a tool separate from OS authentication +interface, but together with authentication screen, as password is always used +with a secret seed phrase.

+

Memory safety in secure key management

+

All memory handles by native framework relies on native framework's memory +protection mechanisms (JVM virtualization and Swift isolation and garbage +collection). However, when secrets are processed in Rust, no inherent designed +memory safety features are available. To prevent secrets remaining in memory +after their use, zeroize library is used. Also, describe string destruction +protocol or fix it

+

Signing

+

Every payload to be signed is first extracted from transfer payload in agreement +with UOS specification and polkadot-js implementation. Only payloads that could +be parsed and visualized somehow could be signed to avoid blind signing - thus +on parser error no signable payload is produced and signing procedure is not +initiated.

+

When signable payload is ready, it is stored in TRANSACTION tree while +user makes decision on whether to sign it. While in storage, database checksum +is monitored for changes.

+

Signing uses private key generated from KMS-protected secret seed phrase, +derivation string and optional password. Signing operation itself is imported +directly from substrate codebase as dependency.

+

Signing event or its failure is logged and signature wrapped in UOS format is +presented as a qr static image on the phone.

+

Transaction parsing

+

Transaction parsing process is described in UOS format documentation

+

Transaction visualization

+

Signable transaction is decomposed into hierarchical cards for clarity. All +possible scale-decodable types are assigned to generalized visualization +patterns ("transaction cards") with some types having special visualizations +(balance formatted with proper decimals and units, identicons added to +identities, etc.). Each card is assigned order and indent that allow the +cards to be shown in a lazy view environment. Thus, any networks that have +minimal metadata requirements should be decodable and visualizable.

+

Some cards also include documentation entries fetched from metadata. Those could +be expanded in UI on touch.

+

Thus, user has opportunity to read the whole transaction before signing.

+

Airgap data transfer

+

Transactions are encoded in accordance to UOS standard in QR codes. QR codes can +be sent into Vault - through static frames or dynamic multiframe animations - +and back - only as static frames. QR codes are decoded through native image +recognition system and decoded through rust backend; output QR codes are +generated in png format by backend. There are 2 formats of multiframe QR codes: +legacy multiframe and raptorq multiframe. Legacy multiframe format requires +all frames in animation to be collected and is thus unpractical for larger +payloads. RaptorQ multiframe format allows any subset of frames to be collected +and thus allows large payloads to be transferred effortlessly.

+

Fast multiframe transfer works efficiently at 30 fps. Typical large payloads +contain up to 200 frames at current state of networks. This can be theoretically +performed in under 10 seconds; practically this works in under 1 minute.

+

Airgap updating

+

Vault can download new networks and metadata updates from QR data. To prevent +malicious updates from compromising security, a system of certificates is +implemented.

+

Updates could be generated by any user; they can also be distributed in signed form to delegate validity check job to trusted parties. These trusted parties should sign metadata with their asymmetric key - certificate - and they become verifiers once their update is uploaded to Vault. There are 2 tiers of certificates - "general" and "custom", with the first allowing more comfortable use of Vault at cost of only one general verifier allowed.

+

Rules about verifier certificates are designed around simplicity of security protocol: one trusted party becomes main source of trust and updates generated by it are just accepted. If that party does not have all required updates available, other party can be added as custom verifier. That verifier is not allowed to change specs at will and suspicious activity by custom verifier would interfere with network usage thus stopping user from doing potentially harmful stuff. This allows less strenuous security policy on user side.

+

It is important to note that certificates could not be effectively revoked considering airgapped nature of the app, thus it is recommended to keep their keys on airgapped Vault devices if updates signed by these certificates are distributed publicly.

+

More on certificates

+

Network detector

+

An additional security feature is network detector. When the app is on, it runs +in the background (on low-priority thread) and attempts to monitor the network +availability. This detector is implemented differently on different platforms +and has different features and limitations; however, it does not and could not +provide full connectivity monitoring and proper maintaining of airgap is +dependent on user. Vault device should always be kept in airplane mode and all +other connectivity should be disabled.

+

The basic idea of network detection alertness is that when network connectivity +is detected, 3 things happen:

+
    +
  1. Event is logged in history
  2. +
  3. Visual indication of network status is presented to user (shield in corner of +screen and message in alert activated by the shield)
  4. +
  5. Certain Vault functions are disabled (user authentication, seed and key +creation, etc.) - features that bring secret material into active app memory +from storage
  6. +
+

When network connectivity is lost, only visual indication changes. To restore +clean state of Vault, user should acknowledge safety alert by pressing on +shield icon, reading and accepting the warning. Upon acknowledging, it is logged +in history, visual indication changes to green and all normal Vault functions +are restored.

+

Network detector in iOS

+

Airplane mode detection in iOS is forbidden and may lead to expulsion of the app +from the App Store. Thus, detector relies on probing network interfaces. If any +network interface is up, network alert is triggered.

+

Network detector in Android

+

Network detector is triggered directly by airplane mode change event.

+

Bluetooth, NFC, etc,

+

Other possible network connectivity methods are not monitored. Even though it is +possible to add detectors for them, accessing their status will require the app +to request corresponding permissions form OS, thus reducing app's isolation and +decreasing overall security - first, by increasing chance of leak in breach +event, and second, by making corrupt fake app that leaks information through +network appear more normal. Furthermore, there is information that network might +be connected through cable in some devices in airplane mode; there was no +research on what debugging through cable is capable of for devices in airplane +mode. Thus, network detector is a convenience too and should not be relied on as +sole source of security; user is responsible for device isolation.

+

Logging

+

All events that happen in Vault are logged by backend in history tree of +database. From user interface, all events are presented in chronological order +on log screen. On the same screen, history checksum could be seen and custom +text entries could be added to database. Checksum uses time added to history +records in computation and is therefore impractical to forge.

+

Events presented on log screen are colored to distinguish "normal" and +"dangerous" events. Shown records give minimal important information about the +event. On click, detailed info screen is shown, where all events happened at the +same time are presented in detail (including transactions, that are decoded for +review if metadata is still available).

+

Log could also be erased for privacy; erasure event is logged and becomes the +first event in recorded history.

+

Self-signing updating capability

+

Vault can sign network and metadata updates that could be used for other +signers. User can select any update component present in Vault and any key +available for any network and generate a qr code which, upon decoding, can be +used by generate_message or similar tool to generate over-the-airgap update. +See detailed documentation

+

This feature was designed for elegance, but it is quite useful to maintain +update signing key for large update distribution centers, for it allows to +securely store secret certificate key that could not be practically revoked if +compromised.

+

UI

+

User interface is organized through View-Action-DataModel abstraction.

+

View

+

Vault visual representation is abstracted in 3 visual layers placed on top of +each other: screen, modal and alert. This structure is mostly an +adaptation of iOS design guidelines, as android native UI is much flexible and +it is easier to adopt it to iOS design patterns than vice versa. Up to one of +each component could be presented simultaneously. Screen component is always +present in the app, but sometimes it is fully or partially blocked by other +components.

+

Modals and alerts are dismissed on goBack action, screens have complex +navigation rules. Modals require user to take action and interrupt flow. Alerts +are used for short information interruptions, like error messages or +confirmations.

+

In addition to these, header bar is always present on screen and footer bar is +presented in some cases. Footer bar always has same structure and only allows +navigation to one of navigation roots. Top bar might contain back button, screen +name, and extra menu button; status indicator is always shown on top bar.

+

Action

+

Almost all actions available to user are in fact handled by single operation - +action() backend function, that is called through pushButton native +interface. In native side, this operation is debounced by time. On rust side, +actions are performed on static mutex storing app state; on blocked mutex +actions is ignored, as well as impossible actions that are not allowed in +current state of navigation. Thus, state of the app is protected against +undefined concurrency effects by hardware button-like behavior of action().

+

Most actions lead to change of shown combination of screen, modal and alert; but +some actions - for example, those involving keyboard input - alter contents of a +UI component. In most cases, all parameters of UI components are passed as +states (more or less similar concept on all platforms) and frontend framework +detects updates and seamlessly performs proper rendering.

+

Action accepts 3 parameters: action type (enum), action data (&str), secret data +(&str). Secret data is used to transfer secret information and care is taken to +always properly zeroize its contents; on contrary, action data could contain +large strings and is optimized normally.

+

Data model

+

Data model as seen by native UI consists of 3 parts: secret seed content, +network detection state and screen contents. Secret seed content consists of +list of seed names that are used as handles to fetch secret material from secure +storage. Network detection state is a 4-state variable that describes current +network detection state (safe state, network is currently detected, network was +detected before, error state). The rest of data model is a black box in Rust.

+

From Rust side, model is generated by navigation crate. The state of the app +is stored in lazy static State object and sufficient information required for +View rendering is generated into ActionResult object that is sent into native +layer on each action update.

+

Troubleshooting

+

Rust side builds but app crashes on start (Android) or complains about symbols not found (iOS)

+

One common reason for this is inconsistency in uniffi version - make sure that installed version matches one stated in Cargo.toml

+

Build for Android fails on macOS, build for iOS fails on linux

+

This is a known issue, does not seem to be solvable at the moment. Please use 2 machines, as we do.

+

Links to rust docs of the apps

+ +

Scope

+

This document provides an interpretation of the UOS format used by Polkadot Vault. The upstream version of the published format has diverged significantly from the actual implementation, so this document represents the current state of the UOS format that is compatible with Polkadot Vault. It only applies to networks compatible with Polkadot Vault, i.e. Substrate-based networks. The document also describes special payloads used to maintain a Polkadot Vault instance.

+

Therefore, this document effectively describes the input and output format for QR codes used by Polkadot Vault.

+

Terminology

+

The Vault receives information over an air-gap as QR codes. These codes are read as u8 vectors and must always be parsed by the Vault before use.

+

QR codes can contain information that a user wants to sign with one of the Vault keys, or they may contain update information to ensure smooth operation of the Vault without the need for a reset or connection to the network.

+

QR code content types

+
    +
  1. Transaction/extrinsic - a single transaction that is to be signed
  2. +
  3. Bulk transactions - a set of transactions that are to be signed in a single +session
  4. +
  5. Message - a message that is to be signed with a key
  6. +
  7. Chain metadata: up-to-date metadata allows the Vault to read transactions content
  8. +
  9. Chain specs: adds new network to the Vault
  10. +
  11. Metadata types: is used to update older versions runtime metadata (V13 and below)
  12. +
  13. Key derivations: is used to import and export Vault key paths
  14. +
+

QR code structure

+

QR code envelope has the following structure:

+
+ +
QR code prefixcontentending spacerpadding
4 bitsbyte-aligned content4 bitsremainder
+
+

QR code prefix always starts with 0x4 symbol indicating "raw" encoding.

+

Subsequent 2 bytes encode content length. Using this number, QR code parser can +instantly extract content and disregard the rest of QR code.

+

Actual content is shifted by half-byte, otherwise it is a normal byte sequence.

+

Multiframe QR

+

The information transferred through QR channel into Vault is always enveloped +in multiframe packages (although minimal number of multiframe packages is 1). +There are two standards for the multiframe: RaptorQ erasure coding and legacy +non-erasure multiframe. The type of envelope is determined by the first bit of +the QR code data: 0 indicates legacy multiframe, 1 indicates RaptorQ

+
RaptorQ multipart payload
+

RaptorQ (RFC6330) is +a variable rate (fountain) erasure code protocol with reference implementation +in Rust

+

Wrapping content in RaptorQ protocol allows for arbitrary amounts of data to be +transferred reliably within reasonable time. It is recommended to wrap all +payloads into this type of envelope.

+

Each QR code in RaptorQ encoded multipart payload contains following parts:

+
+ +
bytes [0..4]bytes [4..]
0x80000000 || payload_sizeRaptorQ serialized packet
+
+
    +
  • payload_size MUST contain payload size in bytes, represented as +big-endian 32-bit unsigned integer.
  • +
  • payload_size MUST NOT exceed 7FFFFFFF
  • +
  • payload_size MUST be identical in all codes encoding the payload
  • +
  • payload_size and RaptorQ serialized packet MUST be stored by the Cold +Vault, in no particular order, until their amount is sufficient to decode +the payload.
  • +
  • Hot Wallet MUST continuously loop through all the frames showing each +frame for at least 1/30 seconds (recommended frame rate: 4 FPS).
  • +
  • Cold Vault MUST be able to start scanning the Multipart Payload at any +frame.
  • +
  • Cold Vault MUST NOT expect the frames to come in any particular order.
  • +
  • Cold Vault SHOULD show a progress indicator of how many frames it has +successfully scanned out of the estimated minimum required amount.
  • +
  • Hot Wallet SHOULD generate sufficient number of recovery frames +(recommended overhead: 100%; minimal reasonable overhead: square root of +number of packets).
  • +
  • Payloads fitting in 1 frame SHOULD be shown without recovery frames as +static image.
  • +
+

Once sufficient number of frames is collected, they could be processed into +single payload and treated as data vector ("QR code content").

+
Legacy Multipart Payload
+

In real implementation, the Polkadot Vault ecosystem generalized all payloads as +multipart messages.

+
+ +
bytes position[0][1..3][3..5][5..]
content00frame_countframe_indexdata
+
+
    +
  • frame MUST the number of current frame, '0000' represented as +big-endian 16-bit unsigned integer.
  • +
  • frame_count MUST the total number of frames, represented as big-endian +16-bit unsigned integer.
  • +
  • part_data MUST be stored by the Cold Vault, ordered by frame number, +until all frames are scanned.
  • +
  • Hot Wallet MUST continuously loop through all the frames showing each +frame for about 2 seconds.
  • +
  • Cold Vault MUST be able to start scanning the Multipart Payload at any +frame.
  • +
  • Cold Vault MUST NOT expect the frames to come in any particular order.
  • +
  • Cold Vault SHOULD show a progress indicator of how many frames it has +successfully scanned out of the total count.
  • +
+

Once all frames are combined, the part_data must be concatenated into a +single binary blob and treated as data vector ("QR code content").

+

Informative content of QR code

+

Every QR code content starts with a prelude [0x53, 0x<encryption code>, 0x<payload code>].

+

0x53 is always expected and indicates Substrate-related content.

+

<encryption code> for signables indicates encryption algorithm that will be +used to generate the signature:

+ + + + + + + + + + + + + +
0x00Ed25519
0x01Sr25519
0x02Ecdsa
+

<encryption code> for updates indicates encryption algorithm that was used to +sign the update:

+ + + + + + + + + + + + + + + + + +
0x00Ed25519
0x01Sr25519
0x02Ecdsa
0xffunsigned
+

Derivations import and testing are always unsigned, with <encryption code> +always 0xff.

+

Vault supports following <payload code> variants:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0x00legacy mortal transaction
0x02transaction (both mortal and immortal)
0x03message
0x04bulk transactions
0x80load metadata update
0x81load types update
0xc1add specs update
0xdederivations import
+

Note: old UOS specified 0x00 as mortal transaction and 0x02 as immortal one, +but currently both mortal and immortal transactions from polkadot-js are 0x02.

+

Shared QR code processing sequence:

+
    +
  1. Read QR code, try interpreting it, and get the hexadecimal string from into +Rust (hexadecimal string is getting changed to raw bytes soon). +If QR code is not processable, nothing happens and the scanner keeps trying to +catch a processable one.
  2. +
  3. Analyze prelude: is it Substrate? is it a known payload type? If not, Vault +always produces an error and suggests to scan supported payload.
  4. +
+

Further processing is done based on the payload type.

+

Transaction

+

Transaction has the following structure:

+ + + + +
preludepublic keySCALE-encoded call dataSCALE-encoded extensionsnetwork genesis hash
+

Public key is the key that can sign the transaction. Its length depends on the +<encryption code> declared in transaction prelude:

+
+ + + +
EncryptionPublic key length, bytes
Ed2551932
Sr2551932
Ecdsa33
+
+

Call data is Vec<u8> representation of transaction content. Call data must be +parsed by Vault prior to signature generation and becomes a part of signed +blob. Within transaction, the call data is SCALE-encoded, i.e. effectively is +prefixed with compact of its length in bytes.

+

Extensions contain data additional to the call data, and also are part of a +signed blob. Typical extensions are Era, Nonce, metadata version, etc. +Extensions content and order, in principle, can vary between the networks and +metadata versions.

+

Network genesis hash determines the network in which the transaction is created. +At the moment genesis hash is fixed-length 32 bytes.

+

Thus, the transaction structure could also be represented as:

+ + + + +
preludepublic keycompact of call data lengthcall dataSCALE-encoded extensionsnetwork genesis hash
+

Bold-marked transaction pieces are used in the blob for which the signature is +produced. If the blob is short, 257 bytes or below, the signature is produced +for it as is. For blobs longer than 257 bytes, 32 byte hash (blake2_256) is +signed instead. This is inherited from earlier Vault versions, and is currently +compatible with polkadot-js.

+

Transaction parsing sequence

+
    +
  1. +

    Cut the QR data and get:

    +
      +
    • encryption (single u8 from prelude)
    • +
    • transaction author public key, its length matching the encryption (32 or +33 u8 immediately after the prelude)
    • +
    • network genesis hash (32 u8 at the end)
    • +
    • SCALE-encoded call data and SCALE-encoded extensions as a combined blob +(everything that remains in between the transaction author public kay and +the network genesis hash)
    • +
    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged transaction.

    +
  2. +
  3. +

    Search the Vault database for the network specs (from the network genesis +hash and encryption).

    +

    If the network specs are not found, Vault shows:

    +
      +
    • public key and encryption of the transaction author key
    • +
    • error message, that suggests to add network with found genesis hash
    • +
    +
  4. +
  5. +

    Search the Vault database for the address key (from the transaction author +public key and encryption). Vault will try to interpret and display the +transaction in any case. Signing will be possible only if the parsing is +successful and the address key is known to Vault and is extended to the network +in question.

    +
      +
    • +

      Address key not found. Signing not possible. Output shows:

      +
        +
      • public key and encryption of the transaction author key
      • +
      • call and extensions parsing result
      • +
      • warning message, that suggests to add the address into Vault
      • +
      +
    • +
    • +

      Address key is found, but it is not extended to the network used. Signing +not possible. Output shows:

      +
        +
      • detailed author key information (base58 representation, identicon, +address details such as address being passworded etc)
      • +
      • call and extensions parsing result
      • +
      • warning message, that suggests extending the address into the network +used
      • +
      +
    • +
    • +

      Address key is found and is extended to the network used. Vault will +proceed to try and interpret the call and extensions. Detailed author +information will be shown regardless of the parsing outcome. +The signing will be allowed only if the parsing is successful.

      +
    • +
    +
  6. +
  7. +

    Separate the call and extensions. Call is prefixed by its length compact, +the compact is cut off, the part with length that was indicated in the compact +goes into call data, the part that remains goes into extensions data.

    +

    If no compact is found or the length is insufficient, Vault produces an +error that call and extensions could not be separated.

    +
  8. +
  9. +

    Get the metadata set from the Vault database, by the network name from the +network specs. Metadata is used to interpret extensions and then the call +itself.

    +

    If there are no metadata entries for the network at all, Vault produces an +error and asks to load the metadata.

    +

    RuntimeMetadata versions supported by Vault are V12, V13, and V14. +The crucial feature of the V14 is that the metadata contains the description +of the types used in the call and extensions production. V12 and V13 are +legacy versions and provide only text identifiers for the types, and in order to +use them, the supplemental types information is needed.

    +
  10. +
  11. +

    Process the extensions.

    +

    Vault already knows in which network the transaction was made, but does not +yet know the metadata version. Metadata version must be one of the signable +extensions. At the same time, the extensions and their order are recorded in the +network metadata. Thus, all metadata entries from the set are checked, from +newest to oldest, in an attempt to find metadata that both decodes the +extensions and has a version that matches the metadata version decoded from the +extensions.

    +

    If processing extensions with a single metadata entry results in an error, +the next metadata entry is tried. The errors would be displayed to user only if +all attempts with existing metadata have failed.

    +

    Typically, the extensions are quite stable in between the metadata versions +and in between the networks, however, they can be and sometimes are different.

    +

    In legacy metadata (RuntimeMetadata version being V12 and V13) +extensions have identifiers only, and in Vault the extensions for V12 and +V13 are hardcoded as:

    +
      +
    • Era era
    • +
    • Compact(u64) nonce
    • +
    • Compact(u128) tip
    • +
    • u32 metadata version
    • +
    • u32 tx version
    • +
    • H256 genesis hash
    • +
    • H256 block hash
    • +
    +

    If the extensions could not be decoded as the standard set or not all +extensions blob is used, the Vault rejects this metadata version and adds error +into the error set.

    +

    Metadata V14 has extensions with both identifiers and properly described +types, and Vault decodes extensions as they are recorded in the metadata. For +this, +ExtrinsicMetadata +part of the metadata +RuntimeMetadataV14 +is used. Vector signed_extensions in ExtrinsicMetadata is scanned twice, +first for types in ty of the +SignedExtensionMetadata +and then for types in additional_signed of the SignedExtensionMetadata. The +types, when resolved through the types database from the metadata, allow to cut +correct length blobs from the whole SCALE-encoded extensions blob and decode +them properly.

    +

    If any of these small decodings fails, the metadata version gets rejected by +the Vault and an error is added to the error set. Same happens if after all +extensions are scanned, some part of extensions blob remains unused.

    +

    There are some special extensions that must be treated separately. The +identifier in SignedExtensionMetadata and ident segment of the type +Path +are used to trigger types interpretation as specially treated extensions. Each +identifier is encountered twice, once for ty scan, and once for +additional_signed scan. In some cases only one of those types has non-empty +content, in some cases it is both. To distinguish the two, the type-associated +path is used, which points to where the type is defined in Substrate code. +Type-associated path has priority over the identifier.

    +

    Path triggers:

    +

    | Path | Type is interpreted as | +| :- | :- | +| Era | Era | +| CheckNonce | Nonce | +| ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs |

    +

    Identifier triggers, are used if the path trigger was not activated:

    +

    | Identifier | Type, if not empty and if there is no path trigger, is interpreted as | Note | +| :- | :- | :- | +| CheckSpecVersion | metadata version | gets checked with the metatada version from the metadata | +| CheckTxVersion | tx version | | +| CheckGenesis | network genesis hash | must match the genesis hash that was cut from the tail of the transaction | +| CheckMortality | block hash | must match the genesis hash if the transaction is immortal; Era has same identifier, but is distinguished by the path | +| CheckNonce | nonce | | +| ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs |

    +

    If the extension is not a special case, it is displayed as normal parser +output and does not participate in deciding if the transaction could be signed.

    +

    After all extensions are processed, the decoding must yield following +extensions:

    +
      +
    • exactly one Era
    • +
    • exactly one Nonce <- this is not so currently, fix it
    • +
    • exactly one BlockHash
    • +
    • exactly one GenesisHash <- this is not so currently, fix it
    • +
    • exactly one metadata version
    • +
    +

    If the extension set is different, this results in Vault error for this +particular metadata version, this error goes into error set.

    +

    The extensions in the metadata are checked on the metadata loading step, +long before any transactions are even produced. Metadata with incomplete +extensions causes a warning on load_metadata update generation step, and +another one when an update with such metadata gets loaded into Vault. +Nevertheless, such metadata loading into Vault is allowed, as there could be +other uses for metadata except signable transaction signing. Probably.

    +

    If the metadata version in extensions does not match the metadata version +of the metadata used, this results in Vault error for this particular metadata +version, this error goes into error set.

    +

    If the extensions are completely decoded, with correct set of the special +extensions and the metadata version from the extensions match the metadata +version of the metadata used, the extensions are considered correctly parsed, +and Vault can proceed to the call decoding.

    +

    If all metadata entries from the Vault database were tested and no suitable +solution is found, Vault produces an error stating that all attempts to decode +extensions have failed. This could be used by variety of reasons (see above), +but so far the most common one observed was users having the metadata in Vault +not up-to-date with the metadata on chain. Thus, the error must have a +recommendation to update the metadata first.

    +
  12. +
  13. +

    Process the call data.

    +

    After the metadata with correct version is established, it is used to parse +the call data itself. Each call begins with u8 pallet index, this is the +decoding entry point.

    +

    For V14 metadata the correct pallet is found in the set of available ones +in pallets field of +RuntimeMetadataV14, +by index field in corresponding +PalletMetadata. +The calls field of this PalletMetadata, if it is Some(_), contains +PalletCallMetadata +that provides the available calls enum described in types registry of the +RuntimeMetadataV14. For each type in the registry, including this calls enum, +encoded data size is determined, and the decoding is done according to the type.

    +

    For V12 and V13 metadata the correct pallet is also found by scanning +the available pallets and searching for correct pallet index. Then the call is +found using the call index (second u8 of the call data). Each call has +associated set of argument names and argument types, however, the argument type +is just a text identifier. The type definitions are not in the metadata and +transactions decoding requires supplemental types information. By default, the +Vault contains types information that was constructed for Westend when Westend +was still using V13 metadata and it was so far reasonably sufficient for +simple transactions parsing. If the Vault does not find the type information in +the database and has to decode the transaction using V12 or V13 +metadata, error is produced, indicating that there are no types. Elsewise, for +each encountered argument type the encoded data size is determined, and the +decoding is done according to the argument type.

    +

    There are types requiring special display:

    +
      +
    • calls (for cases when a call contains other calls)
    • +
    • numbers that are processed as the balances
    • +
    +

    Calls in V14 parsing are distinguished by Call in ident segment of the +type Path. +Calls in V12 and V13 metadata are distinguished by any element of the set +of calls type identifiers in string argument type.

    +

    At the moment the numbers that should be displayed as balance in +transactions with V14 metadata are determined by the type name type_name of +the corresponding +Field +being:

    +
      +
    • Balance
    • +
    • T::Balance
    • +
    • BalanceOf<T>
    • +
    • ExtendedBalance
    • +
    • BalanceOf<T, I>
    • +
    • DepositBalance
    • +
    • PalletBalanceOf<T>
    • +
    +

    Similar identifiers are used in V12 and V13, the checked value is the +string argument type itself.

    +

    There could be other instances when the number should be displayed as +balance. However, sometimes the balance is not the balance in the units +in the network specs, for example in the assets pallet. See issue +#1050 and comments +there for details.

    +

    If no errors were encountered while parsing and all call data was used in +the process, the transaction is considered parsed and is displayed to the user, +either ready for signing (if all other checks have passed) or as read-only.

    +
  14. +
  15. +

    If the user chooses to sign the transaction, the Vault produces QR code with +signature, that should be read back into the hot side. As soon as the signature +QR code is generated, the Vault considers the transaction signed.

    +

    All signed transactions are entered in the history log, and could be seen +and decoded again from the history log. Transactions not signed by the user do +not go in the history log.

    +

    If the key used for the transaction is passworded, user has three attempts +to enter the password correctly. Each incorrect password entry is reflected in +the history.

    +

    In the time interval between Vault displaying the parsed transaction and +the user approving it, the transaction details needed to generate the signature +and history log details are temporarily stored in the database. The temporary +storage gets cleared each time before and after use. Vault extracts the stored +transaction data only if the database checksum stored in navigator state is +same as the current checksum of the database. If the password is entered +incorrectly, the database is updated with "wrong password" history entry, and +the checksum in the state gets updated accordingly. Eventually, all transaction +info can and will be moved into state itself and temporary storage will not be +used.

    +
  16. +
+

Example

+

Alice makes transfer to Bob in Westend network.

+

Transaction:

+

530102d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27da40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e

+
+ + + + + + + + + + +
PartMeaningByte position
53Substrate-related content0
01Sr25519 encryption algorithm1
02Transaction2
d435..a27d1Alice public key3..=34
a404..48172SCALE-encoded call data35..=76
a4Compact call data length, 4135
0403..48173Call data36..=76
04Pallet index 4 in metadata, entry point for decoding36
b501..3f334Extensions77..=153
e143..423e5Westend genesis hash154..=185
+
+
1 +

d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d

+
+
2 +

a40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817

+
+
3 +

0403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817

+
+
4 +

b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33

+
+
5 +

e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e

+
+

Call content is parsed using Westend metadata, in this particular case westend9010

+
+ + + + + +
Call partMeaning
04Pallet index 4 (Balances) in metadata, entry point for decoding
03Method index 3 in pallet 4 (transfer_keep_alive), search in metadata what the method contains. Here it is MultiAddress for transfer destination and Compact(u128) balance.
00Enum variant in MultiAddress, AccountId
8eaf..6a486Associated AccountId data, Bob public key
0700e8764817Compact(u128) balance. Amount paid: 100000000000 or, with Westend decimals and unit, 100.000000000 mWND.
+
+
6 +

8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48

+
+

Extensions content

+
+ + + + + + + +
Extensions partMeaning
b501Era: phase 27, period 64
b8Nonce: 46
00Tip: 0 pWND
32230000Metadata version: 9010
05000000Tx version: 5
e143..423e7Westend genesis hash
538a..3f338Block hash
+
+
7 +

e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e

+
+
8 +

538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33

+
+

Message

+

Message has the following structure:

+ + + + + + + +
preludepublic key[u8] slicenetwork genesis hash
+

[u8] slice is represented as String if all bytes are valid UTF-8. If not all +bytes are valid UTF-8, the Vault produces an error.

+

It is critical that the message payloads are always clearly distinguishable from +the transaction payloads, i.e. it is never possible to trick user to sign +transaction posing as a message.

+

Current proposal is to enable message signing only with Sr25519 encryption +algorithm, with designated signing context, different from the signing context +used for transactions signing.

+

Bulk transactions

+

Bulk transactions is a SCALE-encoded TransactionBulk structure that consists of concatenated Vec<u8> transactions.

+

Bulking is a way to sign multiple translations at once and reduce the number of QR codes to scan.

+

Bulk transactions are processed in exactly the same way as single transactions.

+

Update

+

Update has following general structure:

+ + + + +
preludeverifier public key (if signed)update payloadsignature (if signed)reserved tail
+

Note that the verifier public key and signature parts appear only in signed +uploads. Preludes [0x53, 0xff, 0x<payload code>] are followed by the update +payload.

+

Every time user receives an unsigned update, the Vault displays a warning that +the update is not verified. Generally, the use of unsigned updates is +discouraged.

+

For update signing it is recommended to use a dedicated key, not used for +transactions. This way, if the signed data was not really the update data, but +something else posing as the update data, the signature produced could not do +any damage.

+
+ + + + +
EncryptionPublic key length, bytesSignature length, bytes
Ed255193264
Sr255193264
Ecdsa3365
no encryption00
+
+

reserved tail currently is not used and is expected to be empty. It could be +used later if the multisignatures are introduced for the updates. Expecting +reserved tail in update processing is done to keep code continuity in case +multisignatures introduction ever happens.

+

Because of the reserved tail, the update payload length has to be always +exactly declared, so that the update payload part could be cut correctly from +the update.

+

Detailed description of the update payloads and form in which they are used in +update itself and for generating update signature, could be found in Rust module +definitions::qr_transfers.

+

add_specs update payload, payload code c1

+

Introduces a new network to Vault, i.e. adds network specs to the Vault +database.

+

Update payload is ContentAddSpecs in to_transfer() form, i.e. double +SCALE-encoded NetworkSpecsToSend (second SCALE is to have the exact payload +length).

+

Payload signature is generated for SCALE-encoded NetworkSpecsToSend.

+

Network specs are stored in dedicated SPECSTREE tree of the Vault database. +Network specs identifier is NetworkSpecsKey, a key built from encryption used +by the network and the network genesis hash. There could be networks with +multiple encryption algorithms supported, thus the encryption is part of the +key.

+

Some elements of the network specs could be slightly different for networks with +the same genesis hash and different encryptions. There are:

+
    +
  • +

    Invariant specs, identical between all different encryptions:

    +
      +
    • name (network name as it appears in metadata)
    • +
    • base58 prefix
    • +
    +

    The reason is that the network name is and the base58 prefix can be a part +of the network metadata, and the network metadata is not encryption-specific.

    +
  • +
  • +

    Specs static for given encryption, that should not change over time once set:

    +
      +
    • decimals
    • +
    • unit
    • +
    +

    To replace these, the user would need to remove the network and add it +again, i.e. it won't be possible to do by accident.

    +
  • +
  • +

    Flexible display-related and convenience specs, that can change and could be +changed by simply loading new ones over the old ones:

    +
      +
    • color and secondary color (both currently not used, but historically are +there and may return at some point)
    • +
    • logo
    • +
    • path (default derivation path for network, //<network_name>)
    • +
    • title (network title as it gets displayed in the Vault)
    • +
    +
  • +
+

load_metadata update payload, payload code 80

+

Loads metadata for a network already known to Vault, i.e. for a network with +network specs in the Vault database.

+

Update payload is ContentLoadMeta in to_transfer() form, and consists of +concatenated SCALE-encoded metadata Vec<u8> and network genesis hash (H256, +always 32 bytes).

+

Same blob is used to generate the signature.

+

Network metadata is stored in dedicated METATREE tree of the Vault database. +Network metadata identifier in is MetaKey, a key built from the network name +and network metadata version.

+

Metadata suitable for Vault

+

Network metadata that can get into Vault and can be used by Vault only if it +complies with following requirements:

+
    +
  • metadata vector starts with b"meta" prelude
  • +
  • part of the metadata vector after b"meta" prelude is decodable as RuntimeMetadata
  • +
  • RuntimeMetadata version of the metadata is V12, V13 or V14
  • +
  • Metadata has System pallet
  • +
  • There is Version constant in System pallet
  • +
  • Version is decodable as RuntimeVersion
  • +
  • If the metadata contains base58 prefix, it must be decodable as u16 or u8
  • +
+

Additionally, if the metadata V14 is received, its associated extensions will +be scanned and user will be warned if the extensions are incompatible with +transactions signing.

+

Also in case of the metadata V14 the type of the encoded data stored in the +Version constant is also stored in the metadata types registry and in +principle could be different from RuntimeVersion above. At the moment, the +type of the Version is hardcoded, and any other types would not be processed +and would get rejected with an error.

+

load_types update payload, payload code 81

+

Load types information.

+

Type information is needed to decode transactions made in networks with metadata +RuntimeMetadata version V12 or V13.

+

Most of the networks are already using RuntimeMetadata version V14, which has +types information incorporated in the metadata itself.

+

The load_types update is expected to become obsolete soon.

+

Update payload is ContentLoadTypes in to_transfer(), i.e. double +SCALE-encoded Vec<TypeEntry> (second SCALE is to have the exact payload +length).

+

Payload signature is generated for SCALE-encoded Vec<TypeEntry>.

+

Types information is stored in SETTREE tree of the Vault database, under key +TYPES.

+

Verifiers

+

Vault can accept both verified and non-verified updates, however, information +once verified can not be replaced or updated by a weaker verifier without full +Vault reset.

+

A verifier could be Some(_) with corresponding public key inside or None. +All verifiers for the data follow trust on first use principle.

+

Vault uses:

+
    +
  • a single general verifier
  • +
  • a network verifier for each of the networks introduced to the Vault
  • +
+

General verifier information is stored in SETTREE tree of the Vault database, +under key GENERALVERIFIER. General verifier is always set to a value, be it +Some(_) or None. Removing the general verifier means setting it to None. +If no general verifier entry is found in the database, the database is +considered corrupted and the Vault must be reset.

+

Network verifier information is stored in dedicated VERIFIERS tree of the +Vault database. Network verifier identifier is VerifierKey, a key built from +the network genesis hash. Same network verifier is used for network specs with +any encryption algorithm and for network metadata. Network verifier could be +valid or invalid. Valid network verifier could be general or custom. Verifiers +installed as a result of an update are always valid. Invalid network verifier +blocks the use of the network unless the Vault is reset, it appears if user +marks custom verifier as no longer trusted.

+

Updating verifier could cause some data verified by the old verifier to be +removed, to avoid confusion regarding which verifier has signed the data +currently stored in the database. The data removed is called "hold", and user +receives a warning if accepting new update would cause hold data to be removed.

+

General verifier

+

General verifier is the strongest and the most reliable verifier known to the +Vault. General verifier could sign all kinds of updates. By default the Vault +uses Parity-associated key as general verifier, but users can remove it and set +their own. There could be only one general verifier at any time.

+

General verifier could be removed only by complete wipe of the Vault, through +Remove general certificate button in the Settings. This will reset the Vault +database to the default content and set the general verifier as None, that +will be updated to the first verifier encountered by the Vault.

+

Expected usage for this is that the user removes old general verifier and +immediately afterwards loads an update from the preferred source, thus setting +the general verifier to the user-preferred value.

+

General verifier can be updated from None to Some(_) by accepting a verified +update. This would result in removing "general hold", i.e.:

+
    +
  • all network data (network specs and metadata) for the networks for which the +verifier is set to the general one
  • +
  • types information
  • +
+

General verifier could not be changed from Some(_) to another, different +Some(_) by simply accepting updates.

+

Note that if the general verifier is None, none of the custom verifiers could +be Some(_). Similarly, if the verifier is recorded as custom in the database, +its value can not be the same as the value of the general verifier. If found, +those situations indicate the database corruption.

+

Custom verifiers

+

Custom verifiers could be used for network information that was verified, but +not with the general verifier. There could be as many as needed custom verifiers +at any time. Custom verifier is considered weaker than the general verifier.

+

Custom verifier set to None could be updated to:

+
    +
  • Another custom verifier set to Some(_)
  • +
  • General verifier
  • +
+

Custom verifier set to Some(_) could be updated to general verifier.

+

These verifier updates can be done by accepting an update signed by a new +verifier.

+

Any of the custom network verifier updates would result in removing "hold", i.e. +all network specs entries (for all encryption algorithms on file) and all +network metadata entries.

+

Common update processing sequence:

+
    +
  1. +

    Cut the QR data and get:

    +
      +
    • encryption used by verifier (single u8 from prelude)
    • +
    • (only if the update is signed, i.e. the encryption is not 0xff) +update verifier public key, its length matching the encryption (32 or +33 u8 immediately after the prelude)
    • +
    • concatenated update payload, verifier signature (only if the update is +signed) and reserved tail.
    • +
    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged update.

    +
  2. +
  3. +

    Using the payload type from the prelude, determine the update payload length +and cut payload from the concatenated verifier signature and reserved tail.

    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged update.

    +
  4. +
  5. +

    (only if the update is signed, i.e. the encryption is not 0xff) +Cut verifier signature, its length matching the encryption (64 or 65 u8 +immediately after the update payload). Remaining data is reserved tail, +currently it is not used.

    +

    If the data length is insufficient, Vault produces an error and suggests to +load non-damaged update.

    +
  6. +
  7. +

    Verify the signature for the payload. If this fails, Vault produces an error +indicating that the update has invalid signature.

    +
  8. +
+

add_specs processing sequence

+
    +
  1. +

    Update payload is transformed into ContentAddSpecs and the incoming +NetworkSpecsToSend are retrieved, or the Vault produces an error indicating +that the add_specs payload is damaged.

    +
  2. +
  3. +

    Vault checks that there is no change in invariant specs occurring.

    +

    If there are entries in the SPECSTREE of the Vault database with same +genesis hash as in newly received specs (the encryption not necessarily +matches), the Vault checks that the name and base58 prefix in the received +specs are same as in the specs already in the Vault database.

    +
  4. +
  5. +

    Vault checks the verifier entry for the received genesis hash.

    +

    If there are no entries, i.e. the network is altogether new to the Vault, +the specs could be added into the database. During the same database transaction +the network verifier is set up:

    +

    | add_specs update verification | General verifier in Vault database | Action | +| :- | :- | :- | +| unverified, 0xff update encryption code | None or Some(_) | (1) set network verifier to custom, None (regardless of the general verifier); (2) add specs | +| verified by a | None | (1) set network verifier to general; (2) set general verifier to Some(a), process the general hold; (3) add specs | +| verified by a | Some(b) | (1) set network verifier to custom, Some(a); (2) add specs | +| verified by a | Some(a) | (1) set network verifier to general; (2) add specs |

    +

    If there are entries, i.e. the network was known to the Vault at some +point after the last Vault reset, the network verifier in the database and the +verifier of the update are compared. The specs could be added in the database if

    +
      +
    1. there are no verifier mismatches encountered (i.e. verifier same or +stronger)
    2. +
    3. received data causes no change in specs static for encryption
    4. +
    5. the specs are not yet in the database in exactly same form
    6. +
    +

    Note that if the exactly same specs as already in the database are received +with updated verifier and the user accepts the update, the verifier will get +updated and the specs will stay in the database.

    +

    | add_specs update verification | Network verifier in Vault database | General verifier in Vault database | Action | +| :- | :- | :- | :- | +| unverified, 0xff update encryption code | custom, None | None | accept specs if good | +| unverified, 0xff update encryption code | custom, None | Some(a) | accept specs if good | +| unverified, 0xff update encryption code | general | None | accept specs if good | +| unverified, 0xff update encryption code | general | Some(a) | error: update should have been signed by a | +| verified by a | custom, None | None | (1) change network verifier to general, process the network hold; (2) set general verifier to Some(a), process the general hold; (3) accept specs if good | +| verified by a | custom, None | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | +| verified by a | custom, None | Some(b) | (1) change network verifier to custom, Some(a), process the network hold; (2) accept specs if good | +| verified by a | custom, Some(a) | Some(b) | accept specs if good | +| verified by a | custom, Some(b) | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | +| verified by a | custom, Some(b) | Some(c) | error: update should have been signed by b or c |

    +

    Before the NetworkSpecsToSend are added in the SPECSTREE, they get +transformed into NetworkSpecs, and have the order field (display order in +Vault network lists) added. Each new network specs entry gets added in the end +of the list.

    +
  6. +
+

load_meta processing sequence

+
    +
  1. +

    Update payload is transformed into ContentLoadMeta, from which the metadata +and the genesis hash are retrieved, or the Vault produces an error indicating +that the load_metadata payload is damaged.

    +
  2. +
  3. +

    Vault checks that the received metadata fulfills all Vault metadata +requirements outlined above. Otherwise an +error is produced indicating that the received metadata is invalid.

    +

    Incoming MetaValues are produced, that contain network name, network +metadata version and optional base58 prefix (if it is recorded in the metadata).

    +
  4. +
  5. +

    Network genesis hash is used to generate VerifierKey and check if the +network has an established network verifier in the Vault database. If there +is no network verifier associated with genesis hash, an error is produced, +indicating that the network metadata could be loaded only for networks +introduced to Vault.

    +
  6. +
  7. +

    SPECSTREE tree of the Vault database is scanned in search of entries with +genesis hash matching the one received in payload.

    +

    Vault accepts load_metadata updates only for the networks that have at +least one network specs entry in the database.

    +

    Note that if the verifier in step (3) above is found, it not necessarily +means that the specs are found (for example, if a network verified by general +verifier was removed by user).

    +

    If the specs are found, the Vault checks that the network name and, if +present, base58 prefix from the received metadata match the ones in network +specs from the database. If the values do not match, the Vault produces an +error.

    +
  8. +
  9. +

    Vault compares the verifier of the received update and the verifier for the +network from the database. The update verifier must be exactly the same as the +verifier already in the database. If there is mismatch, Vault produces an +error, indication that the load_metadata update for the network must be signed +by the specified verifier (general or custom) or unsigned.

    +
  10. +
  11. +

    If the update has passed all checks above, the Vault searches for the +metadata entry in the METATREE of the Vault database, using network name and +version from update to produce MetaKey.

    +

    If the key is not found in the database, the metadata could be added.

    +

    If the key is found in the database and metadata is exactly the same, +the Vault produces an error indicating that the metadata is already in the +database. This is expected to be quite common outcome.

    +

    If the key is found in the database and the metadata is different, the +Vault produces an error. Metadata must be not acceptable. This situation can +occur if there was a silent metadata update or if the metadata is corrupted.

    +
  12. +
+

load_types processing sequence

+
    +
  1. +

    Update payload is transformed into ContentLoadTypes, from which the types +description vector Vec<TypeEntry> is retrieved, or the Vault produces an +error indicating that the load_types payload is damaged.

    +
  2. +
  3. +

    load_types updates must be signed by the general verifier.

    +

    | load_types update verification | General verifier in Vault database | Action | +| :- | :- | :- | +| unverified, 0xff update encryption code | None | load types if the types are not yet in the database | +| verified by a | None | (1) set general verifier to Some(a), process the general hold; (2) load types, warn if the types are the same as before | +| verified by a | Some(b) | reject types, error indicates that load_types requires general verifier signature | +| verified by a | Some(a) | load types if the types are not yet in the database |

    +

    If the load_types verifier is same as the general verifier in the database +and the types are same as the types in the database, the Vault produces an +error indicating that the types are already known.

    +

    Each time the types are loaded, the Vault produces a warning. load_types +is rare and quite unexpected operation.

    +
  4. +
+

Derivations import, payload code de

+

Derivations import has the following structure:

+ + + + +
preludederivations import payload
+

Derivations import payload is a SCALE-encoded ExportAddrs structure.

+

It does not contain any private keys or seed phrases.

+

ExportAddrs structure holds the following information about each key:

+
    +
  • name and public key of the seed the derived key belongs to
  • +
  • ss58 address of the derived key (h160 for ethereum based chains)
  • +
  • derivation path
  • +
  • encryption type
  • +
  • genesis hash of the network the key is used in
  • +
+

When processing derivations import, all data after prelude is transformed into +ExportAddrs. Network genesis hash, encryption and derivations set are +derived from it, or the Vault produces a warning indicating that the derivation +import payload is corrupted.

+

Vault checks that the network for which the derivations are imported has +network specs in the Vault database. If not, a warning is produced.

+

Vault checks that the derivation set contains only valid derivations. If any +derivation is unsuitable, a warning is produced indicating this.

+

If the user accepts the derivations import, Vault generates a key for each valid +derivation.

+

If one of the derived keys already exists, it gets ignored, i.e. no error is +produced.

+

If there are two derivations with identical path within the payload, only one +derived key is created.

+

Vault ecosystem

+

Vault repository contains 3 tools that are part of Vault ecosystem

+ +

Greater Vault ecosystem:

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/res/app-store-badge.png b/res/app-store-badge.png new file mode 100644 index 0000000000..24cf61bc44 Binary files /dev/null and b/res/app-store-badge.png differ diff --git a/res/bip39_wordlist.json b/res/bip39_wordlist.json new file mode 100644 index 0000000000..ed1a756017 --- /dev/null +++ b/res/bip39_wordlist.json @@ -0,0 +1 @@ +["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"] \ No newline at end of file diff --git a/res/github-badge.png b/res/github-badge.png new file mode 100644 index 0000000000..93b84d43b5 Binary files /dev/null and b/res/github-badge.png differ diff --git a/res/google-play-badge.png b/res/google-play-badge.png new file mode 100644 index 0000000000..0e0b27ea43 Binary files /dev/null and b/res/google-play-badge.png differ diff --git a/res/logo-black.svg b/res/logo-black.svg new file mode 100644 index 0000000000..86ca188faa --- /dev/null +++ b/res/logo-black.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/logo-white.svg b/res/logo-white.svg new file mode 100644 index 0000000000..4d14af3565 --- /dev/null +++ b/res/logo-white.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/res/parity_wordlist.json b/res/parity_wordlist.json new file mode 100644 index 0000000000..a84e0bef7a --- /dev/null +++ b/res/parity_wordlist.json @@ -0,0 +1 @@ +["abacus","abdomen","abdominal","abide","abiding","ability","ablaze","able","abnormal","abrasion","abrasive","abreast","abridge","abroad","abruptly","absence","absentee","absently","absinthe","absolute","absolve","abstain","abstract","absurd","accent","acclaim","acclimate","accompany","account","accuracy","accurate","accustom","acetone","achiness","aching","acid","acorn","acquaint","acquire","acre","acrobat","acronym","acting","action","activate","activator","active","activism","activist","activity","actress","acts","acutely","acuteness","aeration","aerobics","aerosol","aerospace","afar","affair","affected","affecting","affection","affidavit","affiliate","affirm","affix","afflicted","affluent","afford","affront","aflame","afloat","aflutter","afoot","afraid","afterglow","afterlife","aftermath","aftermost","afternoon","aged","ageless","agency","agenda","agent","aggregate","aghast","agile","agility","aging","agnostic","agonize","agonizing","agony","agreeable","agreeably","agreed","agreeing","agreement","aground","ahead","ahoy","aide","aids","aim","ajar","alabaster","alarm","albatross","album","alfalfa","algebra","algorithm","alias","alibi","alienable","alienate","aliens","alike","alive","alkaline","alkalize","almanac","almighty","almost","aloe","aloft","aloha","alone","alongside","aloof","alphabet","alright","although","altitude","alto","aluminum","alumni","always","amaretto","amaze","amazingly","amber","ambiance","ambiguity","ambiguous","ambition","ambitious","ambulance","ambush","amendable","amendment","amends","amenity","amiable","amicably","amid","amigo","amino","amiss","ammonia","ammonium","amnesty","amniotic","among","amount","amperage","ample","amplifier","amplify","amply","amuck","amulet","amusable","amused","amusement","amuser","amusing","anaconda","anaerobic","anagram","anatomist","anatomy","anchor","anchovy","ancient","android","anemia","anemic","aneurism","anew","angelfish","angelic","anger","angled","angler","angles","angling","angrily","angriness","anguished","angular","animal","animate","animating","animation","animator","anime","animosity","ankle","annex","annotate","announcer","annoying","annually","annuity","anointer","another","answering","antacid","antarctic","anteater","antelope","antennae","anthem","anthill","anthology","antibody","antics","antidote","antihero","antiquely","antiques","antiquity","antirust","antitoxic","antitrust","antiviral","antivirus","antler","antonym","antsy","anvil","anybody","anyhow","anymore","anyone","anyplace","anything","anytime","anyway","anywhere","aorta","apache","apostle","appealing","appear","appease","appeasing","appendage","appendix","appetite","appetizer","applaud","applause","apple","appliance","applicant","applied","apply","appointee","appraisal","appraiser","apprehend","approach","approval","approve","apricot","april","apron","aptitude","aptly","aqua","aqueduct","arbitrary","arbitrate","ardently","area","arena","arguable","arguably","argue","arise","armadillo","armband","armchair","armed","armful","armhole","arming","armless","armoire","armored","armory","armrest","army","aroma","arose","around","arousal","arrange","array","arrest","arrival","arrive","arrogance","arrogant","arson","art","ascend","ascension","ascent","ascertain","ashamed","ashen","ashes","ashy","aside","askew","asleep","asparagus","aspect","aspirate","aspire","aspirin","astonish","astound","astride","astrology","astronaut","astronomy","astute","atlantic","atlas","atom","atonable","atop","atrium","atrocious","atrophy","attach","attain","attempt","attendant","attendee","attention","attentive","attest","attic","attire","attitude","attractor","attribute","atypical","auction","audacious","audacity","audible","audibly","audience","audio","audition","augmented","august","authentic","author","autism","autistic","autograph","automaker","automated","automatic","autopilot","available","avalanche","avatar","avenge","avenging","avenue","average","aversion","avert","aviation","aviator","avid","avoid","await","awaken","award","aware","awhile","awkward","awning","awoke","awry","axis","babble","babbling","babied","baboon","backache","backboard","backboned","backdrop","backed","backer","backfield","backfire","backhand","backing","backlands","backlash","backless","backlight","backlit","backlog","backpack","backpedal","backrest","backroom","backshift","backside","backslid","backspace","backspin","backstab","backstage","backtalk","backtrack","backup","backward","backwash","backwater","backyard","bacon","bacteria","bacterium","badass","badge","badland","badly","badness","baffle","baffling","bagel","bagful","baggage","bagged","baggie","bagginess","bagging","baggy","bagpipe","baguette","baked","bakery","bakeshop","baking","balance","balancing","balcony","balmy","balsamic","bamboo","banana","banish","banister","banjo","bankable","bankbook","banked","banker","banking","banknote","bankroll","banner","bannister","banshee","banter","barbecue","barbed","barbell","barber","barcode","barge","bargraph","barista","baritone","barley","barmaid","barman","barn","barometer","barrack","barracuda","barrel","barrette","barricade","barrier","barstool","bartender","barterer","bash","basically","basics","basil","basin","basis","basket","batboy","batch","bath","baton","bats","battalion","battered","battering","battery","batting","battle","bauble","bazooka","blabber","bladder","blade","blah","blame","blaming","blanching","blandness","blank","blaspheme","blasphemy","blast","blatancy","blatantly","blazer","blazing","bleach","bleak","bleep","blemish","blend","bless","blighted","blimp","bling","blinked","blinker","blinking","blinks","blip","blissful","blitz","blizzard","bloated","bloating","blob","blog","bloomers","blooming","blooper","blot","blouse","blubber","bluff","bluish","blunderer","blunt","blurb","blurred","blurry","blurt","blush","blustery","boaster","boastful","boasting","boat","bobbed","bobbing","bobble","bobcat","bobsled","bobtail","bodacious","body","bogged","boggle","bogus","boil","bok","bolster","bolt","bonanza","bonded","bonding","bondless","boned","bonehead","boneless","bonelike","boney","bonfire","bonnet","bonsai","bonus","bony","boogeyman","boogieman","book","boondocks","booted","booth","bootie","booting","bootlace","bootleg","boots","boozy","borax","boring","borough","borrower","borrowing","boss","botanical","botanist","botany","botch","both","bottle","bottling","bottom","bounce","bouncing","bouncy","bounding","boundless","bountiful","bovine","boxcar","boxer","boxing","boxlike","boxy","breach","breath","breeches","breeching","breeder","breeding","breeze","breezy","brethren","brewery","brewing","briar","bribe","brick","bride","bridged","brigade","bright","brilliant","brim","bring","brink","brisket","briskly","briskness","bristle","brittle","broadband","broadcast","broaden","broadly","broadness","broadside","broadways","broiler","broiling","broken","broker","bronchial","bronco","bronze","bronzing","brook","broom","brought","browbeat","brownnose","browse","browsing","bruising","brunch","brunette","brunt","brush","brussels","brute","brutishly","bubble","bubbling","bubbly","buccaneer","bucked","bucket","buckle","buckshot","buckskin","bucktooth","buckwheat","buddhism","buddhist","budding","buddy","budget","buffalo","buffed","buffer","buffing","buffoon","buggy","bulb","bulge","bulginess","bulgur","bulk","bulldog","bulldozer","bullfight","bullfrog","bullhorn","bullion","bullish","bullpen","bullring","bullseye","bullwhip","bully","bunch","bundle","bungee","bunion","bunkbed","bunkhouse","bunkmate","bunny","bunt","busboy","bush","busily","busload","bust","busybody","buzz","cabana","cabbage","cabbie","cabdriver","cable","caboose","cache","cackle","cacti","cactus","caddie","caddy","cadet","cadillac","cadmium","cage","cahoots","cake","calamari","calamity","calcium","calculate","calculus","caliber","calibrate","calm","caloric","calorie","calzone","camcorder","cameo","camera","camisole","camper","campfire","camping","campsite","campus","canal","canary","cancel","candied","candle","candy","cane","canine","canister","cannabis","canned","canning","cannon","cannot","canola","canon","canopener","canopy","canteen","canyon","capable","capably","capacity","cape","capillary","capital","capitol","capped","capricorn","capsize","capsule","caption","captivate","captive","captivity","capture","caramel","carat","caravan","carbon","cardboard","carded","cardiac","cardigan","cardinal","cardstock","carefully","caregiver","careless","caress","caretaker","cargo","caring","carless","carload","carmaker","carnage","carnation","carnival","carnivore","carol","carpenter","carpentry","carpool","carport","carried","carrot","carrousel","carry","cartel","cartload","carton","cartoon","cartridge","cartwheel","carve","carving","carwash","cascade","case","cash","casing","casino","casket","cassette","casually","casualty","catacomb","catalog","catalyst","catalyze","catapult","cataract","catatonic","catcall","catchable","catcher","catching","catchy","caterer","catering","catfight","catfish","cathedral","cathouse","catlike","catnap","catnip","catsup","cattail","cattishly","cattle","catty","catwalk","caucasian","caucus","causal","causation","cause","causing","cauterize","caution","cautious","cavalier","cavalry","caviar","cavity","cedar","celery","celestial","celibacy","celibate","celtic","cement","census","ceramics","ceremony","certainly","certainty","certified","certify","cesarean","cesspool","chafe","chaffing","chain","chair","chalice","challenge","chamber","chamomile","champion","chance","change","channel","chant","chaos","chaperone","chaplain","chapped","chaps","chapter","character","charbroil","charcoal","charger","charging","chariot","charity","charm","charred","charter","charting","chase","chasing","chaste","chastise","chastity","chatroom","chatter","chatting","chatty","cheating","cheddar","cheek","cheer","cheese","cheesy","chef","chemicals","chemist","chemo","cherisher","cherub","chess","chest","chevron","chevy","chewable","chewer","chewing","chewy","chief","chihuahua","childcare","childhood","childish","childless","childlike","chili","chill","chimp","chip","chirping","chirpy","chitchat","chivalry","chive","chloride","chlorine","choice","chokehold","choking","chomp","chooser","choosing","choosy","chop","chosen","chowder","chowtime","chrome","chubby","chuck","chug","chummy","chump","chunk","churn","chute","cider","cilantro","cinch","cinema","cinnamon","circle","circling","circular","circulate","circus","citable","citadel","citation","citizen","citric","citrus","city","civic","civil","clad","claim","clambake","clammy","clamor","clamp","clamshell","clang","clanking","clapped","clapper","clapping","clarify","clarinet","clarity","clash","clasp","class","clatter","clause","clavicle","claw","clay","clean","clear","cleat","cleaver","cleft","clench","clergyman","clerical","clerk","clever","clicker","client","climate","climatic","cling","clinic","clinking","clip","clique","cloak","clobber","clock","clone","cloning","closable","closure","clothes","clothing","cloud","clover","clubbed","clubbing","clubhouse","clump","clumsily","clumsy","clunky","clustered","clutch","clutter","coach","coagulant","coastal","coaster","coasting","coastland","coastline","coat","coauthor","cobalt","cobbler","cobweb","cocoa","coconut","cod","coeditor","coerce","coexist","coffee","cofounder","cognition","cognitive","cogwheel","coherence","coherent","cohesive","coil","coke","cola","cold","coleslaw","coliseum","collage","collapse","collar","collected","collector","collide","collie","collision","colonial","colonist","colonize","colony","colossal","colt","coma","come","comfort","comfy","comic","coming","comma","commence","commend","comment","commerce","commode","commodity","commodore","common","commotion","commute","commuting","compacted","compacter","compactly","compactor","companion","company","compare","compel","compile","comply","component","composed","composer","composite","compost","composure","compound","compress","comprised","computer","computing","comrade","concave","conceal","conceded","concept","concerned","concert","conch","concierge","concise","conclude","concrete","concur","condense","condiment","condition","condone","conducive","conductor","conduit","cone","confess","confetti","confidant","confident","confider","confiding","configure","confined","confining","confirm","conflict","conform","confound","confront","confused","confusing","confusion","congenial","congested","congrats","congress","conical","conjoined","conjure","conjuror","connected","connector","consensus","consent","console","consoling","consonant","constable","constant","constrain","constrict","construct","consult","consumer","consuming","contact","container","contempt","contend","contented","contently","contents","contest","context","contort","contour","contrite","control","contusion","convene","convent","copartner","cope","copied","copier","copilot","coping","copious","copper","copy","coral","cork","cornball","cornbread","corncob","cornea","corned","corner","cornfield","cornflake","cornhusk","cornmeal","cornstalk","corny","coronary","coroner","corporal","corporate","corral","correct","corridor","corrode","corroding","corrosive","corsage","corset","cortex","cosigner","cosmetics","cosmic","cosmos","cosponsor","cost","cottage","cotton","couch","cough","could","countable","countdown","counting","countless","country","county","courier","covenant","cover","coveted","coveting","coyness","cozily","coziness","cozy","crabbing","crabgrass","crablike","crabmeat","cradle","cradling","crafter","craftily","craftsman","craftwork","crafty","cramp","cranberry","crane","cranial","cranium","crank","crate","crave","craving","crawfish","crawlers","crawling","crayfish","crayon","crazed","crazily","craziness","crazy","creamed","creamer","creamlike","crease","creasing","creatable","create","creation","creative","creature","credible","credibly","credit","creed","creme","creole","crepe","crept","crescent","crested","cresting","crestless","crevice","crewless","crewman","crewmate","crib","cricket","cried","crier","crimp","crimson","cringe","cringing","crinkle","crinkly","crisped","crisping","crisply","crispness","crispy","criteria","critter","croak","crock","crook","croon","crop","cross","crouch","crouton","crowbar","crowd","crown","crucial","crudely","crudeness","cruelly","cruelness","cruelty","crumb","crummiest","crummy","crumpet","crumpled","cruncher","crunching","crunchy","crusader","crushable","crushed","crusher","crushing","crust","crux","crying","cryptic","crystal","cubbyhole","cube","cubical","cubicle","cucumber","cuddle","cuddly","cufflink","culinary","culminate","culpable","culprit","cultivate","cultural","culture","cupbearer","cupcake","cupid","cupped","cupping","curable","curator","curdle","cure","curfew","curing","curled","curler","curliness","curling","curly","curry","curse","cursive","cursor","curtain","curtly","curtsy","curvature","curve","curvy","cushy","cusp","cussed","custard","custodian","custody","customary","customer","customize","customs","cut","cycle","cyclic","cycling","cyclist","cylinder","cymbal","cytoplasm","cytoplast","dab","dad","daffodil","dagger","daily","daintily","dainty","dairy","daisy","dallying","dance","dancing","dandelion","dander","dandruff","dandy","danger","dangle","dangling","daredevil","dares","daringly","darkened","darkening","darkish","darkness","darkroom","darling","darn","dart","darwinism","dash","dastardly","data","datebook","dating","daughter","daunting","dawdler","dawn","daybed","daybreak","daycare","daydream","daylight","daylong","dayroom","daytime","dazzler","dazzling","deacon","deafening","deafness","dealer","dealing","dealmaker","dealt","dean","debatable","debate","debating","debit","debrief","debtless","debtor","debug","debunk","decade","decaf","decal","decathlon","decay","deceased","deceit","deceiver","deceiving","december","decency","decent","deception","deceptive","decibel","decidable","decimal","decimeter","decipher","deck","declared","decline","decode","decompose","decorated","decorator","decoy","decrease","decree","dedicate","dedicator","deduce","deduct","deed","deem","deepen","deeply","deepness","deface","defacing","defame","default","defeat","defection","defective","defendant","defender","defense","defensive","deferral","deferred","defiance","defiant","defile","defiling","define","definite","deflate","deflation","deflator","deflected","deflector","defog","deforest","defraud","defrost","deftly","defuse","defy","degraded","degrading","degrease","degree","dehydrate","deity","dejected","delay","delegate","delegator","delete","deletion","delicacy","delicate","delicious","delighted","delirious","delirium","deliverer","delivery","delouse","delta","deluge","delusion","deluxe","demanding","demeaning","demeanor","demise","democracy","democrat","demote","demotion","demystify","denatured","deniable","denial","denim","denote","dense","density","dental","dentist","denture","deny","deodorant","deodorize","departed","departure","depict","deplete","depletion","deplored","deploy","deport","depose","depraved","depravity","deprecate","depress","deprive","depth","deputize","deputy","derail","deranged","derby","derived","desecrate","deserve","deserving","designate","designed","designer","designing","deskbound","desktop","deskwork","desolate","despair","despise","despite","destiny","destitute","destruct","detached","detail","detection","detective","detector","detention","detergent","detest","detonate","detonator","detoxify","detract","deuce","devalue","deviancy","deviant","deviate","deviation","deviator","device","devious","devotedly","devotee","devotion","devourer","devouring","devoutly","dexterity","dexterous","diabetes","diabetic","diabolic","diagnoses","diagnosis","diagram","dial","diameter","diaper","diaphragm","diary","dice","dicing","dictate","dictation","dictator","difficult","diffused","diffuser","diffusion","diffusive","dig","dilation","diligence","diligent","dill","dilute","dime","diminish","dimly","dimmed","dimmer","dimness","dimple","diner","dingbat","dinghy","dinginess","dingo","dingy","dining","dinner","diocese","dioxide","diploma","dipped","dipper","dipping","directed","direction","directive","directly","directory","direness","dirtiness","disabled","disagree","disallow","disarm","disarray","disaster","disband","disbelief","disburse","discard","discern","discharge","disclose","discolor","discount","discourse","discover","discuss","disdain","disengage","disfigure","disgrace","dish","disinfect","disjoin","disk","dislike","disliking","dislocate","dislodge","disloyal","dismantle","dismay","dismiss","dismount","disobey","disorder","disown","disparate","disparity","dispatch","dispense","dispersal","dispersed","disperser","displace","display","displease","disposal","dispose","disprove","dispute","disregard","disrupt","dissuade","distance","distant","distaste","distill","distinct","distort","distract","distress","district","distrust","ditch","ditto","ditzy","dividable","divided","dividend","dividers","dividing","divinely","diving","divinity","divisible","divisibly","division","divisive","divorcee","dizziness","dizzy","doable","docile","dock","doctrine","document","dodge","dodgy","doily","doing","dole","dollar","dollhouse","dollop","dolly","dolphin","domain","domelike","domestic","dominion","dominoes","donated","donation","donator","donor","donut","doodle","doorbell","doorframe","doorknob","doorman","doormat","doornail","doorpost","doorstep","doorstop","doorway","doozy","dork","dormitory","dorsal","dosage","dose","dotted","doubling","douche","dove","down","dowry","doze","drab","dragging","dragonfly","dragonish","dragster","drainable","drainage","drained","drainer","drainpipe","dramatic","dramatize","drank","drapery","drastic","draw","dreaded","dreadful","dreadlock","dreamboat","dreamily","dreamland","dreamless","dreamlike","dreamt","dreamy","drearily","dreary","drench","dress","drew","dribble","dried","drier","drift","driller","drilling","drinkable","drinking","dripping","drippy","drivable","driven","driver","driveway","driving","drizzle","drizzly","drone","drool","droop","drop-down","dropbox","dropkick","droplet","dropout","dropper","drove","drown","drowsily","drudge","drum","dry","dubbed","dubiously","duchess","duckbill","ducking","duckling","ducktail","ducky","duct","dude","duffel","dugout","duh","duke","duller","dullness","duly","dumping","dumpling","dumpster","duo","dupe","duplex","duplicate","duplicity","durable","durably","duration","duress","during","dusk","dust","dutiful","duty","duvet","dwarf","dweeb","dwelled","dweller","dwelling","dwindle","dwindling","dynamic","dynamite","dynasty","dyslexia","dyslexic","each","eagle","earache","eardrum","earflap","earful","earlobe","early","earmark","earmuff","earphone","earpiece","earplugs","earring","earshot","earthen","earthlike","earthling","earthly","earthworm","earthy","earwig","easeful","easel","easiest","easily","easiness","easing","eastbound","eastcoast","easter","eastward","eatable","eaten","eatery","eating","eats","ebay","ebony","ebook","ecard","eccentric","echo","eclair","eclipse","ecologist","ecology","economic","economist","economy","ecosphere","ecosystem","edge","edginess","edging","edgy","edition","editor","educated","education","educator","eel","effective","effects","efficient","effort","eggbeater","egging","eggnog","eggplant","eggshell","egomaniac","egotism","egotistic","either","eject","elaborate","elastic","elated","elbow","eldercare","elderly","eldest","electable","election","elective","elephant","elevate","elevating","elevation","elevator","eleven","elf","eligible","eligibly","eliminate","elite","elitism","elixir","elk","ellipse","elliptic","elm","elongated","elope","eloquence","eloquent","elsewhere","elude","elusive","elves","email","embargo","embark","embassy","embattled","embellish","ember","embezzle","emblaze","emblem","embody","embolism","emboss","embroider","emcee","emerald","emergency","emission","emit","emote","emoticon","emotion","empathic","empathy","emperor","emphases","emphasis","emphasize","emphatic","empirical","employed","employee","employer","emporium","empower","emptier","emptiness","empty","emu","enable","enactment","enamel","enchanted","enchilada","encircle","enclose","enclosure","encode","encore","encounter","encourage","encroach","encrust","encrypt","endanger","endeared","endearing","ended","ending","endless","endnote","endocrine","endorphin","endorse","endowment","endpoint","endurable","endurance","enduring","energetic","energize","energy","enforced","enforcer","engaged","engaging","engine","engorge","engraved","engraver","engraving","engross","engulf","enhance","enigmatic","enjoyable","enjoyably","enjoyer","enjoying","enjoyment","enlarged","enlarging","enlighten","enlisted","enquirer","enrage","enrich","enroll","enslave","ensnare","ensure","entail","entangled","entering","entertain","enticing","entire","entitle","entity","entomb","entourage","entrap","entree","entrench","entrust","entryway","entwine","enunciate","envelope","enviable","enviably","envious","envision","envoy","envy","enzyme","epic","epidemic","epidermal","epidermis","epidural","epilepsy","epileptic","epilogue","epiphany","episode","equal","equate","equation","equator","equinox","equipment","equity","equivocal","eradicate","erasable","erased","eraser","erasure","ergonomic","errand","errant","erratic","error","erupt","escalate","escalator","escapable","escapade","escapist","escargot","eskimo","esophagus","espionage","espresso","esquire","essay","essence","essential","establish","estate","esteemed","estimate","estimator","estranged","estrogen","etching","eternal","eternity","ethanol","ether","ethically","ethics","euphemism","evacuate","evacuee","evade","evaluate","evaluator","evaporate","evasion","evasive","even","everglade","evergreen","everybody","everyday","everyone","evict","evidence","evident","evil","evoke","evolution","evolve","exact","exalted","example","excavate","excavator","exceeding","exception","excess","exchange","excitable","exciting","exclaim","exclude","excluding","exclusion","exclusive","excretion","excretory","excursion","excusable","excusably","excuse","exemplary","exemplify","exemption","exerciser","exert","exes","exfoliate","exhale","exhaust","exhume","exile","existing","exit","exodus","exonerate","exorcism","exorcist","expand","expanse","expansion","expansive","expectant","expedited","expediter","expel","expend","expenses","expensive","expert","expire","expiring","explain","expletive","explicit","explode","exploit","explore","exploring","exponent","exporter","exposable","expose","exposure","express","expulsion","exquisite","extended","extending","extent","extenuate","exterior","external","extinct","extortion","extradite","extras","extrovert","extrude","extruding","exuberant","fable","fabric","fabulous","facebook","facecloth","facedown","faceless","facelift","faceplate","faceted","facial","facility","facing","facsimile","faction","factoid","factor","factsheet","factual","faculty","fade","fading","failing","falcon","fall","false","falsify","fame","familiar","family","famine","famished","fanatic","fancied","fanciness","fancy","fanfare","fang","fanning","fantasize","fantastic","fantasy","fascism","fastball","faster","fasting","fastness","faucet","favorable","favorably","favored","favoring","favorite","fax","feast","federal","fedora","feeble","feed","feel","feisty","feline","felt-tip","feminine","feminism","feminist","feminize","femur","fence","fencing","fender","ferment","fernlike","ferocious","ferocity","ferret","ferris","ferry","fervor","fester","festival","festive","festivity","fetal","fetch","fever","fiber","fiction","fiddle","fiddling","fidelity","fidgeting","fidgety","fifteen","fifth","fiftieth","fifty","figment","figure","figurine","filing","filled","filler","filling","film","filter","filth","filtrate","finale","finalist","finalize","finally","finance","financial","finch","fineness","finer","finicky","finished","finisher","finishing","finite","finless","finlike","fiscally","fit","five","flaccid","flagman","flagpole","flagship","flagstick","flagstone","flail","flakily","flaky","flame","flammable","flanked","flanking","flannels","flap","flaring","flashback","flashbulb","flashcard","flashily","flashing","flashy","flask","flatbed","flatfoot","flatly","flatness","flatten","flattered","flatterer","flattery","flattop","flatware","flatworm","flavored","flavorful","flavoring","flaxseed","fled","fleshed","fleshy","flick","flier","flight","flinch","fling","flint","flip","flirt","float","flock","flogging","flop","floral","florist","floss","flounder","flyable","flyaway","flyer","flying","flyover","flypaper","foam","foe","fog","foil","folic","folk","follicle","follow","fondling","fondly","fondness","fondue","font","food","fool","footage","football","footbath","footboard","footer","footgear","foothill","foothold","footing","footless","footman","footnote","footpad","footpath","footprint","footrest","footsie","footsore","footwear","footwork","fossil","foster","founder","founding","fountain","fox","foyer","fraction","fracture","fragile","fragility","fragment","fragrance","fragrant","frail","frame","framing","frantic","fraternal","frayed","fraying","frays","freckled","freckles","freebase","freebee","freebie","freedom","freefall","freehand","freeing","freeload","freely","freemason","freeness","freestyle","freeware","freeway","freewill","freezable","freezing","freight","french","frenzied","frenzy","frequency","frequent","fresh","fretful","fretted","friction","friday","fridge","fried","friend","frighten","frightful","frigidity","frigidly","frill","fringe","frisbee","frisk","fritter","frivolous","frolic","from","front","frostbite","frosted","frostily","frosting","frostlike","frosty","froth","frown","frozen","fructose","frugality","frugally","fruit","frustrate","frying","gab","gaffe","gag","gainfully","gaining","gains","gala","gallantly","galleria","gallery","galley","gallon","gallows","gallstone","galore","galvanize","gambling","game","gaming","gamma","gander","gangly","gangrene","gangway","gap","garage","garbage","garden","gargle","garland","garlic","garment","garnet","garnish","garter","gas","gatherer","gathering","gating","gauging","gauntlet","gauze","gave","gawk","gazing","gear","gecko","geek","geiger","gem","gender","generic","generous","genetics","genre","gentile","gentleman","gently","gents","geography","geologic","geologist","geology","geometric","geometry","geranium","gerbil","geriatric","germicide","germinate","germless","germproof","gestate","gestation","gesture","getaway","getting","getup","giant","gibberish","giblet","giddily","giddiness","giddy","gift","gigabyte","gigahertz","gigantic","giggle","giggling","giggly","gigolo","gilled","gills","gimmick","girdle","giveaway","given","giver","giving","gizmo","gizzard","glacial","glacier","glade","gladiator","gladly","glamorous","glamour","glance","glancing","glandular","glare","glaring","glass","glaucoma","glazing","gleaming","gleeful","glider","gliding","glimmer","glimpse","glisten","glitch","glitter","glitzy","gloater","gloating","gloomily","gloomy","glorified","glorifier","glorify","glorious","glory","gloss","glove","glowing","glowworm","glucose","glue","gluten","glutinous","glutton","gnarly","gnat","goal","goatskin","goes","goggles","going","goldfish","goldmine","goldsmith","golf","goliath","gonad","gondola","gone","gong","good","gooey","goofball","goofiness","goofy","google","goon","gopher","gore","gorged","gorgeous","gory","gosling","gossip","gothic","gotten","gout","gown","grab","graceful","graceless","gracious","gradation","graded","grader","gradient","grading","gradually","graduate","graffiti","grafted","grafting","grain","granddad","grandkid","grandly","grandma","grandpa","grandson","granite","granny","granola","grant","granular","grape","graph","grapple","grappling","grasp","grass","gratified","gratify","grating","gratitude","gratuity","gravel","graveness","graves","graveyard","gravitate","gravity","gravy","gray","grazing","greasily","greedily","greedless","greedy","green","greeter","greeting","grew","greyhound","grid","grief","grievance","grieving","grievous","grill","grimace","grimacing","grime","griminess","grimy","grinch","grinning","grip","gristle","grit","groggily","groggy","groin","groom","groove","grooving","groovy","grope","ground","grouped","grout","grove","grower","growing","growl","grub","grudge","grudging","grueling","gruffly","grumble","grumbling","grumbly","grumpily","grunge","grunt","guacamole","guidable","guidance","guide","guiding","guileless","guise","gulf","gullible","gully","gulp","gumball","gumdrop","gumminess","gumming","gummy","gurgle","gurgling","guru","gush","gusto","gusty","gutless","guts","gutter","guy","guzzler","gyration","habitable","habitant","habitat","habitual","hacked","hacker","hacking","hacksaw","had","haggler","haiku","half","halogen","halt","halved","halves","hamburger","hamlet","hammock","hamper","hamster","hamstring","handbag","handball","handbook","handbrake","handcart","handclap","handclasp","handcraft","handcuff","handed","handful","handgrip","handgun","handheld","handiness","handiwork","handlebar","handled","handler","handling","handmade","handoff","handpick","handprint","handrail","handsaw","handset","handsfree","handshake","handstand","handwash","handwork","handwoven","handwrite","handyman","hangnail","hangout","hangover","hangup","hankering","hankie","hanky","haphazard","happening","happier","happiest","happily","happiness","happy","harbor","hardcopy","hardcore","hardcover","harddisk","hardened","hardener","hardening","hardhat","hardhead","hardiness","hardly","hardness","hardship","hardware","hardwired","hardwood","hardy","harmful","harmless","harmonica","harmonics","harmonize","harmony","harness","harpist","harsh","harvest","hash","hassle","haste","hastily","hastiness","hasty","hatbox","hatchback","hatchery","hatchet","hatching","hatchling","hate","hatless","hatred","haunt","haven","hazard","hazelnut","hazily","haziness","hazing","hazy","headache","headband","headboard","headcount","headdress","headed","header","headfirst","headgear","heading","headlamp","headless","headlock","headphone","headpiece","headrest","headroom","headscarf","headset","headsman","headstand","headstone","headway","headwear","heap","heat","heave","heavily","heaviness","heaving","hedge","hedging","heftiness","hefty","helium","helmet","helper","helpful","helping","helpless","helpline","hemlock","hemstitch","hence","henchman","henna","herald","herbal","herbicide","herbs","heritage","hermit","heroics","heroism","herring","herself","hertz","hesitancy","hesitant","hesitate","hexagon","hexagram","hubcap","huddle","huddling","huff","hug","hula","hulk","hull","human","humble","humbling","humbly","humid","humiliate","humility","humming","hummus","humongous","humorist","humorless","humorous","humpback","humped","humvee","hunchback","hundredth","hunger","hungrily","hungry","hunk","hunter","hunting","huntress","huntsman","hurdle","hurled","hurler","hurling","hurray","hurricane","hurried","hurry","hurt","husband","hush","husked","huskiness","hut","hybrid","hydrant","hydrated","hydration","hydrogen","hydroxide","hyperlink","hypertext","hyphen","hypnoses","hypnosis","hypnotic","hypnotism","hypnotist","hypnotize","hypocrisy","hypocrite","ibuprofen","ice","iciness","icing","icky","icon","icy","idealism","idealist","idealize","ideally","idealness","identical","identify","identity","ideology","idiocy","idiom","idly","igloo","ignition","ignore","iguana","illicitly","illusion","illusive","image","imaginary","imagines","imaging","imbecile","imitate","imitation","immature","immerse","immersion","imminent","immobile","immodest","immorally","immortal","immovable","immovably","immunity","immunize","impaired","impale","impart","impatient","impeach","impeding","impending","imperfect","imperial","impish","implant","implement","implicate","implicit","implode","implosion","implosive","imply","impolite","important","importer","impose","imposing","impotence","impotency","impotent","impound","imprecise","imprint","imprison","impromptu","improper","improve","improving","improvise","imprudent","impulse","impulsive","impure","impurity","iodine","iodize","ion","ipad","iphone","ipod","irate","irk","iron","irregular","irrigate","irritable","irritably","irritant","irritate","islamic","islamist","isolated","isolating","isolation","isotope","issue","issuing","italicize","italics","item","itinerary","itunes","ivory","ivy","jab","jackal","jacket","jackknife","jackpot","jailbird","jailbreak","jailer","jailhouse","jalapeno","jam","janitor","january","jargon","jarring","jasmine","jaundice","jaunt","java","jawed","jawless","jawline","jaws","jaybird","jaywalker","jazz","jeep","jeeringly","jellied","jelly","jersey","jester","jet","jiffy","jigsaw","jimmy","jingle","jingling","jinx","jitters","jittery","job","jockey","jockstrap","jogger","jogging","john","joining","jokester","jokingly","jolliness","jolly","jolt","jot","jovial","joyfully","joylessly","joyous","joyride","joystick","jubilance","jubilant","judge","judgingly","judicial","judiciary","judo","juggle","juggling","jugular","juice","juiciness","juicy","jujitsu","jukebox","july","jumble","jumbo","jump","junction","juncture","june","junior","juniper","junkie","junkman","junkyard","jurist","juror","jury","justice","justifier","justify","justly","justness","juvenile","kabob","kangaroo","karaoke","karate","karma","kebab","keenly","keenness","keep","keg","kelp","kennel","kept","kerchief","kerosene","kettle","kick","kiln","kilobyte","kilogram","kilometer","kilowatt","kilt","kimono","kindle","kindling","kindly","kindness","kindred","kinetic","kinfolk","king","kinship","kinsman","kinswoman","kissable","kisser","kissing","kitchen","kite","kitten","kitty","kiwi","kleenex","knapsack","knee","knelt","knickers","knoll","koala","kooky","kosher","krypton","kudos","kung","labored","laborer","laboring","laborious","labrador","ladder","ladies","ladle","ladybug","ladylike","lagged","lagging","lagoon","lair","lake","lance","landed","landfall","landfill","landing","landlady","landless","landline","landlord","landmark","landmass","landmine","landowner","landscape","landside","landslide","language","lankiness","lanky","lantern","lapdog","lapel","lapped","lapping","laptop","lard","large","lark","lash","lasso","last","latch","late","lather","latitude","latrine","latter","latticed","launch","launder","laundry","laurel","lavender","lavish","laxative","lazily","laziness","lazy","lecturer","left","legacy","legal","legend","legged","leggings","legible","legibly","legislate","lego","legroom","legume","legwarmer","legwork","lemon","lend","length","lens","lent","leotard","lesser","letdown","lethargic","lethargy","letter","lettuce","level","leverage","levers","levitate","levitator","liability","liable","liberty","librarian","library","licking","licorice","lid","life","lifter","lifting","liftoff","ligament","likely","likeness","likewise","liking","lilac","lilly","lily","limb","limeade","limelight","limes","limit","limping","limpness","line","lingo","linguini","linguist","lining","linked","linoleum","linseed","lint","lion","lip","liquefy","liqueur","liquid","lisp","list","litigate","litigator","litmus","litter","little","livable","lived","lively","liver","livestock","lividly","living","lizard","lubricant","lubricate","lucid","luckily","luckiness","luckless","lucrative","ludicrous","lugged","lukewarm","lullaby","lumber","luminance","luminous","lumpiness","lumping","lumpish","lunacy","lunar","lunchbox","luncheon","lunchroom","lunchtime","lung","lurch","lure","luridness","lurk","lushly","lushness","luster","lustfully","lustily","lustiness","lustrous","lusty","luxurious","luxury","lying","lyrically","lyricism","lyricist","lyrics","macarena","macaroni","macaw","mace","machine","machinist","magazine","magenta","maggot","magical","magician","magma","magnesium","magnetic","magnetism","magnetize","magnifier","magnify","magnitude","magnolia","mahogany","maimed","majestic","majesty","majorette","majority","makeover","maker","makeshift","making","malformed","malt","mama","mammal","mammary","mammogram","manager","managing","manatee","mandarin","mandate","mandatory","mandolin","manger","mangle","mango","mangy","manhandle","manhole","manhood","manhunt","manicotti","manicure","manifesto","manila","mankind","manlike","manliness","manly","manmade","manned","mannish","manor","manpower","mantis","mantra","manual","many","map","marathon","marauding","marbled","marbles","marbling","march","mardi","margarine","margarita","margin","marigold","marina","marine","marital","maritime","marlin","marmalade","maroon","married","marrow","marry","marshland","marshy","marsupial","marvelous","marxism","mascot","masculine","mashed","mashing","massager","masses","massive","mastiff","matador","matchbook","matchbox","matcher","matching","matchless","material","maternal","maternity","math","mating","matriarch","matrimony","matrix","matron","matted","matter","maturely","maturing","maturity","mauve","maverick","maximize","maximum","maybe","mayday","mayflower","moaner","moaning","mobile","mobility","mobilize","mobster","mocha","mocker","mockup","modified","modify","modular","modulator","module","moisten","moistness","moisture","molar","molasses","mold","molecular","molecule","molehill","mollusk","mom","monastery","monday","monetary","monetize","moneybags","moneyless","moneywise","mongoose","mongrel","monitor","monkhood","monogamy","monogram","monologue","monopoly","monorail","monotone","monotype","monoxide","monsieur","monsoon","monstrous","monthly","monument","moocher","moodiness","moody","mooing","moonbeam","mooned","moonlight","moonlike","moonlit","moonrise","moonscape","moonshine","moonstone","moonwalk","mop","morale","morality","morally","morbidity","morbidly","morphine","morphing","morse","mortality","mortally","mortician","mortified","mortify","mortuary","mosaic","mossy","most","mothball","mothproof","motion","motivate","motivator","motive","motocross","motor","motto","mountable","mountain","mounted","mounting","mourner","mournful","mouse","mousiness","moustache","mousy","mouth","movable","move","movie","moving","mower","mowing","much","muck","mud","mug","mulberry","mulch","mule","mulled","mullets","multiple","multiply","multitask","multitude","mumble","mumbling","mumbo","mummified","mummify","mummy","mumps","munchkin","mundane","municipal","muppet","mural","murkiness","murky","murmuring","muscular","museum","mushily","mushiness","mushroom","mushy","music","musket","muskiness","musky","mustang","mustard","muster","mustiness","musty","mutable","mutate","mutation","mute","mutilated","mutilator","mutiny","mutt","mutual","muzzle","myself","myspace","mystified","mystify","myth","nacho","nag","nail","name","naming","nanny","nanometer","nape","napkin","napped","napping","nappy","narrow","nastily","nastiness","national","native","nativity","natural","nature","naturist","nautical","navigate","navigator","navy","nearby","nearest","nearly","nearness","neatly","neatness","nebula","nebulizer","nectar","negate","negation","negative","neglector","negligee","negligent","negotiate","nemeses","nemesis","neon","nephew","nerd","nervous","nervy","nest","net","neurology","neuron","neurosis","neurotic","neuter","neutron","never","next","nibble","nickname","nicotine","niece","nifty","nimble","nimbly","nineteen","ninetieth","ninja","nintendo","ninth","nuclear","nuclei","nucleus","nugget","nullify","number","numbing","numbly","numbness","numeral","numerate","numerator","numeric","numerous","nuptials","nursery","nursing","nurture","nutcase","nutlike","nutmeg","nutrient","nutshell","nuttiness","nutty","nuzzle","nylon","oaf","oak","oasis","oat","obedience","obedient","obituary","object","obligate","obliged","oblivion","oblivious","oblong","obnoxious","oboe","obscure","obscurity","observant","observer","observing","obsessed","obsession","obsessive","obsolete","obstacle","obstinate","obstruct","obtain","obtrusive","obtuse","obvious","occultist","occupancy","occupant","occupier","occupy","ocean","ocelot","octagon","octane","october","octopus","ogle","oil","oink","ointment","okay","old","olive","olympics","omega","omen","ominous","omission","omit","omnivore","onboard","oncoming","ongoing","onion","online","onlooker","only","onscreen","onset","onshore","onslaught","onstage","onto","onward","onyx","oops","ooze","oozy","opacity","opal","open","operable","operate","operating","operation","operative","operator","opium","opossum","opponent","oppose","opposing","opposite","oppressed","oppressor","opt","opulently","osmosis","other","otter","ouch","ought","ounce","outage","outback","outbid","outboard","outbound","outbreak","outburst","outcast","outclass","outcome","outdated","outdoors","outer","outfield","outfit","outflank","outgoing","outgrow","outhouse","outing","outlast","outlet","outline","outlook","outlying","outmatch","outmost","outnumber","outplayed","outpost","outpour","output","outrage","outrank","outreach","outright","outscore","outsell","outshine","outshoot","outsider","outskirts","outsmart","outsource","outspoken","outtakes","outthink","outward","outweigh","outwit","oval","ovary","oven","overact","overall","overarch","overbid","overbill","overbite","overblown","overboard","overbook","overbuilt","overcast","overcoat","overcome","overcook","overcrowd","overdraft","overdrawn","overdress","overdrive","overdue","overeager","overeater","overexert","overfed","overfeed","overfill","overflow","overfull","overgrown","overhand","overhang","overhaul","overhead","overhear","overheat","overhung","overjoyed","overkill","overlabor","overlaid","overlap","overlay","overload","overlook","overlord","overlying","overnight","overpass","overpay","overplant","overplay","overpower","overprice","overrate","overreach","overreact","override","overripe","overrule","overrun","overshoot","overshot","oversight","oversized","oversleep","oversold","overspend","overstate","overstay","overstep","overstock","overstuff","oversweet","overtake","overthrow","overtime","overtly","overtone","overture","overturn","overuse","overvalue","overview","overwrite","owl","oxford","oxidant","oxidation","oxidize","oxidizing","oxygen","oxymoron","oyster","ozone","paced","pacemaker","pacific","pacifier","pacifism","pacifist","pacify","padded","padding","paddle","paddling","padlock","pagan","pager","paging","pajamas","palace","palatable","palm","palpable","palpitate","paltry","pampered","pamperer","pampers","pamphlet","panama","pancake","pancreas","panda","pandemic","pang","panhandle","panic","panning","panorama","panoramic","panther","pantomime","pantry","pants","pantyhose","paparazzi","papaya","paper","paprika","papyrus","parabola","parachute","parade","paradox","paragraph","parakeet","paralegal","paralyses","paralysis","paralyze","paramedic","parameter","paramount","parasail","parasite","parasitic","parcel","parched","parchment","pardon","parish","parka","parking","parkway","parlor","parmesan","parole","parrot","parsley","parsnip","partake","parted","parting","partition","partly","partner","partridge","party","passable","passably","passage","passcode","passenger","passerby","passing","passion","passive","passivism","passover","passport","password","pasta","pasted","pastel","pastime","pastor","pastrami","pasture","pasty","patchwork","patchy","paternal","paternity","path","patience","patient","patio","patriarch","patriot","patrol","patronage","patronize","pauper","pavement","paver","pavestone","pavilion","paving","pawing","payable","payback","paycheck","payday","payee","payer","paying","payment","payphone","payroll","pebble","pebbly","pecan","pectin","peculiar","peddling","pediatric","pedicure","pedigree","pedometer","pegboard","pelican","pellet","pelt","pelvis","penalize","penalty","pencil","pendant","pending","penholder","penknife","pennant","penniless","penny","penpal","pension","pentagon","pentagram","pep","perceive","percent","perch","percolate","perennial","perfected","perfectly","perfume","periscope","perish","perjurer","perjury","perkiness","perky","perm","peroxide","perpetual","perplexed","persecute","persevere","persuaded","persuader","pesky","peso","pessimism","pessimist","pester","pesticide","petal","petite","petition","petri","petroleum","petted","petticoat","pettiness","petty","petunia","phantom","phobia","phoenix","phonebook","phoney","phonics","phoniness","phony","phosphate","photo","phrase","phrasing","placard","placate","placidly","plank","planner","plant","plasma","plaster","plastic","plated","platform","plating","platinum","platonic","platter","platypus","plausible","plausibly","playable","playback","player","playful","playgroup","playhouse","playing","playlist","playmaker","playmate","playoff","playpen","playroom","playset","plaything","playtime","plaza","pleading","pleat","pledge","plentiful","plenty","plethora","plexiglas","pliable","plod","plop","plot","plow","ploy","pluck","plug","plunder","plunging","plural","plus","plutonium","plywood","poach","pod","poem","poet","pogo","pointed","pointer","pointing","pointless","pointy","poise","poison","poker","poking","polar","police","policy","polio","polish","politely","polka","polo","polyester","polygon","polygraph","polymer","poncho","pond","pony","popcorn","pope","poplar","popper","poppy","popsicle","populace","popular","populate","porcupine","pork","porous","porridge","portable","portal","portfolio","porthole","portion","portly","portside","poser","posh","posing","possible","possibly","possum","postage","postal","postbox","postcard","posted","poster","posting","postnasal","posture","postwar","pouch","pounce","pouncing","pound","pouring","pout","powdered","powdering","powdery","power","powwow","pox","praising","prance","prancing","pranker","prankish","prankster","prayer","praying","preacher","preaching","preachy","preamble","precinct","precise","precision","precook","precut","predator","predefine","predict","preface","prefix","preflight","preformed","pregame","pregnancy","pregnant","preheated","prelaunch","prelaw","prelude","premiere","premises","premium","prenatal","preoccupy","preorder","prepaid","prepay","preplan","preppy","preschool","prescribe","preseason","preset","preshow","president","presoak","press","presume","presuming","preteen","pretended","pretender","pretense","pretext","pretty","pretzel","prevail","prevalent","prevent","preview","previous","prewar","prewashed","prideful","pried","primal","primarily","primary","primate","primer","primp","princess","print","prior","prism","prison","prissy","pristine","privacy","private","privatize","prize","proactive","probable","probably","probation","probe","probing","probiotic","problem","procedure","process","proclaim","procreate","procurer","prodigal","prodigy","produce","product","profane","profanity","professed","professor","profile","profound","profusely","progeny","prognosis","program","progress","projector","prologue","prolonged","promenade","prominent","promoter","promotion","prompter","promptly","prone","prong","pronounce","pronto","proofing","proofread","proofs","propeller","properly","property","proponent","proposal","propose","props","prorate","protector","protegee","proton","prototype","protozoan","protract","protrude","proud","provable","proved","proven","provided","provider","providing","province","proving","provoke","provoking","provolone","prowess","prowler","prowling","proximity","proxy","prozac","prude","prudishly","prune","pruning","pry","psychic","public","publisher","pucker","pueblo","pug","pull","pulmonary","pulp","pulsate","pulse","pulverize","puma","pumice","pummel","punch","punctual","punctuate","punctured","pungent","punisher","punk","pupil","puppet","puppy","purchase","pureblood","purebred","purely","pureness","purgatory","purge","purging","purifier","purify","purist","puritan","purity","purple","purplish","purposely","purr","purse","pursuable","pursuant","pursuit","purveyor","pushcart","pushchair","pusher","pushiness","pushing","pushover","pushpin","pushup","pushy","putdown","putt","puzzle","puzzling","pyramid","pyromania","python","quack","quadrant","quail","quaintly","quake","quaking","qualified","qualifier","qualify","quality","qualm","quantum","quarrel","quarry","quartered","quarterly","quarters","quartet","quench","query","quicken","quickly","quickness","quicksand","quickstep","quiet","quill","quilt","quintet","quintuple","quirk","quit","quiver","quizzical","quotable","quotation","quote","rabid","race","racing","racism","rack","racoon","radar","radial","radiance","radiantly","radiated","radiation","radiator","radio","radish","raffle","raft","rage","ragged","raging","ragweed","raider","railcar","railing","railroad","railway","raisin","rake","raking","rally","ramble","rambling","ramp","ramrod","ranch","rancidity","random","ranged","ranger","ranging","ranked","ranking","ransack","ranting","rants","rare","rarity","rascal","rash","rasping","ravage","raven","ravine","raving","ravioli","ravishing","reabsorb","reach","reacquire","reaction","reactive","reactor","reaffirm","ream","reanalyze","reappear","reapply","reappoint","reapprove","rearrange","rearview","reason","reassign","reassure","reattach","reawake","rebalance","rebate","rebel","rebirth","reboot","reborn","rebound","rebuff","rebuild","rebuilt","reburial","rebuttal","recall","recant","recapture","recast","recede","recent","recess","recharger","recipient","recital","recite","reckless","reclaim","recliner","reclining","recluse","reclusive","recognize","recoil","recollect","recolor","reconcile","reconfirm","reconvene","recopy","record","recount","recoup","recovery","recreate","rectal","rectangle","rectified","rectify","recycled","recycler","recycling","reemerge","reenact","reenter","reentry","reexamine","referable","referee","reference","refill","refinance","refined","refinery","refining","refinish","reflected","reflector","reflex","reflux","refocus","refold","reforest","reformat","reformed","reformer","reformist","refract","refrain","refreeze","refresh","refried","refueling","refund","refurbish","refurnish","refusal","refuse","refusing","refutable","refute","regain","regalia","regally","reggae","regime","region","register","registrar","registry","regress","regretful","regroup","regular","regulate","regulator","rehab","reheat","rehire","rehydrate","reimburse","reissue","reiterate","rejoice","rejoicing","rejoin","rekindle","relapse","relapsing","relatable","related","relation","relative","relax","relay","relearn","release","relenting","reliable","reliably","reliance","reliant","relic","relieve","relieving","relight","relish","relive","reload","relocate","relock","reluctant","rely","remake","remark","remarry","rematch","remedial","remedy","remember","reminder","remindful","remission","remix","remnant","remodeler","remold","remorse","remote","removable","removal","removed","remover","removing","rename","renderer","rendering","rendition","renegade","renewable","renewably","renewal","renewed","renounce","renovate","renovator","rentable","rental","rented","renter","reoccupy","reoccur","reopen","reorder","repackage","repacking","repaint","repair","repave","repaying","repayment","repeal","repeated","repeater","repent","rephrase","replace","replay","replica","reply","reporter","repose","repossess","repost","repressed","reprimand","reprint","reprise","reproach","reprocess","reproduce","reprogram","reps","reptile","reptilian","repugnant","repulsion","repulsive","repurpose","reputable","reputably","request","require","requisite","reroute","rerun","resale","resample","rescuer","reseal","research","reselect","reseller","resemble","resend","resent","reset","reshape","reshoot","reshuffle","residence","residency","resident","residual","residue","resigned","resilient","resistant","resisting","resize","resolute","resolved","resonant","resonate","resort","resource","respect","resubmit","result","resume","resupply","resurface","resurrect","retail","retainer","retaining","retake","retaliate","retention","rethink","retinal","retired","retiree","retiring","retold","retool","retorted","retouch","retrace","retract","retrain","retread","retreat","retrial","retrieval","retriever","retry","return","retying","retype","reunion","reunite","reusable","reuse","reveal","reveler","revenge","revenue","reverb","revered","reverence","reverend","reversal","reverse","reversing","reversion","revert","revisable","revise","revision","revisit","revivable","revival","reviver","reviving","revocable","revoke","revolt","revolver","revolving","reward","rewash","rewind","rewire","reword","rework","rewrap","rewrite","rhyme","ribbon","ribcage","rice","riches","richly","richness","rickety","ricotta","riddance","ridden","ride","riding","rifling","rift","rigging","rigid","rigor","rimless","rimmed","rind","rink","rinse","rinsing","riot","ripcord","ripeness","ripening","ripping","ripple","rippling","riptide","rise","rising","risk","risotto","ritalin","ritzy","rival","riverbank","riverbed","riverboat","riverside","riveter","riveting","roamer","roaming","roast","robbing","robe","robin","robotics","robust","rockband","rocker","rocket","rockfish","rockiness","rocking","rocklike","rockslide","rockstar","rocky","rogue","roman","romp","rope","roping","roster","rosy","rotten","rotting","rotunda","roulette","rounding","roundish","roundness","roundup","roundworm","routine","routing","rover","roving","royal","rubbed","rubber","rubbing","rubble","rubdown","ruby","ruckus","rudder","rug","ruined","rule","rumble","rumbling","rummage","rumor","runaround","rundown","runner","running","runny","runt","runway","rupture","rural","ruse","rush","rust","rut","sabbath","sabotage","sacrament","sacred","sacrifice","sadden","saddlebag","saddled","saddling","sadly","sadness","safari","safeguard","safehouse","safely","safeness","saffron","saga","sage","sagging","saggy","said","saint","sake","salad","salami","salaried","salary","saline","salon","saloon","salsa","salt","salutary","salute","salvage","salvaging","salvation","same","sample","sampling","sanction","sanctity","sanctuary","sandal","sandbag","sandbank","sandbar","sandblast","sandbox","sanded","sandfish","sanding","sandlot","sandpaper","sandpit","sandstone","sandstorm","sandworm","sandy","sanitary","sanitizer","sank","santa","sapling","sappiness","sappy","sarcasm","sarcastic","sardine","sash","sasquatch","sassy","satchel","satiable","satin","satirical","satisfied","satisfy","saturate","saturday","sauciness","saucy","sauna","savage","savanna","saved","savings","savior","savor","saxophone","say","scabbed","scabby","scalded","scalding","scale","scaling","scallion","scallop","scalping","scam","scandal","scanner","scanning","scant","scapegoat","scarce","scarcity","scarecrow","scared","scarf","scarily","scariness","scarring","scary","scavenger","scenic","schedule","schematic","scheme","scheming","schilling","schnapps","scholar","science","scientist","scion","scoff","scolding","scone","scoop","scooter","scope","scorch","scorebook","scorecard","scored","scoreless","scorer","scoring","scorn","scorpion","scotch","scoundrel","scoured","scouring","scouting","scouts","scowling","scrabble","scraggly","scrambled","scrambler","scrap","scratch","scrawny","screen","scribble","scribe","scribing","scrimmage","script","scroll","scrooge","scrounger","scrubbed","scrubber","scruffy","scrunch","scrutiny","scuba","scuff","sculptor","sculpture","scurvy","scuttle","secluded","secluding","seclusion","second","secrecy","secret","sectional","sector","secular","securely","security","sedan","sedate","sedation","sedative","sediment","seduce","seducing","segment","seismic","seizing","seldom","selected","selection","selective","selector","self","seltzer","semantic","semester","semicolon","semifinal","seminar","semisoft","semisweet","senate","senator","send","senior","senorita","sensation","sensitive","sensitize","sensually","sensuous","sepia","september","septic","septum","sequel","sequence","sequester","series","sermon","serotonin","serpent","serrated","serve","service","serving","sesame","sessions","setback","setting","settle","settling","setup","sevenfold","seventeen","seventh","seventy","severity","shabby","shack","shaded","shadily","shadiness","shading","shadow","shady","shaft","shakable","shakily","shakiness","shaking","shaky","shale","shallot","shallow","shame","shampoo","shamrock","shank","shanty","shape","shaping","share","sharpener","sharper","sharpie","sharply","sharpness","shawl","sheath","shed","sheep","sheet","shelf","shell","shelter","shelve","shelving","sherry","shield","shifter","shifting","shiftless","shifty","shimmer","shimmy","shindig","shine","shingle","shininess","shining","shiny","ship","shirt","shivering","shock","shone","shoplift","shopper","shopping","shoptalk","shore","shortage","shortcake","shortcut","shorten","shorter","shorthand","shortlist","shortly","shortness","shorts","shortwave","shorty","shout","shove","showbiz","showcase","showdown","shower","showgirl","showing","showman","shown","showoff","showpiece","showplace","showroom","showy","shrank","shrapnel","shredder","shredding","shrewdly","shriek","shrill","shrimp","shrine","shrink","shrivel","shrouded","shrubbery","shrubs","shrug","shrunk","shucking","shudder","shuffle","shuffling","shun","shush","shut","shy","siamese","siberian","sibling","siding","sierra","siesta","sift","sighing","silenced","silencer","silent","silica","silicon","silk","silliness","silly","silo","silt","silver","similarly","simile","simmering","simple","simplify","simply","sincere","sincerity","singer","singing","single","singular","sinister","sinless","sinner","sinuous","sip","siren","sister","sitcom","sitter","sitting","situated","situation","sixfold","sixteen","sixth","sixties","sixtieth","sixtyfold","sizable","sizably","size","sizing","sizzle","sizzling","skater","skating","skedaddle","skeletal","skeleton","skeptic","sketch","skewed","skewer","skid","skied","skier","skies","skiing","skilled","skillet","skillful","skimmed","skimmer","skimming","skimpily","skincare","skinhead","skinless","skinning","skinny","skintight","skipper","skipping","skirmish","skirt","skittle","skydiver","skylight","skyline","skype","skyrocket","skyward","slab","slacked","slacker","slacking","slackness","slacks","slain","slam","slander","slang","slapping","slapstick","slashed","slashing","slate","slather","slaw","sled","sleek","sleep","sleet","sleeve","slept","sliceable","sliced","slicer","slicing","slick","slider","slideshow","sliding","slighted","slighting","slightly","slimness","slimy","slinging","slingshot","slinky","slip","slit","sliver","slobbery","slogan","sloped","sloping","sloppily","sloppy","slot","slouching","slouchy","sludge","slug","slum","slurp","slush","sly","small","smartly","smartness","smasher","smashing","smashup","smell","smelting","smile","smilingly","smirk","smite","smith","smitten","smock","smog","smoked","smokeless","smokiness","smoking","smoky","smolder","smooth","smother","smudge","smudgy","smuggler","smuggling","smugly","smugness","snack","snagged","snaking","snap","snare","snarl","snazzy","sneak","sneer","sneeze","sneezing","snide","sniff","snippet","snipping","snitch","snooper","snooze","snore","snoring","snorkel","snort","snout","snowbird","snowboard","snowbound","snowcap","snowdrift","snowdrop","snowfall","snowfield","snowflake","snowiness","snowless","snowman","snowplow","snowshoe","snowstorm","snowsuit","snowy","snub","snuff","snuggle","snugly","snugness","speak","spearfish","spearhead","spearman","spearmint","species","specimen","specked","speckled","specks","spectacle","spectator","spectrum","speculate","speech","speed","spellbind","speller","spelling","spendable","spender","spending","spent","spew","sphere","spherical","sphinx","spider","spied","spiffy","spill","spilt","spinach","spinal","spindle","spinner","spinning","spinout","spinster","spiny","spiral","spirited","spiritism","spirits","spiritual","splashed","splashing","splashy","splatter","spleen","splendid","splendor","splice","splicing","splinter","splotchy","splurge","spoilage","spoiled","spoiler","spoiling","spoils","spoken","spokesman","sponge","spongy","sponsor","spoof","spookily","spooky","spool","spoon","spore","sporting","sports","sporty","spotless","spotlight","spotted","spotter","spotting","spotty","spousal","spouse","spout","sprain","sprang","sprawl","spray","spree","sprig","spring","sprinkled","sprinkler","sprint","sprite","sprout","spruce","sprung","spry","spud","spur","sputter","spyglass","squabble","squad","squall","squander","squash","squatted","squatter","squatting","squeak","squealer","squealing","squeamish","squeegee","squeeze","squeezing","squid","squiggle","squiggly","squint","squire","squirt","squishier","squishy","stability","stabilize","stable","stack","stadium","staff","stage","staging","stagnant","stagnate","stainable","stained","staining","stainless","stalemate","staleness","stalling","stallion","stamina","stammer","stamp","stand","stank","staple","stapling","starboard","starch","stardom","stardust","starfish","stargazer","staring","stark","starless","starlet","starlight","starlit","starring","starry","starship","starter","starting","startle","startling","startup","starved","starving","stash","state","static","statistic","statue","stature","status","statute","statutory","staunch","stays","steadfast","steadier","steadily","steadying","steam","steed","steep","steerable","steering","steersman","stegosaur","stellar","stem","stench","stencil","step","stereo","sterile","sterility","sterilize","sterling","sternness","sternum","stew","stick","stiffen","stiffly","stiffness","stifle","stifling","stillness","stilt","stimulant","stimulate","stimuli","stimulus","stinger","stingily","stinging","stingray","stingy","stinking","stinky","stipend","stipulate","stir","stitch","stock","stoic","stoke","stole","stomp","stonewall","stoneware","stonework","stoning","stony","stood","stooge","stool","stoop","stoplight","stoppable","stoppage","stopped","stopper","stopping","stopwatch","storable","storage","storeroom","storewide","storm","stout","stove","stowaway","stowing","straddle","straggler","strained","strainer","straining","strangely","stranger","strangle","strategic","strategy","stratus","straw","stray","streak","stream","street","strength","strenuous","strep","stress","stretch","strewn","stricken","strict","stride","strife","strike","striking","strive","striving","strobe","strode","stroller","strongbox","strongly","strongman","struck","structure","strudel","struggle","strum","strung","strut","stubbed","stubble","stubbly","stubborn","stucco","stuck","student","studied","studio","study","stuffed","stuffing","stuffy","stumble","stumbling","stump","stung","stunned","stunner","stunning","stunt","stupor","sturdily","sturdy","styling","stylishly","stylist","stylized","stylus","suave","subarctic","subatomic","subdivide","subdued","subduing","subfloor","subgroup","subheader","subject","sublease","sublet","sublevel","sublime","submarine","submerge","submersed","submitter","subpanel","subpar","subplot","subprime","subscribe","subscript","subsector","subside","subsiding","subsidize","subsidy","subsoil","subsonic","substance","subsystem","subtext","subtitle","subtly","subtotal","subtract","subtype","suburb","subway","subwoofer","subzero","succulent","such","suction","sudden","sudoku","suds","sufferer","suffering","suffice","suffix","suffocate","suffrage","sugar","suggest","suing","suitable","suitably","suitcase","suitor","sulfate","sulfide","sulfite","sulfur","sulk","sullen","sulphate","sulphuric","sultry","superbowl","superglue","superhero","superior","superjet","superman","supermom","supernova","supervise","supper","supplier","supply","support","supremacy","supreme","surcharge","surely","sureness","surface","surfacing","surfboard","surfer","surgery","surgical","surging","surname","surpass","surplus","surprise","surreal","surrender","surrogate","surround","survey","survival","survive","surviving","survivor","sushi","suspect","suspend","suspense","sustained","sustainer","swab","swaddling","swagger","swampland","swan","swapping","swarm","sway","swear","sweat","sweep","swell","swept","swerve","swifter","swiftly","swiftness","swimmable","swimmer","swimming","swimsuit","swimwear","swinger","swinging","swipe","swirl","switch","swivel","swizzle","swooned","swoop","swoosh","swore","sworn","swung","sycamore","sympathy","symphonic","symphony","symptom","synapse","syndrome","synergy","synopses","synopsis","synthesis","synthetic","syrup","system","t-shirt","tabasco","tabby","tableful","tables","tablet","tableware","tabloid","tackiness","tacking","tackle","tackling","tacky","taco","tactful","tactical","tactics","tactile","tactless","tadpole","taekwondo","tag","tainted","take","taking","talcum","talisman","tall","talon","tamale","tameness","tamer","tamper","tank","tanned","tannery","tanning","tantrum","tapeless","tapered","tapering","tapestry","tapioca","tapping","taps","tarantula","target","tarmac","tarnish","tarot","tartar","tartly","tartness","task","tassel","taste","tastiness","tasting","tasty","tattered","tattle","tattling","tattoo","taunt","tavern","thank","that","thaw","theater","theatrics","thee","theft","theme","theology","theorize","thermal","thermos","thesaurus","these","thesis","thespian","thicken","thicket","thickness","thieving","thievish","thigh","thimble","thing","think","thinly","thinner","thinness","thinning","thirstily","thirsting","thirsty","thirteen","thirty","thong","thorn","those","thousand","thrash","thread","threaten","threefold","thrift","thrill","thrive","thriving","throat","throbbing","throng","throttle","throwaway","throwback","thrower","throwing","thud","thumb","thumping","thursday","thus","thwarting","thyself","tiara","tibia","tidal","tidbit","tidiness","tidings","tidy","tiger","tighten","tightly","tightness","tightrope","tightwad","tigress","tile","tiling","till","tilt","timid","timing","timothy","tinderbox","tinfoil","tingle","tingling","tingly","tinker","tinkling","tinsel","tinsmith","tint","tinwork","tiny","tipoff","tipped","tipper","tipping","tiptoeing","tiptop","tiring","tissue","trace","tracing","track","traction","tractor","trade","trading","tradition","traffic","tragedy","trailing","trailside","train","traitor","trance","tranquil","transfer","transform","translate","transpire","transport","transpose","trapdoor","trapeze","trapezoid","trapped","trapper","trapping","traps","trash","travel","traverse","travesty","tray","treachery","treading","treadmill","treason","treat","treble","tree","trekker","tremble","trembling","tremor","trench","trend","trespass","triage","trial","triangle","tribesman","tribunal","tribune","tributary","tribute","triceps","trickery","trickily","tricking","trickle","trickster","tricky","tricolor","tricycle","trident","tried","trifle","trifocals","trillion","trilogy","trimester","trimmer","trimming","trimness","trinity","trio","tripod","tripping","triumph","trivial","trodden","trolling","trombone","trophy","tropical","tropics","trouble","troubling","trough","trousers","trout","trowel","truce","truck","truffle","trump","trunks","trustable","trustee","trustful","trusting","trustless","truth","try","tubby","tubeless","tubular","tucking","tuesday","tug","tuition","tulip","tumble","tumbling","tummy","turban","turbine","turbofan","turbojet","turbulent","turf","turkey","turmoil","turret","turtle","tusk","tutor","tutu","tux","tweak","tweed","tweet","tweezers","twelve","twentieth","twenty","twerp","twice","twiddle","twiddling","twig","twilight","twine","twins","twirl","twistable","twisted","twister","twisting","twisty","twitch","twitter","tycoon","tying","tyke","udder","ultimate","ultimatum","ultra","umbilical","umbrella","umpire","unabashed","unable","unadorned","unadvised","unafraid","unaired","unaligned","unaltered","unarmored","unashamed","unaudited","unawake","unaware","unbaked","unbalance","unbeaten","unbend","unbent","unbiased","unbitten","unblended","unblessed","unblock","unbolted","unbounded","unboxed","unbraided","unbridle","unbroken","unbuckled","unbundle","unburned","unbutton","uncanny","uncapped","uncaring","uncertain","unchain","unchanged","uncharted","uncheck","uncivil","unclad","unclaimed","unclamped","unclasp","uncle","unclip","uncloak","unclog","unclothed","uncoated","uncoiled","uncolored","uncombed","uncommon","uncooked","uncork","uncorrupt","uncounted","uncouple","uncouth","uncover","uncross","uncrown","uncrushed","uncured","uncurious","uncurled","uncut","undamaged","undated","undaunted","undead","undecided","undefined","underage","underarm","undercoat","undercook","undercut","underdog","underdone","underfed","underfeed","underfoot","undergo","undergrad","underhand","underline","underling","undermine","undermost","underpaid","underpass","underpay","underrate","undertake","undertone","undertook","undertow","underuse","underwear","underwent","underwire","undesired","undiluted","undivided","undocked","undoing","undone","undrafted","undress","undrilled","undusted","undying","unearned","unearth","unease","uneasily","uneasy","uneatable","uneaten","unedited","unelected","unending","unengaged","unenvied","unequal","unethical","uneven","unexpired","unexposed","unfailing","unfair","unfasten","unfazed","unfeeling","unfiled","unfilled","unfitted","unfitting","unfixable","unfixed","unflawed","unfocused","unfold","unfounded","unframed","unfreeze","unfrosted","unfrozen","unfunded","unglazed","ungloved","unglue","ungodly","ungraded","ungreased","unguarded","unguided","unhappily","unhappy","unharmed","unhealthy","unheard","unhearing","unheated","unhelpful","unhidden","unhinge","unhitched","unholy","unhook","unicorn","unicycle","unified","unifier","uniformed","uniformly","unify","unimpeded","uninjured","uninstall","uninsured","uninvited","union","uniquely","unisexual","unison","unissued","unit","universal","universe","unjustly","unkempt","unkind","unknotted","unknowing","unknown","unlaced","unlatch","unlawful","unleaded","unlearned","unleash","unless","unleveled","unlighted","unlikable","unlimited","unlined","unlinked","unlisted","unlit","unlivable","unloaded","unloader","unlocked","unlocking","unlovable","unloved","unlovely","unloving","unluckily","unlucky","unmade","unmanaged","unmanned","unmapped","unmarked","unmasked","unmasking","unmatched","unmindful","unmixable","unmixed","unmolded","unmoral","unmovable","unmoved","unmoving","unnamable","unnamed","unnatural","unneeded","unnerve","unnerving","unnoticed","unopened","unopposed","unpack","unpadded","unpaid","unpainted","unpaired","unpaved","unpeeled","unpicked","unpiloted","unpinned","unplanned","unplanted","unpleased","unpledged","unplowed","unplug","unpopular","unproven","unquote","unranked","unrated","unraveled","unreached","unread","unreal","unreeling","unrefined","unrelated","unrented","unrest","unretired","unrevised","unrigged","unripe","unrivaled","unroasted","unrobed","unroll","unruffled","unruly","unrushed","unsaddle","unsafe","unsaid","unsalted","unsaved","unsavory","unscathed","unscented","unscrew","unsealed","unseated","unsecured","unseeing","unseemly","unseen","unselect","unselfish","unsent","unsettled","unshackle","unshaken","unshaved","unshaven","unsheathe","unshipped","unsightly","unsigned","unskilled","unsliced","unsmooth","unsnap","unsocial","unsoiled","unsold","unsolved","unsorted","unspoiled","unspoken","unstable","unstaffed","unstamped","unsteady","unsterile","unstirred","unstitch","unstopped","unstuck","unstuffed","unstylish","unsubtle","unsubtly","unsuited","unsure","unsworn","untagged","untainted","untaken","untamed","untangled","untapped","untaxed","unthawed","unthread","untidy","untie","until","untimed","untimely","untitled","untoasted","untold","untouched","untracked","untrained","untreated","untried","untrimmed","untrue","untruth","unturned","untwist","untying","unusable","unused","unusual","unvalued","unvaried","unvarying","unveiled","unveiling","unvented","unviable","unvisited","unvocal","unwanted","unwarlike","unwary","unwashed","unwatched","unweave","unwed","unwelcome","unwell","unwieldy","unwilling","unwind","unwired","unwitting","unwomanly","unworldly","unworn","unworried","unworthy","unwound","unwoven","unwrapped","unwritten","unzip","upbeat","upchuck","upcoming","upcountry","update","upfront","upgrade","upheaval","upheld","uphill","uphold","uplifted","uplifting","upload","upon","upper","upright","uprising","upriver","uproar","uproot","upscale","upside","upstage","upstairs","upstart","upstate","upstream","upstroke","upswing","uptake","uptight","uptown","upturned","upward","upwind","uranium","urban","urchin","urethane","urgency","urgent","urging","urologist","urology","usable","usage","useable","used","uselessly","user","usher","usual","utensil","utility","utilize","utmost","utopia","utter","vacancy","vacant","vacate","vacation","vagabond","vagrancy","vagrantly","vaguely","vagueness","valiant","valid","valium","valley","valuables","value","vanilla","vanish","vanity","vanquish","vantage","vaporizer","variable","variably","varied","variety","various","varmint","varnish","varsity","varying","vascular","vaseline","vastly","vastness","veal","vegan","veggie","vehicular","velcro","velocity","velvet","vendetta","vending","vendor","veneering","vengeful","venomous","ventricle","venture","venue","venus","verbalize","verbally","verbose","verdict","verify","verse","version","versus","vertebrae","vertical","vertigo","very","vessel","vest","veteran","veto","vexingly","viability","viable","vibes","vice","vicinity","victory","video","viewable","viewer","viewing","viewless","viewpoint","vigorous","village","villain","vindicate","vineyard","vintage","violate","violation","violator","violet","violin","viper","viral","virtual","virtuous","virus","visa","viscosity","viscous","viselike","visible","visibly","vision","visiting","visitor","visor","vista","vitality","vitalize","vitally","vitamins","vivacious","vividly","vividness","vixen","vocalist","vocalize","vocally","vocation","voice","voicing","void","volatile","volley","voltage","volumes","voter","voting","voucher","vowed","vowel","voyage","wackiness","wad","wafer","waffle","waged","wager","wages","waggle","wagon","wake","waking","walk","walmart","walnut","walrus","waltz","wand","wannabe","wanted","wanting","wasabi","washable","washbasin","washboard","washbowl","washcloth","washday","washed","washer","washhouse","washing","washout","washroom","washstand","washtub","wasp","wasting","watch","water","waviness","waving","wavy","whacking","whacky","wham","wharf","wheat","whenever","whiff","whimsical","whinny","whiny","whisking","whoever","whole","whomever","whoopee","whooping","whoops","why","wick","widely","widen","widget","widow","width","wieldable","wielder","wife","wifi","wikipedia","wildcard","wildcat","wilder","wildfire","wildfowl","wildland","wildlife","wildly","wildness","willed","willfully","willing","willow","willpower","wilt","wimp","wince","wincing","wind","wing","winking","winner","winnings","winter","wipe","wired","wireless","wiring","wiry","wisdom","wise","wish","wisplike","wispy","wistful","wizard","wobble","wobbling","wobbly","wok","wolf","wolverine","womanhood","womankind","womanless","womanlike","womanly","womb","woof","wooing","wool","woozy","word","work","worried","worrier","worrisome","worry","worsening","worshiper","worst","wound","woven","wow","wrangle","wrath","wreath","wreckage","wrecker","wrecking","wrench","wriggle","wriggly","wrinkle","wrinkly","wrist","writing","written","wrongdoer","wronged","wrongful","wrongly","wrongness","wrought","xbox","xerox","yahoo","yam","yanking","yapping","yard","yarn","yeah","yearbook","yearling","yearly","yearning","yeast","yelling","yelp","yen","yesterday","yiddish","yield","yin","yippee","yo-yo","yodel","yoga","yogurt","yonder","yoyo","yummy","zap","zealous","zebra","zen","zeppelin","zero","zestfully","zesty","zigzagged","zipfile","zipping","zippy","zips","zit","zodiac","zombie","zone","zoning","zookeeper","zoologist","zoology","zoom"] diff --git a/res/screens-for-readme.png b/res/screens-for-readme.png new file mode 100644 index 0000000000..bd33b2e7a4 Binary files /dev/null and b/res/screens-for-readme.png differ diff --git a/rustdocs/.lock b/rustdocs/.lock new file mode 100644 index 0000000000..e69de29bb2 diff --git a/rustdocs/constants/all.html b/rustdocs/constants/all.html new file mode 100644 index 0000000000..7d997307ef --- /dev/null +++ b/rustdocs/constants/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/constants/constant.ADDRESS_BOOK.html b/rustdocs/constants/constant.ADDRESS_BOOK.html new file mode 100644 index 0000000000..3989d173eb --- /dev/null +++ b/rustdocs/constants/constant.ADDRESS_BOOK.html @@ -0,0 +1,3 @@ +ADDRESS_BOOK in constants - Rust

Constant constants::ADDRESS_BOOK

source ·
pub const ADDRESS_BOOK: &[u8] = b"address_book";
Expand description

Tree name for the tree storing the address book in hot database, with data +necessary for RPC calls

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.ADDRTREE.html b/rustdocs/constants/constant.ADDRTREE.html new file mode 100644 index 0000000000..6a39bdc267 --- /dev/null +++ b/rustdocs/constants/constant.ADDRTREE.html @@ -0,0 +1,3 @@ +ADDRTREE in constants - Rust

Constant constants::ADDRTREE

source ·
pub const ADDRTREE: &[u8] = b"addresses";
Expand description

Tree name for the tree storing user addresses associated public +information in cold database

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.ALICE_SEED_PHRASE.html b/rustdocs/constants/constant.ALICE_SEED_PHRASE.html new file mode 100644 index 0000000000..b25dfc65c6 --- /dev/null +++ b/rustdocs/constants/constant.ALICE_SEED_PHRASE.html @@ -0,0 +1,2 @@ +ALICE_SEED_PHRASE in constants - Rust
pub const ALICE_SEED_PHRASE: &str = "bottom drive obey lake curtain smoke basket hold race lonely fit walk";
Expand description

Alice seed phrase

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.BACK_COLOR.html b/rustdocs/constants/constant.BACK_COLOR.html new file mode 100644 index 0000000000..7bb7325268 --- /dev/null +++ b/rustdocs/constants/constant.BACK_COLOR.html @@ -0,0 +1,2 @@ +BACK_COLOR in constants - Rust

Constant constants::BACK_COLOR

source ·
pub const BACK_COLOR: [u8; 3];
Expand description

Background color for QR codes (both static and animated ones)

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.BORDER.html b/rustdocs/constants/constant.BORDER.html new file mode 100644 index 0000000000..7db37fb4a8 --- /dev/null +++ b/rustdocs/constants/constant.BORDER.html @@ -0,0 +1,2 @@ +BORDER in constants - Rust

Constant constants::BORDER

source ·
pub const BORDER: i32 = 4;
Expand description

Width of the QR code border, in QR code dots

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.CHUNK_SIZE.html b/rustdocs/constants/constant.CHUNK_SIZE.html new file mode 100644 index 0000000000..80097f0a9b --- /dev/null +++ b/rustdocs/constants/constant.CHUNK_SIZE.html @@ -0,0 +1,2 @@ +CHUNK_SIZE in constants - Rust

Constant constants::CHUNK_SIZE

source ·
pub const CHUNK_SIZE: u16 = 1072;
Expand description

Data chunk size for fountain QR code generation

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.COLD_DB_NAME_RELEASE.html b/rustdocs/constants/constant.COLD_DB_NAME_RELEASE.html new file mode 100644 index 0000000000..0c7ba8152b --- /dev/null +++ b/rustdocs/constants/constant.COLD_DB_NAME_RELEASE.html @@ -0,0 +1,2 @@ +COLD_DB_NAME_RELEASE in constants - Rust
pub const COLD_DB_NAME_RELEASE: &str = "../database/database_cold_release";
Expand description

Default folder for cold database generated during the Vault build

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.COLOR.html b/rustdocs/constants/constant.COLOR.html new file mode 100644 index 0000000000..a8e3433311 --- /dev/null +++ b/rustdocs/constants/constant.COLOR.html @@ -0,0 +1,3 @@ +COLOR in constants - Rust

Constant constants::COLOR

source ·
pub const COLOR: &str = "#660D35";
Expand description

Default color to be used in generating network specs with no color +information provided

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.DANGER.html b/rustdocs/constants/constant.DANGER.html new file mode 100644 index 0000000000..3f8deb902b --- /dev/null +++ b/rustdocs/constants/constant.DANGER.html @@ -0,0 +1,2 @@ +DANGER in constants - Rust

Constant constants::DANGER

source ·
pub const DANGER: &[u8] = b"dangerous_encounter";
Expand description

Key in settings tree SETTREE for Vault danger status

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.DRV.html b/rustdocs/constants/constant.DRV.html new file mode 100644 index 0000000000..36a638d0d5 --- /dev/null +++ b/rustdocs/constants/constant.DRV.html @@ -0,0 +1,2 @@ +DRV in constants - Rust

Constant constants::DRV

source ·
pub const DRV: &[u8] = b"derivations";
Expand description

Key in transactions tree TRANSACTION for derivations import data

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.ENABLE_DYNAMIC_DERIVATIONS.html b/rustdocs/constants/constant.ENABLE_DYNAMIC_DERIVATIONS.html new file mode 100644 index 0000000000..f652e8e2b6 --- /dev/null +++ b/rustdocs/constants/constant.ENABLE_DYNAMIC_DERIVATIONS.html @@ -0,0 +1,2 @@ +ENABLE_DYNAMIC_DERIVATIONS in constants - Rust
pub const ENABLE_DYNAMIC_DERIVATIONS: bool = true;
Expand description

Feature flag to disable dynamic derivations

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.EXPORT_FOLDER.html b/rustdocs/constants/constant.EXPORT_FOLDER.html new file mode 100644 index 0000000000..c47d0ce4a3 --- /dev/null +++ b/rustdocs/constants/constant.EXPORT_FOLDER.html @@ -0,0 +1,2 @@ +EXPORT_FOLDER in constants - Rust

Constant constants::EXPORT_FOLDER

source ·
pub const EXPORT_FOLDER: &str = "../files/completed";
Expand description

Folder to save completed update messages, for generate_message crate

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.FOLDER.html b/rustdocs/constants/constant.FOLDER.html new file mode 100644 index 0000000000..4080289427 --- /dev/null +++ b/rustdocs/constants/constant.FOLDER.html @@ -0,0 +1,2 @@ +FOLDER in constants - Rust

Constant constants::FOLDER

source ·
pub const FOLDER: &str = "../files/in_progress";
Expand description

Folder to save payloads ready for signing, for generate_message crate

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.FPS_DEN.html b/rustdocs/constants/constant.FPS_DEN.html new file mode 100644 index 0000000000..f5f9f4dd2c --- /dev/null +++ b/rustdocs/constants/constant.FPS_DEN.html @@ -0,0 +1,3 @@ +FPS_DEN in constants - Rust

Constant constants::FPS_DEN

source ·
pub const FPS_DEN: u16 = 15;
Expand description

Denominator of the fraction of time (in seconds) for which the frame in the +animated QR code is displayed

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.FPS_NOM.html b/rustdocs/constants/constant.FPS_NOM.html new file mode 100644 index 0000000000..1f7f6b6e76 --- /dev/null +++ b/rustdocs/constants/constant.FPS_NOM.html @@ -0,0 +1,3 @@ +FPS_NOM in constants - Rust

Constant constants::FPS_NOM

source ·
pub const FPS_NOM: u16 = 1;
Expand description

Numerator of the fraction of time (in seconds) for which the frame in the +animated QR code is displayed

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.GENERALVERIFIER.html b/rustdocs/constants/constant.GENERALVERIFIER.html new file mode 100644 index 0000000000..55c3d369f4 --- /dev/null +++ b/rustdocs/constants/constant.GENERALVERIFIER.html @@ -0,0 +1,2 @@ +GENERALVERIFIER in constants - Rust

Constant constants::GENERALVERIFIER

source ·
pub const GENERALVERIFIER: &[u8] = b"general_verifier";
Expand description

Key in settings tree SETTREE for general verifier information

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.HISTORY.html b/rustdocs/constants/constant.HISTORY.html new file mode 100644 index 0000000000..e4d4f70d86 --- /dev/null +++ b/rustdocs/constants/constant.HISTORY.html @@ -0,0 +1,2 @@ +HISTORY in constants - Rust

Constant constants::HISTORY

source ·
pub const HISTORY: &[u8] = b"history";
Expand description

Tree name for the tree storing Vault history

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.HISTORY_PAGE_SIZE.html b/rustdocs/constants/constant.HISTORY_PAGE_SIZE.html new file mode 100644 index 0000000000..7ed823fbdd --- /dev/null +++ b/rustdocs/constants/constant.HISTORY_PAGE_SIZE.html @@ -0,0 +1,2 @@ +HISTORY_PAGE_SIZE in constants - Rust
pub const HISTORY_PAGE_SIZE: usize = 20;
Expand description

Number of entries on log history page

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.HOT_DB_NAME.html b/rustdocs/constants/constant.HOT_DB_NAME.html new file mode 100644 index 0000000000..21179dca86 --- /dev/null +++ b/rustdocs/constants/constant.HOT_DB_NAME.html @@ -0,0 +1,2 @@ +HOT_DB_NAME in constants - Rust

Constant constants::HOT_DB_NAME

source ·
pub const HOT_DB_NAME: &str = "../database/database_hot";
Expand description

Default folder for hot database

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.LIVE_SCHEMA_VERSION.html b/rustdocs/constants/constant.LIVE_SCHEMA_VERSION.html new file mode 100644 index 0000000000..c57091f19f --- /dev/null +++ b/rustdocs/constants/constant.LIVE_SCHEMA_VERSION.html @@ -0,0 +1,2 @@ +LIVE_SCHEMA_VERSION in constants - Rust
pub const LIVE_SCHEMA_VERSION: u32 = 1;
Expand description

Current database schema version

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.MAIN_COLOR.html b/rustdocs/constants/constant.MAIN_COLOR.html new file mode 100644 index 0000000000..0eecf27319 --- /dev/null +++ b/rustdocs/constants/constant.MAIN_COLOR.html @@ -0,0 +1,2 @@ +MAIN_COLOR in constants - Rust

Constant constants::MAIN_COLOR

source ·
pub const MAIN_COLOR: [u8; 3];
Expand description

Main color for QR codes (both static and animated ones)

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.MAIN_COLOR_DANGER.html b/rustdocs/constants/constant.MAIN_COLOR_DANGER.html new file mode 100644 index 0000000000..14651150f7 --- /dev/null +++ b/rustdocs/constants/constant.MAIN_COLOR_DANGER.html @@ -0,0 +1,2 @@ +MAIN_COLOR_DANGER in constants - Rust
pub const MAIN_COLOR_DANGER: [u8; 3];
Expand description

Main color for dangerous QR codes (static only, in Vault)

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.MAX_WORDS_DISPLAY.html b/rustdocs/constants/constant.MAX_WORDS_DISPLAY.html new file mode 100644 index 0000000000..1809254f69 --- /dev/null +++ b/rustdocs/constants/constant.MAX_WORDS_DISPLAY.html @@ -0,0 +1,3 @@ +MAX_WORDS_DISPLAY in constants - Rust
pub const MAX_WORDS_DISPLAY: usize = 8;
Expand description

Maximum number of words displayed to user based on user input in seed +recovery process

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.METATREE.html b/rustdocs/constants/constant.METATREE.html new file mode 100644 index 0000000000..aba8dfa25a --- /dev/null +++ b/rustdocs/constants/constant.METATREE.html @@ -0,0 +1,3 @@ +METATREE in constants - Rust

Constant constants::METATREE

source ·
pub const METATREE: &[u8] = b"metadata";
Expand description

Tree name for the tree storing the network metadata in cold and in hot +databases

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.META_HISTORY.html b/rustdocs/constants/constant.META_HISTORY.html new file mode 100644 index 0000000000..eaf33ba856 --- /dev/null +++ b/rustdocs/constants/constant.META_HISTORY.html @@ -0,0 +1,3 @@ +META_HISTORY in constants - Rust

Constant constants::META_HISTORY

source ·
pub const META_HISTORY: &[u8] = b"metadata_history";
Expand description

Tree name for the tree storing the network block hash at the time of +metadata fetch, in hot database

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.SCALING.html b/rustdocs/constants/constant.SCALING.html new file mode 100644 index 0000000000..a11f17d7fc --- /dev/null +++ b/rustdocs/constants/constant.SCALING.html @@ -0,0 +1,2 @@ +SCALING in constants - Rust

Constant constants::SCALING

source ·
pub const SCALING: i32 = 4;
Expand description

Scaling factor for QR codes (size of QR code dot, in pixels)

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.SCHEMA_VERSION.html b/rustdocs/constants/constant.SCHEMA_VERSION.html new file mode 100644 index 0000000000..98461d734b --- /dev/null +++ b/rustdocs/constants/constant.SCHEMA_VERSION.html @@ -0,0 +1,2 @@ +SCHEMA_VERSION in constants - Rust

Constant constants::SCHEMA_VERSION

source ·
pub const SCHEMA_VERSION: &[u8] = b"schema_version";
Expand description

Key in settings tree SETTREE for Vault database schema version

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.SECONDARY_COLOR.html b/rustdocs/constants/constant.SECONDARY_COLOR.html new file mode 100644 index 0000000000..998f1576c2 --- /dev/null +++ b/rustdocs/constants/constant.SECONDARY_COLOR.html @@ -0,0 +1,3 @@ +SECONDARY_COLOR in constants - Rust

Constant constants::SECONDARY_COLOR

source ·
pub const SECONDARY_COLOR: &str = "#262626";
Expand description

Default secondary_color to be used in generating network specs with no +color information provided

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.SETTREE.html b/rustdocs/constants/constant.SETTREE.html new file mode 100644 index 0000000000..3f5b6ec0ee --- /dev/null +++ b/rustdocs/constants/constant.SETTREE.html @@ -0,0 +1,5 @@ +SETTREE in constants - Rust

Constant constants::SETTREE

source ·
pub const SETTREE: &[u8] = b"settings";
Expand description

Tree name for the tree storing database settings

+

In cold database, the settings tree contains general verifier, types +information, Vault danger status.

+

In hot database, the settings tree contains types information.

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.SIGN.html b/rustdocs/constants/constant.SIGN.html new file mode 100644 index 0000000000..6766e4cb60 --- /dev/null +++ b/rustdocs/constants/constant.SIGN.html @@ -0,0 +1,2 @@ +SIGN in constants - Rust

Constant constants::SIGN

source ·
pub const SIGN: &[u8] = b"sign";
Expand description

Key in transactions tree TRANSACTION for signable transactions

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.SPECSTREE.html b/rustdocs/constants/constant.SPECSTREE.html new file mode 100644 index 0000000000..97f3a4bfcd --- /dev/null +++ b/rustdocs/constants/constant.SPECSTREE.html @@ -0,0 +1,2 @@ +SPECSTREE in constants - Rust

Constant constants::SPECSTREE

source ·
pub const SPECSTREE: &[u8] = b"chainspecs";
Expand description

Tree name for the tree storing the network specs in cold database

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.SPECSTREEPREP.html b/rustdocs/constants/constant.SPECSTREEPREP.html new file mode 100644 index 0000000000..8a8d6d1674 --- /dev/null +++ b/rustdocs/constants/constant.SPECSTREEPREP.html @@ -0,0 +1,2 @@ +SPECSTREEPREP in constants - Rust

Constant constants::SPECSTREEPREP

source ·
pub const SPECSTREEPREP: &[u8] = b"chainspecs_prep";
Expand description

Tree name for the tree storing the network specs in hot database

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.STUB.html b/rustdocs/constants/constant.STUB.html new file mode 100644 index 0000000000..e754ecb797 --- /dev/null +++ b/rustdocs/constants/constant.STUB.html @@ -0,0 +1,2 @@ +STUB in constants - Rust

Constant constants::STUB

source ·
pub const STUB: &[u8] = b"stub";
Expand description

Key in transactions tree TRANSACTION for updates data

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.TRANSACTION.html b/rustdocs/constants/constant.TRANSACTION.html new file mode 100644 index 0000000000..a68ac3299a --- /dev/null +++ b/rustdocs/constants/constant.TRANSACTION.html @@ -0,0 +1,2 @@ +TRANSACTION in constants - Rust

Constant constants::TRANSACTION

source ·
pub const TRANSACTION: &[u8] = b"transaction";
Expand description

Tree name for the tree temporarily storing transaction entries

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.TYPES.html b/rustdocs/constants/constant.TYPES.html new file mode 100644 index 0000000000..b17d4fe807 --- /dev/null +++ b/rustdocs/constants/constant.TYPES.html @@ -0,0 +1,2 @@ +TYPES in constants - Rust

Constant constants::TYPES

source ·
pub const TYPES: &[u8] = b"types";
Expand description

Key in settings tree SETTREE for encoded types information

+
\ No newline at end of file diff --git a/rustdocs/constants/constant.VERIFIERS.html b/rustdocs/constants/constant.VERIFIERS.html new file mode 100644 index 0000000000..eedc73334d --- /dev/null +++ b/rustdocs/constants/constant.VERIFIERS.html @@ -0,0 +1,3 @@ +VERIFIERS in constants - Rust

Constant constants::VERIFIERS

source ·
pub const VERIFIERS: &[u8] = b"verifiers";
Expand description

Tree name for the tree storing the network verifiers information in cold +database

+
\ No newline at end of file diff --git a/rustdocs/constants/fn.qr_palette.html b/rustdocs/constants/fn.qr_palette.html new file mode 100644 index 0000000000..7c5315be02 --- /dev/null +++ b/rustdocs/constants/fn.qr_palette.html @@ -0,0 +1,2 @@ +qr_palette in constants - Rust

Function constants::qr_palette

source ·
pub fn qr_palette() -> Vec<u8>
Expand description

Color palette for QR codes (both static and animated ones)

+
\ No newline at end of file diff --git a/rustdocs/constants/fn.qr_palette_danger.html b/rustdocs/constants/fn.qr_palette_danger.html new file mode 100644 index 0000000000..ecc8789d39 --- /dev/null +++ b/rustdocs/constants/fn.qr_palette_danger.html @@ -0,0 +1,2 @@ +qr_palette_danger in constants - Rust
pub fn qr_palette_danger() -> Vec<u8>
Expand description

Color palette for dangerous QR codes (static only, in Vault)

+
\ No newline at end of file diff --git a/rustdocs/constants/index.html b/rustdocs/constants/index.html new file mode 100644 index 0000000000..942ce01c94 --- /dev/null +++ b/rustdocs/constants/index.html @@ -0,0 +1,69 @@ +constants - Rust

Crate constants

source ·
Expand description

Constants used throughout in Vault +and Vault-supporting ecosystem.

+

Vault uses cold database.

+

The database used on a non air-gapper device for updates generation is +called hot database.

+

Cold database is generated during the build, so it gets addressed both on +active and on signer side.

+

Cold database contains following trees:

+
    +
  • SPECSTREE, with network specs in cold database format
  • +
  • VERIFIERS, with network verifiers, i.e. data on who user trusts to +sign updates for a given network
  • +
  • METATREE, with network metadata
  • +
  • ADDRTREE, with user addresses public information
  • +
  • SETTREE, containing general verifier, types information, and Vault +danger status
  • +
  • TRANSACTION, used to store temporarily transaction data while the +user accepts or declines it
  • +
  • HISTORY, with history log
  • +
+

Hot database contains following trees:

+
    +
  • SPECSTREEPREP, with network specs in hot database format
  • +
  • METATREE, with network metadata, at most two versions for each network
  • +
  • META_HISTORY, with block hash at which the metadata was fetched
  • +
  • ADDRESS_BOOK, with network information needed to make RPC calls
  • +
  • SETTREE, containing types information
  • +
+

Common constants are:

+
    +
  • tree names in cold database alone or shared between cold and hot databases
  • +
  • key names in SPECSTREE tree of cold database alone or shared between +cold and hot databases
  • +
  • recurring throughout the Vault seed phrase for Alice
  • +
  • QR graphic settings, used for both static and animated PNG QR codes
  • +
+

Features

+

Feature "signer" corresponds to everything related exclusively to Vault +air-gapped device. It includes:

+
    +
  • keys for TRANSACTION tree, used for temporary storage for various +kinds of transactions while they are shown to user for approval
  • +
  • display settings for history log and word guesser
  • +
+

Feature "active" corresponds to all Vault-related things happening +exclusively without air-gap. It includes:

+
    +
  • default database addresses for hot database and cold release database
  • +
  • hot database specific tree names
  • +
  • default color settings for network specs
  • +
  • default files and folders name fragments, for use with generate_message
  • +
  • fountain qr generation parameters (large apng fountain qr codes are +generated only on the hot side)
  • +
+

Feature "test" includes all "signer" and "active" contents, and some +recurring data for integration testing, such as known identicons and known +export QR codes.

+

Modules

  • Hexadecimal strings with identicons and qr codes data, as encountered in +test jsons throughout the workspace

Constants

  • Tree name for the tree storing the address book in hot database, with data +necessary for RPC calls
  • Tree name for the tree storing user addresses associated public +information in cold database
  • Alice seed phrase
  • Background color for QR codes (both static and animated ones)
  • Width of the QR code border, in QR code dots
  • Data chunk size for fountain QR code generation
  • Default folder for cold database generated during the Vault build
  • Default color to be used in generating network specs with no color +information provided
  • Key in settings tree SETTREE for Vault danger status
  • Key in transactions tree TRANSACTION for derivations import data
  • Feature flag to disable dynamic derivations
  • Folder to save completed update messages, for generate_message crate
  • Folder to save payloads ready for signing, for generate_message crate
  • Denominator of the fraction of time (in seconds) for which the frame in the +animated QR code is displayed
  • Numerator of the fraction of time (in seconds) for which the frame in the +animated QR code is displayed
  • Key in settings tree SETTREE for general verifier information
  • Tree name for the tree storing Vault history
  • Number of entries on log history page
  • Default folder for hot database
  • Current database schema version
  • Main color for QR codes (both static and animated ones)
  • Main color for dangerous QR codes (static only, in Vault)
  • Maximum number of words displayed to user based on user input in seed +recovery process
  • Tree name for the tree storing the network metadata in cold and in hot +databases
  • Tree name for the tree storing the network block hash at the time of +metadata fetch, in hot database
  • Scaling factor for QR codes (size of QR code dot, in pixels)
  • Key in settings tree SETTREE for Vault database schema version
  • Default secondary_color to be used in generating network specs with no +color information provided
  • Tree name for the tree storing database settings
  • Key in transactions tree TRANSACTION for signable transactions
  • Tree name for the tree storing the network specs in cold database
  • Tree name for the tree storing the network specs in hot database
  • Key in transactions tree TRANSACTION for updates data
  • Tree name for the tree temporarily storing transaction entries
  • Key in settings tree SETTREE for encoded types information
  • Tree name for the tree storing the network verifiers information in cold +database

Functions

  • Color palette for QR codes (both static and animated ones)
  • Color palette for dangerous QR codes (static only, in Vault)
\ No newline at end of file diff --git a/rustdocs/constants/sidebar-items.js b/rustdocs/constants/sidebar-items.js new file mode 100644 index 0000000000..a022488c37 --- /dev/null +++ b/rustdocs/constants/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"constant":["ADDRESS_BOOK","ADDRTREE","ALICE_SEED_PHRASE","BACK_COLOR","BORDER","CHUNK_SIZE","COLD_DB_NAME_RELEASE","COLOR","DANGER","DRV","ENABLE_DYNAMIC_DERIVATIONS","EXPORT_FOLDER","FOLDER","FPS_DEN","FPS_NOM","GENERALVERIFIER","HISTORY","HISTORY_PAGE_SIZE","HOT_DB_NAME","LIVE_SCHEMA_VERSION","MAIN_COLOR","MAIN_COLOR_DANGER","MAX_WORDS_DISPLAY","METATREE","META_HISTORY","SCALING","SCHEMA_VERSION","SECONDARY_COLOR","SETTREE","SIGN","SPECSTREE","SPECSTREEPREP","STUB","TRANSACTION","TYPES","VERIFIERS"],"fn":["qr_palette","qr_palette_danger"],"mod":["test_values"]}; \ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_0.html b/rustdocs/constants/test_values/fn.alice_sr_0.html new file mode 100644 index 0000000000..5952e01884 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_0.html @@ -0,0 +1,2 @@ +alice_sr_0 in constants::test_values - Rust
pub fn alice_sr_0() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //0, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_1.html b/rustdocs/constants/test_values/fn.alice_sr_1.html new file mode 100644 index 0000000000..f8b15d118c --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_1.html @@ -0,0 +1,2 @@ +alice_sr_1 in constants::test_values - Rust
pub fn alice_sr_1() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //1, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_alice.html b/rustdocs/constants/test_values/fn.alice_sr_alice.html new file mode 100644 index 0000000000..923ae6692a --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_alice.html @@ -0,0 +1,2 @@ +alice_sr_alice in constants::test_values - Rust
pub fn alice_sr_alice() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //Alice, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_alice_secret_secret.html b/rustdocs/constants/test_values/fn.alice_sr_alice_secret_secret.html new file mode 100644 index 0000000000..3b31522911 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_alice_secret_secret.html @@ -0,0 +1,3 @@ +alice_sr_alice_secret_secret in constants::test_values - Rust
pub fn alice_sr_alice_secret_secret() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //Alice/secret//secret, Sr25519 +encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_alice_westend.html b/rustdocs/constants/test_values/fn.alice_sr_alice_westend.html new file mode 100644 index 0000000000..56a2fc3388 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_alice_westend.html @@ -0,0 +1,3 @@ +alice_sr_alice_westend in constants::test_values - Rust
pub fn alice_sr_alice_westend() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //Alice/westend, Sr25519 +encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_kusama.html b/rustdocs/constants/test_values/fn.alice_sr_kusama.html new file mode 100644 index 0000000000..30369de6b1 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_kusama.html @@ -0,0 +1,2 @@ +alice_sr_kusama in constants::test_values - Rust
pub fn alice_sr_kusama() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //kusama, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_polkadot.html b/rustdocs/constants/test_values/fn.alice_sr_polkadot.html new file mode 100644 index 0000000000..3d808990e2 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_polkadot.html @@ -0,0 +1,2 @@ +alice_sr_polkadot in constants::test_values - Rust
pub fn alice_sr_polkadot() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //polkadot, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_root.html b/rustdocs/constants/test_values/fn.alice_sr_root.html new file mode 100644 index 0000000000..d0d7a82d78 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_root.html @@ -0,0 +1,2 @@ +alice_sr_root in constants::test_values - Rust
pub fn alice_sr_root() -> Vec<u8>
Expand description

Identicon for Alice root key, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_secret_abracadabra.html b/rustdocs/constants/test_values/fn.alice_sr_secret_abracadabra.html new file mode 100644 index 0000000000..ff214fc910 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_secret_abracadabra.html @@ -0,0 +1,3 @@ +alice_sr_secret_abracadabra in constants::test_values - Rust
pub fn alice_sr_secret_abracadabra() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //secret///abracadabra, Sr25519 +encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_secret_path_multipass.html b/rustdocs/constants/test_values/fn.alice_sr_secret_path_multipass.html new file mode 100644 index 0000000000..77eebb1952 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_secret_path_multipass.html @@ -0,0 +1,3 @@ +alice_sr_secret_path_multipass in constants::test_values - Rust
pub fn alice_sr_secret_path_multipass() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //secret//path///multipass, Sr25519 +encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_westend.html b/rustdocs/constants/test_values/fn.alice_sr_westend.html new file mode 100644 index 0000000000..2bb52b9fd0 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_westend.html @@ -0,0 +1,2 @@ +alice_sr_westend in constants::test_values - Rust
pub fn alice_sr_westend() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //westend, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_sr_westend_0.html b/rustdocs/constants/test_values/fn.alice_sr_westend_0.html new file mode 100644 index 0000000000..3ea30a55c5 --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_sr_westend_0.html @@ -0,0 +1,2 @@ +alice_sr_westend_0 in constants::test_values - Rust
pub fn alice_sr_westend_0() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //westend//0, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.alice_westend_secret_qr.html b/rustdocs/constants/test_values/fn.alice_westend_secret_qr.html new file mode 100644 index 0000000000..1022e702ac --- /dev/null +++ b/rustdocs/constants/test_values/fn.alice_westend_secret_qr.html @@ -0,0 +1,2 @@ +alice_westend_secret_qr in constants::test_values - Rust
pub fn alice_westend_secret_qr() -> Vec<u8>
Expand description

Export qr code for root Alice secret in westend network

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.bob.html b/rustdocs/constants/test_values/fn.bob.html new file mode 100644 index 0000000000..3369423064 --- /dev/null +++ b/rustdocs/constants/test_values/fn.bob.html @@ -0,0 +1,2 @@ +bob in constants::test_values - Rust

Function constants::test_values::bob

source ·
pub fn bob() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //Bob, aka Bob, Sr25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.dock_31.html b/rustdocs/constants/test_values/fn.dock_31.html new file mode 100644 index 0000000000..afbfaf967c --- /dev/null +++ b/rustdocs/constants/test_values/fn.dock_31.html @@ -0,0 +1,2 @@ +dock_31 in constants::test_values - Rust

Function constants::test_values::dock_31

source ·
pub fn dock_31() -> Vec<u8>
Expand description

Identicon for dock31 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.ed.html b/rustdocs/constants/test_values/fn.ed.html new file mode 100644 index 0000000000..13b1d9765f --- /dev/null +++ b/rustdocs/constants/test_values/fn.ed.html @@ -0,0 +1,2 @@ +ed in constants::test_values - Rust

Function constants::test_values::ed

source ·
pub fn ed() -> Vec<u8>
Expand description

Identicon for Alice key with derivation //Alice, Ed25519 encryption

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.empty_png.html b/rustdocs/constants/test_values/fn.empty_png.html new file mode 100644 index 0000000000..779df22ac8 --- /dev/null +++ b/rustdocs/constants/test_values/fn.empty_png.html @@ -0,0 +1,3 @@ +empty_png in constants::test_values - Rust
pub fn empty_png() -> Vec<u8>
Expand description

Empty 30x30 transparent PNG image, +used in cases when identicon generation failed or public key does not exist

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.id_01.html b/rustdocs/constants/test_values/fn.id_01.html new file mode 100644 index 0000000000..2caa75161f --- /dev/null +++ b/rustdocs/constants/test_values/fn.id_01.html @@ -0,0 +1,2 @@ +id_01 in constants::test_values - Rust

Function constants::test_values::id_01

source ·
pub fn id_01() -> Vec<u8>
Expand description

Identicon for test address id_01

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.id_02.html b/rustdocs/constants/test_values/fn.id_02.html new file mode 100644 index 0000000000..0a1ce01242 --- /dev/null +++ b/rustdocs/constants/test_values/fn.id_02.html @@ -0,0 +1,2 @@ +id_02 in constants::test_values - Rust

Function constants::test_values::id_02

source ·
pub fn id_02() -> Vec<u8>
Expand description

Identicon for test address id_02

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.id_04.html b/rustdocs/constants/test_values/fn.id_04.html new file mode 100644 index 0000000000..ae841a167d --- /dev/null +++ b/rustdocs/constants/test_values/fn.id_04.html @@ -0,0 +1,2 @@ +id_04 in constants::test_values - Rust

Function constants::test_values::id_04

source ·
pub fn id_04() -> Vec<u8>
Expand description

Identicon for test address id_04

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.id_05.html b/rustdocs/constants/test_values/fn.id_05.html new file mode 100644 index 0000000000..069c90faaa --- /dev/null +++ b/rustdocs/constants/test_values/fn.id_05.html @@ -0,0 +1,2 @@ +id_05 in constants::test_values - Rust

Function constants::test_values::id_05

source ·
pub fn id_05() -> Vec<u8>
Expand description

Identicon for test address id_05

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.kusama_9130.html b/rustdocs/constants/test_values/fn.kusama_9130.html new file mode 100644 index 0000000000..6913edc335 --- /dev/null +++ b/rustdocs/constants/test_values/fn.kusama_9130.html @@ -0,0 +1,2 @@ +kusama_9130 in constants::test_values - Rust
pub fn kusama_9130() -> Vec<u8>
Expand description

Identicon for kusama9130 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.kusama_9151.html b/rustdocs/constants/test_values/fn.kusama_9151.html new file mode 100644 index 0000000000..9746a2e7eb --- /dev/null +++ b/rustdocs/constants/test_values/fn.kusama_9151.html @@ -0,0 +1,2 @@ +kusama_9151 in constants::test_values - Rust
pub fn kusama_9151() -> Vec<u8>
Expand description

Identicon for kusama9151 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.shell_200.html b/rustdocs/constants/test_values/fn.shell_200.html new file mode 100644 index 0000000000..7aa3b206c5 --- /dev/null +++ b/rustdocs/constants/test_values/fn.shell_200.html @@ -0,0 +1,2 @@ +shell_200 in constants::test_values - Rust
pub fn shell_200() -> Vec<u8>
Expand description

Identicon for shell200 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.types_known.html b/rustdocs/constants/test_values/fn.types_known.html new file mode 100644 index 0000000000..442bf8d989 --- /dev/null +++ b/rustdocs/constants/test_values/fn.types_known.html @@ -0,0 +1,2 @@ +types_known in constants::test_values - Rust
pub fn types_known() -> Vec<u8>
Expand description

Identicon for hash of types information

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.types_unknown.html b/rustdocs/constants/test_values/fn.types_unknown.html new file mode 100644 index 0000000000..be80210d7c --- /dev/null +++ b/rustdocs/constants/test_values/fn.types_unknown.html @@ -0,0 +1,2 @@ +types_unknown in constants::test_values - Rust
pub fn types_unknown() -> Vec<u8>
Expand description

Identicon for hash of unknown to the database types information

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.westend_9000.html b/rustdocs/constants/test_values/fn.westend_9000.html new file mode 100644 index 0000000000..f068e5f090 --- /dev/null +++ b/rustdocs/constants/test_values/fn.westend_9000.html @@ -0,0 +1,2 @@ +westend_9000 in constants::test_values - Rust
pub fn westend_9000() -> Vec<u8>
Expand description

Identicon for westend9000 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.westend_9010.html b/rustdocs/constants/test_values/fn.westend_9010.html new file mode 100644 index 0000000000..ea13074a78 --- /dev/null +++ b/rustdocs/constants/test_values/fn.westend_9010.html @@ -0,0 +1,2 @@ +westend_9010 in constants::test_values - Rust
pub fn westend_9010() -> Vec<u8>
Expand description

Identicon for westend9010 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.westend_9070.html b/rustdocs/constants/test_values/fn.westend_9070.html new file mode 100644 index 0000000000..fc1ec77be5 --- /dev/null +++ b/rustdocs/constants/test_values/fn.westend_9070.html @@ -0,0 +1,2 @@ +westend_9070 in constants::test_values - Rust
pub fn westend_9070() -> Vec<u8>
Expand description

Identicon for westend9070 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.westend_9111.html b/rustdocs/constants/test_values/fn.westend_9111.html new file mode 100644 index 0000000000..19d3c0eb73 --- /dev/null +++ b/rustdocs/constants/test_values/fn.westend_9111.html @@ -0,0 +1,2 @@ +westend_9111 in constants::test_values - Rust
pub fn westend_9111() -> Vec<u8>
Expand description

Identicon for westend9111 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/fn.westend_9122.html b/rustdocs/constants/test_values/fn.westend_9122.html new file mode 100644 index 0000000000..57cefad301 --- /dev/null +++ b/rustdocs/constants/test_values/fn.westend_9122.html @@ -0,0 +1,2 @@ +westend_9122 in constants::test_values - Rust
pub fn westend_9122() -> Vec<u8>
Expand description

Identicon for westend9122 metadata hash

+
\ No newline at end of file diff --git a/rustdocs/constants/test_values/index.html b/rustdocs/constants/test_values/index.html new file mode 100644 index 0000000000..4b76779a20 --- /dev/null +++ b/rustdocs/constants/test_values/index.html @@ -0,0 +1,8 @@ +constants::test_values - Rust

Module constants::test_values

source ·
Expand description

Hexadecimal strings with identicons and qr codes data, as encountered in +test jsons throughout the workspace

+

Functions

  • Identicon for Alice key with derivation //0, Sr25519 encryption
  • Identicon for Alice key with derivation //1, Sr25519 encryption
  • Identicon for Alice key with derivation //Alice, Sr25519 encryption
  • Identicon for Alice key with derivation //Alice/secret//secret, Sr25519 +encryption
  • Identicon for Alice key with derivation //Alice/westend, Sr25519 +encryption
  • Identicon for Alice key with derivation //kusama, Sr25519 encryption
  • Identicon for Alice key with derivation //polkadot, Sr25519 encryption
  • Identicon for Alice root key, Sr25519 encryption
  • Identicon for Alice key with derivation //secret///abracadabra, Sr25519 +encryption
  • Identicon for Alice key with derivation //secret//path///multipass, Sr25519 +encryption
  • Identicon for Alice key with derivation //westend, Sr25519 encryption
  • Identicon for Alice key with derivation //westend//0, Sr25519 encryption
  • Export qr code for root Alice secret in westend network
  • Identicon for Alice key with derivation //Bob, aka Bob, Sr25519 encryption
  • Identicon for dock31 metadata hash
  • Identicon for Alice key with derivation //Alice, Ed25519 encryption
  • Empty 30x30 transparent PNG image, +used in cases when identicon generation failed or public key does not exist
  • Identicon for test address id_01
  • Identicon for test address id_02
  • Identicon for test address id_04
  • Identicon for test address id_05
  • Identicon for kusama9130 metadata hash
  • Identicon for kusama9151 metadata hash
  • Identicon for shell200 metadata hash
  • Identicon for hash of types information
  • Identicon for hash of unknown to the database types information
  • Identicon for westend9000 metadata hash
  • Identicon for westend9010 metadata hash
  • Identicon for westend9070 metadata hash
  • Identicon for westend9111 metadata hash
  • Identicon for westend9122 metadata hash
\ No newline at end of file diff --git a/rustdocs/constants/test_values/sidebar-items.js b/rustdocs/constants/test_values/sidebar-items.js new file mode 100644 index 0000000000..d57d33112e --- /dev/null +++ b/rustdocs/constants/test_values/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["alice_sr_0","alice_sr_1","alice_sr_alice","alice_sr_alice_secret_secret","alice_sr_alice_westend","alice_sr_kusama","alice_sr_polkadot","alice_sr_root","alice_sr_secret_abracadabra","alice_sr_secret_path_multipass","alice_sr_westend","alice_sr_westend_0","alice_westend_secret_qr","bob","dock_31","ed","empty_png","id_01","id_02","id_04","id_05","kusama_9130","kusama_9151","shell_200","types_known","types_unknown","westend_9000","westend_9010","westend_9070","westend_9111","westend_9122"]}; \ No newline at end of file diff --git a/rustdocs/crates.js b/rustdocs/crates.js new file mode 100644 index 0000000000..8c56be73b7 --- /dev/null +++ b/rustdocs/crates.js @@ -0,0 +1 @@ +window.ALL_CRATES = ["constants","db_handling","defaults","definitions","generate_message","navigator","parser","printing_balance","qr_reader_pc","qr_reader_phone","qrcode_rtx","qrcode_static","signer","transaction_parsing","transaction_signing"]; \ No newline at end of file diff --git a/rustdocs/db_handling/all.html b/rustdocs/db_handling/all.html new file mode 100644 index 0000000000..f3194941c4 --- /dev/null +++ b/rustdocs/db_handling/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Structs

Enums

Functions

Type Definitions

Constants

\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/fn.init_db.html b/rustdocs/db_handling/cold_default/fn.init_db.html new file mode 100644 index 0000000000..33409d93d6 --- /dev/null +++ b/rustdocs/db_handling/cold_default/fn.init_db.html @@ -0,0 +1,10 @@ +init_db in db_handling::cold_default - Rust
pub fn init_db(database: &Db, general_verifier: Verifier) -> Result<()>
Expand description

Initiate cold database and set up the database general verifier to given +Verifier.

+

Function simultaneously sets up the general verifier and marks the new start +of the history log.

+

Could be used both from the Vault side (with Wipe all data and with +Remove general certificate procedures) and from the active side, when +when preparing the test databases.

+

After applying this function the database becomes ready to be used by the +Vault.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/fn.populate_cold.html b/rustdocs/db_handling/cold_default/fn.populate_cold.html new file mode 100644 index 0000000000..f0efbe2887 --- /dev/null +++ b/rustdocs/db_handling/cold_default/fn.populate_cold.html @@ -0,0 +1,3 @@ +populate_cold in db_handling::cold_default - Rust
pub fn populate_cold(database: &Db, general_verifier: Verifier) -> Result<()>
Expand description

Generate initiated test cold database with default content, and create in it +Alice default addresses.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/fn.populate_cold_nav_test.html b/rustdocs/db_handling/cold_default/fn.populate_cold_nav_test.html new file mode 100644 index 0000000000..f8fd86cc92 --- /dev/null +++ b/rustdocs/db_handling/cold_default/fn.populate_cold_nav_test.html @@ -0,0 +1,2 @@ +populate_cold_nav_test in db_handling::cold_default - Rust
pub fn populate_cold_nav_test(database: &Db) -> Result<()>
Expand description

Generate not initiated test cold database for navigator testing.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/fn.populate_cold_no_metadata.html b/rustdocs/db_handling/cold_default/fn.populate_cold_no_metadata.html new file mode 100644 index 0000000000..1f1bc60d80 --- /dev/null +++ b/rustdocs/db_handling/cold_default/fn.populate_cold_no_metadata.html @@ -0,0 +1,13 @@ +populate_cold_no_metadata in db_handling::cold_default - Rust
pub fn populate_cold_no_metadata(
+    database: &Db,
+    general_verifier: Verifier
+) -> Result<()>
Expand description

Generate initiated test cold database without network metadata.

+

Function wipes everything in the database directory and loads into database +defaults for:

+
    +
  • network specs
  • +
  • types information and danger status
  • +
  • network verifiers
  • +
+

Then the database is initiated with given general verifier.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/fn.populate_cold_no_networks.html b/rustdocs/db_handling/cold_default/fn.populate_cold_no_networks.html new file mode 100644 index 0000000000..7f9e3fc6aa --- /dev/null +++ b/rustdocs/db_handling/cold_default/fn.populate_cold_no_networks.html @@ -0,0 +1,8 @@ +populate_cold_no_networks in db_handling::cold_default - Rust
pub fn populate_cold_no_networks(
+    database: &Db,
+    general_verifier: Verifier
+) -> Result<()>
Expand description

Generate initiated test cold database with no network-associated data.

+

Function wipes everything in the database directory and loads into database +defaults for types information and danger status. Then the database is +initiated with given general verifier.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/fn.signer_init_no_cert.html b/rustdocs/db_handling/cold_default/fn.signer_init_no_cert.html new file mode 100644 index 0000000000..8431580d90 --- /dev/null +++ b/rustdocs/db_handling/cold_default/fn.signer_init_no_cert.html @@ -0,0 +1,3 @@ +signer_init_no_cert in db_handling::cold_default - Rust
pub fn signer_init_no_cert(database: &Db) -> Result<()>
Expand description

Initiate Vault database with general verifier set up to Verifier(None).

+

Function is applied during Remove general certificate procedure.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/fn.signer_init_with_cert.html b/rustdocs/db_handling/cold_default/fn.signer_init_with_cert.html new file mode 100644 index 0000000000..b2a5e8949f --- /dev/null +++ b/rustdocs/db_handling/cold_default/fn.signer_init_with_cert.html @@ -0,0 +1,5 @@ +signer_init_with_cert in db_handling::cold_default - Rust
pub fn signer_init_with_cert(database: &Db) -> Result<()>
Expand description

Initiate Vault database with default general verifier (Parity-associated +key).

+

Function is applied during the initial start of the Vault and during +Wipe all data procedure.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/index.html b/rustdocs/db_handling/cold_default/index.html new file mode 100644 index 0000000000..7ca63e9cbe --- /dev/null +++ b/rustdocs/db_handling/cold_default/index.html @@ -0,0 +1,41 @@ +db_handling::cold_default - Rust
Expand description

Making and restoring cold database with default content

+

Cold database is the database that is operated from inside the Vault.

+

Cold database contains following trees:

+
    +
  • ADDRTREE with public addresses data
  • +
  • HISTORY with Vault history log
  • +
  • METATREE with network metadata
  • +
  • SETTREE with settings: types information, Vault dangerous exposures +record and Vault database general verifier
  • +
  • SPECSTREE with network specs
  • +
  • TRANSACTION for temporary storage of the transaction data
  • +
  • VERIFIERS with network verifiers data
  • +
+

For release, the cold database is generated on the hot side and then copied +verbatim into Vault files during the build.

+

Before the database could be used, it must be initiated:

+
    +
  • History log old entries (if any are present) are removed and a new entry +Event::DatabaseInitiated is added
  • +
  • General verifier is set and this event is recorded in the history log. By +default, Vault sets up Parity-associated key as a general verifier. This +could be later on changed by the user.
  • +
+

Vault then reads and updates the database as it operates.

+

There are two ways to reset the database from the Vault user interface. +Either would remove all the keys and restore the database to the release +state. The difference would be only in the general verifier setting:

+
    +
  • Wipe all data would set the general verifier to default Some(_), +with Parity-associated key inside
  • +
  • Remove general certificate would set the general verifier to None. +User would then be able to set up own general verifier, preferably +immediately afterwards, by loading to Vault any verified data. +Setting up a new general verifier would remove all data associated with the +general verifier from the Vault database to avoid confusion as to who +verified what information.
  • +
+

Functions

\ No newline at end of file diff --git a/rustdocs/db_handling/cold_default/sidebar-items.js b/rustdocs/db_handling/cold_default/sidebar-items.js new file mode 100644 index 0000000000..0d6e8aa0f1 --- /dev/null +++ b/rustdocs/db_handling/cold_default/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["init_db","populate_cold","populate_cold_nav_test","populate_cold_no_metadata","populate_cold_no_networks","signer_init_no_cert","signer_init_with_cert"]}; \ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/enum.SignContent.html b/rustdocs/db_handling/db_transactions/enum.SignContent.html new file mode 100644 index 0000000000..b4bbf5bc5e --- /dev/null +++ b/rustdocs/db_handling/db_transactions/enum.SignContent.html @@ -0,0 +1,168 @@ +SignContent in db_handling::db_transactions - Rust
pub enum SignContent {
+    Transaction {
+        method: Vec<u8>,
+        extensions: Vec<u8>,
+    },
+    Message(String),
+}
Expand description

Signable transaction content

+

Vault can sign:

+
    +
  • transactions
  • +
  • messages
  • +
+

Mortal signable transactions have prelude 53xx00, immortal have prelude +53xx02. Signable transactions consist of method with call details and +extensions.

+

Messages contain SCALE-encoded text messages.

+

Variants§

§

Transaction

Fields

§method: Vec<u8>

method as raw data

+
§extensions: Vec<u8>

extensions as raw data

+

53xx00 or 53xx02 transaction

+
§

Message(String)

53xx03 text message

+

Trait Implementations§

source§

impl Clone for SignContent

source§

fn clone(&self) -> SignContent

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SignContent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for SignContent

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for SignContent

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<SignContent> for SignContent

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/index.html b/rustdocs/db_handling/db_transactions/index.html new file mode 100644 index 0000000000..b0a5d3bba2 --- /dev/null +++ b/rustdocs/db_handling/db_transactions/index.html @@ -0,0 +1,11 @@ +db_handling::db_transactions - Rust
Expand description

Atomic transactions in cold and hot databases

+

Additions and removals of entries in cold and hot database occur through +atomic transactions. +Each tree gets updated with its own [Batch], updates occur within a single +transaction.

+

For transactions scanned into Vault, currently a temporary database entry +is made to store transaction details while they are displayed to user.

+

Structs

  • Cold database transaction data containing [Batch] elements that will be +applied to each Tree.
  • Temporary storage for signable transaction and associated data.
  • Draft for cold database atomic transaction, constructed for Vault update +transaction (add_specs, load_metadata, load_types).
  • Hot database transaction data containing [Batch] elements that will be +applied to each Tree.

Enums

\ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/sidebar-items.js b/rustdocs/db_handling/db_transactions/sidebar-items.js new file mode 100644 index 0000000000..1f795d9ab7 --- /dev/null +++ b/rustdocs/db_handling/db_transactions/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["SignContent"],"struct":["TrDbCold","TrDbColdSign","TrDbColdSignOne","TrDbColdStub","TrDbHot"]}; \ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/struct.TrDbCold.html b/rustdocs/db_handling/db_transactions/struct.TrDbCold.html new file mode 100644 index 0000000000..e476ebe4ff --- /dev/null +++ b/rustdocs/db_handling/db_transactions/struct.TrDbCold.html @@ -0,0 +1,145 @@ +TrDbCold in db_handling::db_transactions - Rust
pub struct TrDbCold { /* private fields */ }
Expand description

Cold database transaction data containing [Batch] elements that will be +applied to each Tree.

+

Cold database tree names and content information could be found in +constants crate. All trees are routinely updated as Vault is used.

+

TrDbCold is applied to the cold database in an atomic transaction.

+

TrDbCold is used both by the Vault side (for all database-related +actions) and the active side (to generate and populate the cold database).

+

Note that all the checking is done as the TrDbCold is generated, +apply method does not do any checks on its own.

+

Implementations§

source§

impl TrDbCold

source

pub fn new() -> Self

Construct new empty TrDbCold.

+
source

pub fn set_addresses(self, for_addresses: Batch) -> Self

Set for_addresses field in TrDbCold with Batch that will be +applied to ADDRTREE tree.

+
source

pub fn set_history(self, for_history: Batch) -> Self

Set for_history field in TrDbCold with Batch that will be +applied to HISTORY tree.

+
source

pub fn set_metadata(self, for_metadata: Batch) -> Self

Set for_metadata field in TrDbCold with Batch that will be +applied to METATREE tree.

+
source

pub fn set_network_specs(self, for_network_specs: Batch) -> Self

Set for_network_specs field in TrDbCold with Batch that will be +applied to SPECSTREE tree.

+
source

pub fn set_settings(self, for_settings: Batch) -> Self

Set for_settings field in TrDbCold with Batch that will be +applied to SETTREE tree.

+
source

pub fn set_transaction(self, for_transaction: Batch) -> Self

Set for_transaction field in TrDbCold with Batch that will be +applied to TRANSACTION tree.

+
source

pub fn set_verifiers(self, for_verifiers: Batch) -> Self

Set for_verifiers field in TrDbCold with Batch that will be +applied to VERIFIERS tree.

+
source

pub fn apply(&self, database: &Db) -> Result<()>

Apply constructed set of batches within TrDbCold to the database +with a given name, in a single transaction.

+

Note that both ErrorSource variants are available.

+

Trait Implementations§

source§

impl Debug for TrDbCold

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for TrDbCold

source§

fn default() -> Self

Default value for TrDbCold. Empty.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/struct.TrDbColdSign.html b/rustdocs/db_handling/db_transactions/struct.TrDbColdSign.html new file mode 100644 index 0000000000..a0db29cfaf --- /dev/null +++ b/rustdocs/db_handling/db_transactions/struct.TrDbColdSign.html @@ -0,0 +1,211 @@ +TrDbColdSign in db_handling::db_transactions - Rust
pub struct TrDbColdSign {
+    pub signing_bulk: Vec<TrDbColdSignOne>,
+}
Expand description

Temporary storage for signable transaction and associated data.

+

Signable transaction received by the Vault must always be parsed prior to +signing, and when it is, TrDbColdSign is generated and the transaction +details are shown to user.

+

If the user signs the transaction or tries to sign and enters wrong +password, the transaction data will be recorded in Vault history log.

+

While the user considers the transaction, TrDbColdSign is stored +SCALE-encoded in TRANSACTION tree of the cold database under the key +SIGN.

+

TrDbColdSign contains:

+
    +
  • SignContent with data to sign
  • +
  • name of the network in which the transaction is made
  • +
  • derivation path of the address used, whether the address has password, +corresponding [MultiSigner] value
  • +
  • relevant history Event set: warnings that were shown during the +parsing
  • +
+

Fields§

§signing_bulk: Vec<TrDbColdSignOne>

Bulk of transactions to sign.

+

Implementations§

source§

impl TrDbColdSign

source

pub fn from_storage( + database: &Db, + checksum: Option<u32> +) -> Result<Option<Self>>

Recover TrDbColdSign from storage in the cold database.

+

Function requires an optional correct checksum to make sure +the signable transaction is still the one that was shown to +the user previously, and no changes to the database have occurred. +While parsing a bulk no checksum is provided and no checks are done.

+

TRANSACTION tree is not cleared in the process. User is allowed +to try entering password several times, for all this time the +transaction remains in the database.

+
source

pub fn store_and_get_checksum(&self, database: &Db) -> Result<u32>

Put SCALE-encoded TrDbColdSign into storage in the TRANSACTION +tree of the cold database under the key SIGN.

+

Function returns u32 checksum. This checksum is needed to recover +stored TrDbColdSign using from_storage method.

+

The TRANSACTION tree is cleared prior to adding data to storage.

+
source

pub fn apply( + self, + database: &Db, + wrong_password: bool, + user_comment: &str, + idx: usize +) -> Result<u32>

Use TrDbColdSign to add history log data into the cold database.

+

Possible history log entries are:

+
    +
  • Event::TransactionSigned(_) and Event::MessageSigned(_) for the +cases when the signature was generated and displayed through the user +interface
  • +
  • Event::TransactionSignError(_) and Event::MessageSignError(_) for +the cases when the user has entered the wrong password and no signature +was generated. Vault current policy is to log all wrong password entry +attempts.
  • +
+

Required input:

+
    +
  • wrong_password flag; for entries with true value the signature +was not generated, because user has entered the wrong password;
  • +
  • user-added text comment for the transaction
  • +
  • index of the transaction in the bulk
  • +
  • database name, into which the data is added
  • +
+

Function returns database checksum, to be collected and re-used in case +of wrong password entry.

+

Trait Implementations§

source§

impl Debug for TrDbColdSign

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for TrDbColdSign

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Default for TrDbColdSign

source§

fn default() -> TrDbColdSign

Returns the “default value” for a type. Read more
source§

impl Encode for TrDbColdSign

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl From<TrDbColdSignOne> for TrDbColdSign

source§

fn from(t: TrDbColdSignOne) -> Self

Converts to this type from the input type.
source§

impl EncodeLike<TrDbColdSign> for TrDbColdSign

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/struct.TrDbColdSignOne.html b/rustdocs/db_handling/db_transactions/struct.TrDbColdSignOne.html new file mode 100644 index 0000000000..963748a71a --- /dev/null +++ b/rustdocs/db_handling/db_transactions/struct.TrDbColdSignOne.html @@ -0,0 +1,165 @@ +TrDbColdSignOne in db_handling::db_transactions - Rust
pub struct TrDbColdSignOne { /* private fields */ }

Implementations§

source§

impl TrDbColdSignOne

source

pub fn generate( + content: SignContent, + network_name: &str, + path: &str, + has_pwd: bool, + multisigner: &MultiSigner, + history: Vec<Event> +) -> Self

Construct TrDbColdSign from components.

+

Required input:

+
    +
  • SignContent with data to sign
  • +
  • name of the network in which the transaction is made
  • +
  • derivation path of the address used, whether the address has password, +corresponding [MultiSigner] value
  • +
  • relevant history Event set
  • +
+
source

pub fn content(&self) -> &SignContent

Get transaction content.

+
source

pub fn path(&self) -> String

Get derivation path.

+
source

pub fn has_pwd(&self) -> bool

Get has_pwd flag.

+
source

pub fn multisigner(&self) -> MultiSigner

Get [MultiSigner] value

+

Trait Implementations§

source§

impl Debug for TrDbColdSignOne

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for TrDbColdSignOne

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for TrDbColdSignOne

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl From<TrDbColdSignOne> for TrDbColdSign

source§

fn from(t: TrDbColdSignOne) -> Self

Converts to this type from the input type.
source§

impl EncodeLike<TrDbColdSignOne> for TrDbColdSignOne

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/struct.TrDbColdStub.html b/rustdocs/db_handling/db_transactions/struct.TrDbColdStub.html new file mode 100644 index 0000000000..400f86d778 --- /dev/null +++ b/rustdocs/db_handling/db_transactions/struct.TrDbColdStub.html @@ -0,0 +1,297 @@ +TrDbColdStub in db_handling::db_transactions - Rust
pub struct TrDbColdStub { /* private fields */ }
Expand description

Draft for cold database atomic transaction, constructed for Vault update +transaction (add_specs, load_metadata, load_types).

+

TrDbColdStub is stored SCALE-encoded in TRANSACTION tree +of the cold database under key STUB while the update is considered by +the user. Draft is applied atomically to the cold database if the update is +accepted.

+

Accepting an update could result in adding or removing database data.

+

TrDbColdStub contains Event set for HISTORY tree update and +BatchStub update drafts with corresponding removals and additions for +database trees:

+ +

Note that all the checking is done before the TrDbColdStub is written +into TRANSACTION tree, apply method will check only that the checksum +known to the user is the same as the one database has currently.

+

Implementations§

source§

impl TrDbColdStub

source

pub fn new() -> Self

Construct new empty TrDbColdStub.

+
source

pub fn from_storage(database: &Db, checksum: u32) -> Result<Self>

Recover TrDbColdStub from storage in the cold database.

+

Function requires correct checksum to make sure the transaction is +still the one that was shown to the user previously, and no changes to +the database have occured after the atomic transaction draft was placed +into storage.

+

TRANSACTION tree is cleared in the process.

+
source

pub fn store_and_get_checksum(&self, database: &Db) -> Result<u32>

Put SCALE-encoded TrDbColdStub into storage in the TRANSACTION +tree of the cold database under the key STUB.

+

Function returns u32 checksum. This checksum is needed to recover +stored TrDbColdStub using from_storage method.

+

The TRANSACTION tree is cleared prior to adding data to storage.

+
source

pub fn new_history_entry(self, event: Event) -> Self

Add new Event in history_stub field of the TrDbColdStub

+
source

pub fn add_metadata(self, meta_values: &MetaValues) -> Self

Prepare adding the metadata received as load_metadata update into the +cold database:

+
    +
  • Add a (key, value) pair to the metadata additions queue in +metadata_stub. Key is MetaKey in key form, value is metadata in +Vec<u8> format.
  • +
  • Add corresponding Event::MetadataAdded(_) into history_stub.
  • +
+
source

pub fn remove_metadata(self, meta_values: &MetaValues) -> Self

Prepare removing the metadata from the cold database:

+
    +
  • Add MetaKey in key form to the metadata removals queue in +metadata_stub.
  • +
  • Add corresponding Event::MetadataRemoved(_) into history_stub.
  • +
+

Function is used for Hold and GeneralHold processing when, +respectively, the network verifier or the general verifier is changed.

+
source

pub fn add_network_specs( + self, + database: &Db, + network_specs_to_send: &NetworkSpecs, + valid_current_verifier: &ValidCurrentVerifier, + general_verifier: &Verifier +) -> Result<Self>

Prepare adding OrderedNetworkSpecs into the cold database:

+
    +
  • Transform received in add_specs payload NetworkSpecs +into OrderedNetworkSpecs by adding order field. Networks are always added +in the end of the network list, with order set to the total number of +network specs entries currently in Vault. When a network is removed, +the order of the remaining networks gets rearranged, see details in +function remove_network.
  • +
  • Add a (key, value) pair to the network specs additions queue in +network_specs_stub. Key is NetworkSpecsKey in key form, value is +SCALE-encoded OrderedNetworkSpecs.
  • +
  • Add corresponding Event::NetworkSpecsAdded(_) into history_stub.
  • +
  • Add root address for the network if the +AddressDetails entry with +matching Encryption already exists, +i.e. add (key, value) pair to the address additions queue in +addresses_stub. Key is +AddressKey +in key form, value is +SCALE-encoded updated +AddressDetails.
  • +
  • If address was added, add corresponding Event::IdentityAdded(_) +into history_stub.
  • +
+

Note that add_network_specs does not deal with network verifiers: +verifier data is not necessarily updated each time the network +specs are added.

+
source

pub fn remove_network_specs( + self, + network_specs: &OrderedNetworkSpecs, + valid_current_verifier: &ValidCurrentVerifier, + general_verifier: &Verifier +) -> Self

Prepare removing OrderedNetworkSpecs from the cold database:

+
    +
  • Add NetworkSpecsKey in key form to the network specs removal queue +in network_specs_stub.
  • +
  • Add corresponding Event::NetworkSpecsRemoved(_) into history_stub.
  • +
+

Function is used for Hold and GeneralHold processing when, +respectively, the network verifier or the general verifier is changed.

+

Note that function does not deal with the verifiers nor with the +addresses.

+

Verifiers remain unchanged during the hold processing.

+

The addresses are not removed and will be again visible from the user +interface when the properly verified network specs are loaded in Vault.

+
source

pub fn new_general_verifier(self, general_verifier: &Verifier) -> Self

Prepare adding new general verifier Verifier into the cold +database:

+
    +
  • Add a (key, value) pair to the settings additions queue in +settings_stub. Key is GENERALVERIFIER and the value is +SCALE-encoded Verifier that is set to be the new general verifier.
  • +
  • Add corresponding Event::GeneralVerifierSet(_) into history_stub.
  • +
+
source

pub fn add_types( + self, + types: &ContentLoadTypes, + general_verifier: &Verifier +) -> Self

Prepare adding types information ContentLoadTypes received as +load_types update into the cold database:

+
    +
  • Add a (key, value) pair to the settings additions queue in +settings_stub. Key is TYPES and the value is ContentLoadTypes +types information in store format (SCALE-encoded).
  • +
  • Add corresponding Event::TypesAdded(_) into history_stub.
  • +
+
source

pub fn remove_types( + self, + types: &ContentLoadTypes, + general_verifier: &Verifier +) -> Self

Prepare removing types information from the cold database:

+
    +
  • Add TYPES key to the settings removal queue in settings_stub.
  • +
  • Add corresponding Event::TypesRemoved(_) into history_stub.
  • +
+

Function is used to process GeneralHold when general verifier is +changed.

+
source

pub fn new_network_verifier( + self, + verifier_key: &VerifierKey, + valid_current_verifier: &ValidCurrentVerifier, + general_verifier: &Verifier +) -> Self

Prepare adding new network verifier ValidCurrentVerifier into the +cold database:

+
    +
  • Add a (key, value) pair to the verifiers additions queue in +verifiers_stub. Key is VerifierKey and the value is SCALE-encoded +ValidCurrentVerifier that is set to be the new verifier for the +network.
  • +
  • Add corresponding Event::NetworkVerifierSet(_) into history_stub.
  • +
+
source

pub fn apply(self, database: &Db) -> Result<()>

Transform TrDbColdStub into TrDbCold and apply to the database +with a given name, in a single transaction.

+

The TRANSACTION tree gets cleared in the process.

+

It is unlikely that this clearing is ever doing anything, as the +intended use of the TrDbColdStub is to recover it from the database +(with clearing the TRANSACTION tree) and then immediately apply.

+

Trait Implementations§

source§

impl Debug for TrDbColdStub

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for TrDbColdStub

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Default for TrDbColdStub

source§

fn default() -> Self

Default value for TrDbColdStub. Empty.

+
source§

impl Encode for TrDbColdStub

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<TrDbColdStub> for TrDbColdStub

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/db_transactions/struct.TrDbHot.html b/rustdocs/db_handling/db_transactions/struct.TrDbHot.html new file mode 100644 index 0000000000..e7307238c1 --- /dev/null +++ b/rustdocs/db_handling/db_transactions/struct.TrDbHot.html @@ -0,0 +1,142 @@ +TrDbHot in db_handling::db_transactions - Rust
pub struct TrDbHot { /* private fields */ }
Expand description

Hot database transaction data containing [Batch] elements that will be +applied to each Tree.

+

Hot database tree names and content information could be found in +constants crate.

+

All trees are addressed when the database is generated or restored with +default values. Trees ADDRESS_BOOK, METATREE, and +SPECSTREEPREP are routinely updated by the database users.

+

TrDbHot is applied to the hot database in an atomic transaction and is +used by the active side only.

+

Note that all the checking is done as the TrDbHot is generated, +apply method does not do any checks on its own.

+

Implementations§

source§

impl TrDbHot

source

pub fn new() -> Self

Construct new empty TrDbHot.

+
source

pub fn set_address_book(self, for_address_book: Batch) -> Self

Set for_address_book field in TrDbHot with Batch that will be +applied to ADDRESS_BOOK tree.

+
source

pub fn set_metadata(self, for_metadata: Batch) -> Self

Set for_metadata field in TrDbHot with Batch that will be +applied to METATREE tree.

+
source

pub fn set_meta_history(self, for_meta_history: Batch) -> Self

Set for_meta_history field in TrDbHot with Batch that will be +applied to META_HISTORY tree.

+
source

pub fn set_network_specs_prep(self, for_network_specs_prep: Batch) -> Self

Set for_network_specs_prep field in TrDbHot with Batch that +will be applied to SPECSTREEPREP tree.

+
source

pub fn set_settings(self, for_settings: Batch) -> Self

Set for_settings field in TrDbHot with Batch that will be +applied to SETTREE tree.

+
source

pub fn apply(&self, database: &Db) -> Result<()>

Apply constructed set of batches within TrDbHot to the database +with a given name, in a single transaction.

+

Trait Implementations§

source§

impl Debug for TrDbHot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for TrDbHot

source§

fn default() -> Self

Default value for TrDbHot. Empty.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/enum.Error.html b/rustdocs/db_handling/enum.Error.html new file mode 100644 index 0000000000..96b9b5f68a --- /dev/null +++ b/rustdocs/db_handling/enum.Error.html @@ -0,0 +1,334 @@ +Error in db_handling - Rust

Enum db_handling::Error

source ·
pub enum Error {
+
Show 46 variants NoNetworksAvailable, + DbTransactionError(TransactionError), + Defaults(Error), + Other(Error), + Codec(Error), + TimeFormat(Format), + DefinitionsError(Error), + Bip39MnemonicType(ErrorKind), + DbError(Error), + DbSchemaMismatch { + expected: u32, + found: u32, + }, + Stub, + CustomVerifierIsGeneral(VerifierKey), + UnexpectedGenesisHash { + name: String, + genesis_hash: H256, + }, + HistoryEntryNotFound(u32), + TwoRootKeys { + seed_name: String, + encryption: Encryption, + }, + SeedNameNotMatching { + address_key: AddressKey, + expected_seed_name: String, + real_seed_name: String, + }, + Qr(String), + NetworkSpecsKeyForAddressNotFound { + network_specs_key: NetworkSpecsKey, + address_key: AddressKey, + }, + EmptySeed, + EmptySeedName, + SecretStringError(SecretStringError), + KeyCollisionBatch { + seed_name_existing: String, + seed_name_new: String, + cropped_path_existing: String, + cropped_path_new: String, + in_this_network: bool, + }, + KeyCollision { + seed_name: String, + }, + DerivationExists { + multisigner: MultiSigner, + address_details: Box<AddressDetails>, + network_specs_key: NetworkSpecsKey, + }, + InvalidDerivation(String), + LostPwd, + DerivationsNotFound, + Sign, + NoValidCurrentVerifier(VerifierKey), + DifferentNamesSameGenesisHash { + name1: String, + name2: String, + genesis_hash: H256, + }, + DifferentBase58Specs { + base58_1: u16, + base58_2: u16, + genesis_hash: H256, + }, + GeneralVerifierNotFound, + TypesNotFound, + NetworkSpecsNotFound(NetworkSpecsKey), + AddressNotFound(AddressKey), + MetaValuesNotFound { + name: String, + version: u32, + }, + ChecksumMismatch, + DangerStatusNotFound, + NoKnownSeeds, + SecretExposedMismatch { + multisigner: MultiSigner, + address_details: AddressDetails, + }, + WrongPassword, + MissingPasswordInfo(String), + NoSeedForKeyPair { + multisigner: MultiSigner, + }, + NoSeedFound { + multisigner: MultiSigner, + }, + NoRootKeyForSeed(String), + DataPacking(String), +
}
Expand description

DB handling error type.

+

Variants§

§

NoNetworksAvailable

§

DbTransactionError(TransactionError)

§

Defaults(Error)

§

Other(Error)

§

Codec(Error)

§

TimeFormat(Format)

§

DefinitionsError(Error)

§

Bip39MnemonicType(ErrorKind)

§

DbError(Error)

§

DbSchemaMismatch

Fields

§expected: u32
§found: u32
§

Stub

Temporary database entry in TRANSACTION tree of the Vault database +under the key STUB, used to store the update data awaiting for the +user approval.

+

Missing Stub when it is expected always indicates the database +corruption.

+
§

CustomVerifierIsGeneral(VerifierKey)

Network CurrentVerifier is +ValidCurrentVerifier::Custom(_), but the custom verifier value +coincides with the general verifier.

+

Associated data is VerifierKey corresponding to faulty entry.

+
§

UnexpectedGenesisHash

Fields

§name: String
§genesis_hash: H256

Network has no entry for +CurrentVerifier under +verifier_key in VERIFIERS tree of the database, however, the +corresponding genesis hash is encountered in a +OrderedNetworkSpecs entry under +network_specs_key in SPECSTREE tree of the database. +No network specs record can get into database without the verifier +entry, and the verifier could not be removed while network specs still +remain, so this indicates the database got corrupted.

+
§

HistoryEntryNotFound(u32)

History log Entry stored in HISTORY tree +of the Vault database under the key Order +could not be decoded.

+

Associated data is the corresponding Order.

+
§

TwoRootKeys

Fields

§seed_name: String

seed name

+
§encryption: Encryption

encryption algorithm for which two seed keys were found

+

Database has two seed addresses (i.e. with empty derivation path and no +password) for same seed name and Encryption

+

This indicates the database corruption, since the encryption method, +seed name and derivation path strictly determine the public key.

+
§

SeedNameNotMatching

Fields

§address_key: AddressKey

address key for which the export is done

+
§expected_seed_name: String

seed name, from the navigator

+
§real_seed_name: String

seed name, from the AddressDetails

+

To generate QR code with public address information export, Vault +receives both seed name and +MultiSigner +from the navigation state Navstate. +MultiSigner gets transformed into AddressKey and corresponds to +AddressDetails that are exported. +AddressDetails also contain seed_name field, that must coincide +with the one received directly from the navigator. +This error appears if the seed names are different.

+
§

Qr(String)

QR handling error.

+
§

NetworkSpecsKeyForAddressNotFound

Fields

§network_specs_key: NetworkSpecsKey
§address_key: AddressKey

NetworkSpecsKey of a network in network_id field of the +AddressDetails corresponding to +AddressKey.

+

This happens when the derivation is created in some other network(s), but +not in the given network. This way the AddressKey is in the database, +but the address in the network is not.

+
§

EmptySeed

Got empty seed phrase.

+
§

EmptySeedName

Got empty seed name.

+
§

SecretStringError(SecretStringError)

Error in SecretString.

+

SecretString consists of combined seed phrase and derivation.

+

Associated error content is +SecretStringError.

+
§

KeyCollisionBatch

Fields

§seed_name_existing: String
§seed_name_new: String
§cropped_path_existing: String
§cropped_path_new: String
§in_this_network: bool

Same public key was produced for a different seed phrase and/or +derivation path, during database transaction preparation (not yet in +the database).

+
§

KeyCollision

Fields

§seed_name: String

Same public key was produced for a different seed phrase and/or +derivation path, as already existing in the database.

+

Address is generated within a network using seed phrase and derivation +path.

+

Address is defined by public key and NetworkSpecsKey. Public key +is created from seed phrase and derivation with encryption algorithm +supported by the network.

+

If two networks are using the same encryption algorithm, generating +public key in both with same seed phrase and derivation path would +result in two identical public keys. This is normal and expected +behavior, and this is the reason why AddressDetails contain a set +of allowed networks in network_id field.

+

It is, however, possible, that when generating public key for +different seed names and/or different derivation +paths, resulting public keys accidentally coincide.

+

This is called here KeyCollision, and results in error.

+
§

DerivationExists

Fields

§multisigner: MultiSigner
§address_details: Box<AddressDetails>
§network_specs_key: NetworkSpecsKey

Derivation that user tried to create already exists.

+

Associated error content is:

+ +
§

InvalidDerivation(String)

Received derivations update payload contains an invalid derivation.

+

Associated data is the derivation that could not be used as a String.

+
§

LostPwd

User was creating the derivation with password, and thus moved into +PasswordConfirm modal, however, the password was not found when +cutting password from the path.

+
§

DerivationsNotFound

Temporary database entry in TRANSACTION tree of the Vault database +under the key DRV, used to store the derivation import data.

+

Missing Derivations when it is expected always indicates the database +corruption.

+
§

Sign

Temporary database entry in TRANSACTION tree of the Vault database +under the key SIGN, used to store the signable transaction data +awaiting for the user approval.

+

Missing Sign when it is expected always indicates the database +corruption.

+
§

NoValidCurrentVerifier(VerifierKey)

§

DifferentNamesSameGenesisHash

Fields

§name1: String
§name2: String
§genesis_hash: H256

While searching for all networks with same genesis hash, found that +there are networks with same genesis hash, but different names.

+
§

DifferentBase58Specs

Fields

§base58_1: u16
§base58_2: u16
§genesis_hash: H256

Network specs entries have same genesis hash, but different base58 prefix

+
§

GeneralVerifierNotFound

General verifier Verifier information +stored in SETTREE tree of the database under key GENERALVERIFIER.

+

Missing general verifier always indicates the database corruption.

+
§

TypesNotFound

DangerRecord information +stored in SETTREE tree of the database under key DANGER.

+

Missing DangerRecord always indicates the database corruption.

+
§

NetworkSpecsNotFound(NetworkSpecsKey)

OrderedNetworkSpecs for a network +in SPECSTREE tree of the Vault database, searched by +NetworkSpecsKey.

+

Associated data is the NetworkSpecsKey used for the search.

+
§

AddressNotFound(AddressKey)

AddressDetails for AddressKey in +ADDRTREE tree of the Vault database.

+

Associated data is the AddressKey used for search.

+
§

MetaValuesNotFound

Fields

§name: String

network name

+
§version: u32

network version

+

Network metadata in METATREE tree of the Vault database, for network +name and version combination.

+
§

ChecksumMismatch

Database checksum does not match the expected value.

+
§

DangerStatusNotFound

DangerRecord information +stored in SETTREE tree of the database under key DANGER.

+

Missing DangerRecord always indicates the database corruption.

+
§

NoKnownSeeds

§

SecretExposedMismatch

Fields

§multisigner: MultiSigner
§address_details: AddressDetails

Found secret_exposed flag mismatch in the database: address is not +marked as potentially exposed when it must have been.

+
§

WrongPassword

User has entered a wrong password for a passworded address.

+
§

MissingPasswordInfo(String)

§

NoSeedForKeyPair

Fields

§multisigner: MultiSigner
§

NoSeedFound

Fields

§multisigner: MultiSigner
§

NoRootKeyForSeed(String)

§

DataPacking(String)

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<ErrorKind> for Error

source§

fn from(source: ErrorKind) -> Self

Converts to this type from the input type.
source§

impl From<Format> for Error

source§

fn from(source: Format) -> Self

Converts to this type from the input type.
source§

impl From<TransactionError<Error>> for Error

source§

fn from(source: TransactionError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/db_handling/error/enum.Error.html b/rustdocs/db_handling/error/enum.Error.html new file mode 100644 index 0000000000..f420aacb0e --- /dev/null +++ b/rustdocs/db_handling/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../db_handling/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/db_handling/error/type.Result.html b/rustdocs/db_handling/error/type.Result.html new file mode 100644 index 0000000000..147b2cf989 --- /dev/null +++ b/rustdocs/db_handling/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../db_handling/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/db_handling/fn.default_cold_release.html b/rustdocs/db_handling/fn.default_cold_release.html new file mode 100644 index 0000000000..040e01f02f --- /dev/null +++ b/rustdocs/db_handling/fn.default_cold_release.html @@ -0,0 +1,20 @@ +default_cold_release in db_handling - Rust
pub fn default_cold_release(database: Option<&Db>) -> Result<()>
Expand description

Generate or restore “cold” database with default values, for release +build.

+

Resulting database should be copied verbatim into Vault files during the +build.

+

The location of the generated database is either optional user-provided +path, or default COLD_DB_NAME_RELEASE folder.

+

The cold release database, as generated, contains:

+
    +
  • network specs for default networks (Polkadot, Kusama, Westend)
  • +
  • verifier information for default networks, with verifiers set to the +general one
  • +
  • two latest metadata versions for default networks
  • +
  • default types information and clean danger status
  • +
+

The trees ADDRTREE, HISTORY, and TRANSACTION are empty.

+

Note that resulting database history is not initialized and general +verifier is not set.

+

This operation is performed not on Vault device, and is governed by +the active side.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/fn.default_hot.html b/rustdocs/db_handling/fn.default_hot.html new file mode 100644 index 0000000000..f55918c372 --- /dev/null +++ b/rustdocs/db_handling/fn.default_hot.html @@ -0,0 +1,12 @@ +default_hot in db_handling - Rust

Function db_handling::default_hot

source ·
pub fn default_hot(database: Option<&Db>) -> Result<()>
Expand description

Generate or restore “hot” database with default values.

+

The location of the generated database is default HOT_DB_NAME folder.

+

The hot database, as generated, contains:

+
    +
  • address book entries for default networks (Polkadot, Kusama, Westend)
  • +
  • network specs for default networks
  • +
  • default types information
  • +
  • no metadata entries
  • +
  • no metadata block history entries
  • +
+

All metadata-related entries get in the hot database only through RPC calls.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.assert_db_version.html b/rustdocs/db_handling/helpers/fn.assert_db_version.html new file mode 100644 index 0000000000..244992f320 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.assert_db_version.html @@ -0,0 +1,3 @@ +assert_db_version in db_handling::helpers - Rust
pub fn assert_db_version(database: &Db) -> Result<()>
Expand description

Check database schema version. +Prevents app stash when user upgrades the app without re-install.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.genesis_hash_in_specs.html b/rustdocs/db_handling/helpers/fn.genesis_hash_in_specs.html new file mode 100644 index 0000000000..7c19abcef7 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.genesis_hash_in_specs.html @@ -0,0 +1,13 @@ +genesis_hash_in_specs in db_handling::helpers - Rust
pub fn genesis_hash_in_specs(
+    database: &Db,
+    genesis_hash: H256
+) -> Result<Option<SpecsInvariants>>
Expand description

Search for network genesis hash in OrderedNetworkSpecs entries in SPECSTREE +of the Vault database.

+

Genesis hash is calculated from network VerifierKey input.

+

If there are more than one network corresponding to the same genesis hash, +outputs network specs key for the network with the lowest order.

+

If there are several entries with same genesis hash, all of them must have +identical base58 prefix and network name. Network name is, and base58 prefix +could be a part of the network metadata, and therefore must not depend on +encryption used.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_address_details.html b/rustdocs/db_handling/helpers/fn.get_address_details.html new file mode 100644 index 0000000000..4ef0d48c51 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_address_details.html @@ -0,0 +1,7 @@ +get_address_details in db_handling::helpers - Rust
pub fn get_address_details(
+    database: &Db,
+    address_key: &AddressKey
+) -> Result<AddressDetails>
Expand description

Get AddressDetails from the Vault database, using +AddressKey.

+

Address is expected to exist, not finding it results in an error.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_all_networks.html b/rustdocs/db_handling/helpers/fn.get_all_networks.html new file mode 100644 index 0000000000..21fc3723a9 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_all_networks.html @@ -0,0 +1,4 @@ +get_all_networks in db_handling::helpers - Rust
pub fn get_all_networks(database: &Db) -> Result<Vec<OrderedNetworkSpecs>>
Expand description

Get OrderedNetworkSpecs for all networks from the cold database.

+

Function is used both on active and Vault side, but only for the cold +database.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_danger_status.html b/rustdocs/db_handling/helpers/fn.get_danger_status.html new file mode 100644 index 0000000000..c36011bb90 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_danger_status.html @@ -0,0 +1,4 @@ +get_danger_status in db_handling::helpers - Rust
pub fn get_danger_status(database: &Db) -> Result<bool>
Expand description

Get the danger status from the Vault database.

+

Currently, the only flag contributing to the danger status is whether the +device was online. This may change eventually.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_general_verifier.html b/rustdocs/db_handling/helpers/fn.get_general_verifier.html new file mode 100644 index 0000000000..57dee20de3 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_general_verifier.html @@ -0,0 +1,4 @@ +get_general_verifier in db_handling::helpers - Rust
pub fn get_general_verifier(database: &Db) -> Result<Verifier>
Expand description

Get general verifier Verifier from the Vault database.

+

Vault works only with an initiated database, i.e. the one with general +verifier set up. Failure to find general verifier is always an error.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_meta_values_by_name_version.html b/rustdocs/db_handling/helpers/fn.get_meta_values_by_name_version.html new file mode 100644 index 0000000000..686b41ffe9 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_meta_values_by_name_version.html @@ -0,0 +1,9 @@ +get_meta_values_by_name_version in db_handling::helpers - Rust
pub fn get_meta_values_by_name_version(
+    database: &Db,
+    network_name: &str,
+    network_version: u32
+) -> Result<MetaValues>
Expand description

Get MetaValues, corresponding to given network name and version, from +the database.

+

Entry is expected to be in the database, error is produced if it is not +found.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_network_specs.html b/rustdocs/db_handling/helpers/fn.get_network_specs.html new file mode 100644 index 0000000000..81ee6547e7 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_network_specs.html @@ -0,0 +1,7 @@ +get_network_specs in db_handling::helpers - Rust
pub fn get_network_specs(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<OrderedNetworkSpecs>
Expand description

Get network specs OrderedNetworkSpecs from the Vault database.

+

Network specs here are expected to be found, not finding them results in an +error.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_types.html b/rustdocs/db_handling/helpers/fn.get_types.html new file mode 100644 index 0000000000..17dcb4e47f --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_types.html @@ -0,0 +1,10 @@ +get_types in db_handling::helpers - Rust

Function db_handling::helpers::get_types

source ·
pub fn get_types(database: &Db) -> Result<Vec<TypeEntry>>
Expand description

Get types information as Vec<TypeEntry> from the database.

+

Types data is expected to be found, for example, in:

+
    +
  • hot database, from which the types data could not be removed using +standard operations
  • +
  • cold database, when transactions made using RuntimeMetadata V12 or V13 are +being decoded
  • +
+

Not finding types data results in an error.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.get_valid_current_verifier.html b/rustdocs/db_handling/helpers/fn.get_valid_current_verifier.html new file mode 100644 index 0000000000..4f357ad1be --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.get_valid_current_verifier.html @@ -0,0 +1,8 @@ +get_valid_current_verifier in db_handling::helpers - Rust
pub fn get_valid_current_verifier(
+    database: &Db,
+    verifier_key: &VerifierKey
+) -> Result<ValidCurrentVerifier>
Expand description

Get ValidCurrentVerifier from the Vault database for a network, using +VerifierKey.

+

Entry here is expected to be in the database, failure to find it results in +an error.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.make_batch_clear_tree.html b/rustdocs/db_handling/helpers/fn.make_batch_clear_tree.html new file mode 100644 index 0000000000..7a7797cbc3 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.make_batch_clear_tree.html @@ -0,0 +1,2 @@ +make_batch_clear_tree in db_handling::helpers - Rust
pub fn make_batch_clear_tree(database: &Db, tree_name: &[u8]) -> Result<Batch>
Expand description

Assemble a [Batch] that removes all elements from a tree.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.open_tree.html b/rustdocs/db_handling/helpers/fn.open_tree.html new file mode 100644 index 0000000000..fdb37db8a1 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.open_tree.html @@ -0,0 +1,4 @@ +open_tree in db_handling::helpers - Rust

Function db_handling::helpers::open_tree

source ·
pub fn open_tree(database: &Db, tree_name: &[u8]) -> Result<Tree>
Expand description

Open a tree in the database.

+

Wrapper for open_tree() method for database [Db] from [sled]. +Input is &[u8] tree identifier.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.prep_types.html b/rustdocs/db_handling/helpers/fn.prep_types.html new file mode 100644 index 0000000000..5aa8d5e9aa --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.prep_types.html @@ -0,0 +1,7 @@ +prep_types in db_handling::helpers - Rust
pub fn prep_types(database: &Db) -> Result<ContentLoadTypes>
Expand description

Get types information as ContentLoadTypes from the database.

+

Function prepares types information in qr payload format.

+

Is used on the active side when preparing load_types qr payload and in +Vault when preparing SufficientCrypto export qr code for load_types +payload.

+

Not finding types data results in an error.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.remove_metadata.html b/rustdocs/db_handling/helpers/fn.remove_metadata.html new file mode 100644 index 0000000000..f288e7fb8e --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.remove_metadata.html @@ -0,0 +1,14 @@ +remove_metadata in db_handling::helpers - Rust
pub fn remove_metadata(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey,
+    network_version: u32
+) -> Result<()>
Expand description

Remove the network metadata entry from the database.

+

Function inputs NetworkSpecsKey of the network and u32 version of the +network metadata, and proceeds to remove a single metadata entry +corresponding to this version.

+

Metadata in the Vault database is determined by the network name and +network version, and has no information about the +Encryption algorithm supported by the +network. Therefore if the network supports more than one encryption +algorithm, removing metadata for one will affect all encryptions.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.remove_network.html b/rustdocs/db_handling/helpers/fn.remove_network.html new file mode 100644 index 0000000000..e5d5f78c6e --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.remove_network.html @@ -0,0 +1,21 @@ +remove_network in db_handling::helpers - Rust
pub fn remove_network(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<()>
Expand description

Remove the network from the database.

+

Function inputs NetworkSpecsKey of the network, gets network genesis +hash and proceeds to act on all networks with same genesis hash.

+

Removing network is mostly an emergency tool and is not expected to be used +really often.

+

Removing a network means:

+
    +
  • Remove from SPECSTREE all OrderedNetworkSpecs that have genesis hash +associated with given NetworkSpecsKey
  • +
  • Remove from METATREE all metadata entries corresponding to the network +name, as found in OrderedNetworkSpecs
  • +
  • Remove from ADDRTREE all addresses in the networks being removed
  • +
  • Modify Verifier data if necessary.
  • +
+

Note that if the network supports multiple encryption algorithms, the +removal of network with one of the encryptions will cause the networks +with other encryptions be removed as well.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.remove_types_info.html b/rustdocs/db_handling/helpers/fn.remove_types_info.html new file mode 100644 index 0000000000..2d5feb7026 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.remove_types_info.html @@ -0,0 +1,13 @@ +remove_types_info in db_handling::helpers - Rust
pub fn remove_types_info(database: &Db) -> Result<()>
Expand description

User-initiated removal of the types information from the Vault database.

+

Types information is not necessary to process transactions in networks with +metadata having RuntimeVersionV14, as the types information after V14 +is a part of the metadata itself.

+

Types information is installed in Vault by default and could be removed by +user manually, through this function.

+

Types information is verified by the general verifier. When the general +verifier gets changed, the types information is also removed from the +Vault database through so-called GeneralHold processing, to avoid +confusion regarding what data was verified by whom. Note that this situation +in not related to the remove_types_info function and is handled +elsewhere.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.transfer_metadata_to_cold.html b/rustdocs/db_handling/helpers/fn.transfer_metadata_to_cold.html new file mode 100644 index 0000000000..3067d0fecd --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.transfer_metadata_to_cold.html @@ -0,0 +1,10 @@ +transfer_metadata_to_cold in db_handling::helpers - Rust
pub fn transfer_metadata_to_cold(
+    database_hot: &Db,
+    database_cold: &Db
+) -> Result<()>
Expand description

Transfer metadata from the hot database into the cold one.

+

Function scans through METATREE tree of the hot database and transfers +into METATREE tree of the cold database the metadata entries for the +networks that already have the network specs OrderedNetworkSpecs entries in +SPECSTREE of the cold database.

+

Applicable only on the active side.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.try_get_address_details.html b/rustdocs/db_handling/helpers/fn.try_get_address_details.html new file mode 100644 index 0000000000..bbf777c34d --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.try_get_address_details.html @@ -0,0 +1,7 @@ +try_get_address_details in db_handling::helpers - Rust
pub fn try_get_address_details(
+    database: &Db,
+    address_key: &AddressKey
+) -> Result<Option<AddressDetails>>
Expand description

Try to get AddressDetails from the Vault database, using +AddressKey.

+

If no entry with provided AddressKey is found, the result is Ok(None).

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.try_get_meta_values_by_name_version.html b/rustdocs/db_handling/helpers/fn.try_get_meta_values_by_name_version.html new file mode 100644 index 0000000000..c616cd389f --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.try_get_meta_values_by_name_version.html @@ -0,0 +1,8 @@ +try_get_meta_values_by_name_version in db_handling::helpers - Rust
pub fn try_get_meta_values_by_name_version(
+    database: &Db,
+    network_name: &str,
+    network_version: u32
+) -> Result<Option<MetaValues>>
Expand description

Try to get MetaValues, corresponding to given network name and version +from the database.

+

If no entry is found, the result is Ok(None).

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.try_get_network_specs.html b/rustdocs/db_handling/helpers/fn.try_get_network_specs.html new file mode 100644 index 0000000000..1d225fc40d --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.try_get_network_specs.html @@ -0,0 +1,7 @@ +try_get_network_specs in db_handling::helpers - Rust
pub fn try_get_network_specs(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<Option<OrderedNetworkSpecs>>
Expand description

Try to get network specs OrderedNetworkSpecs from the Vault database.

+

If the NetworkSpecsKey and associated OrderedNetworkSpecs are not found in +the SPECSTREE, the result is Ok(None).

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.try_get_types.html b/rustdocs/db_handling/helpers/fn.try_get_types.html new file mode 100644 index 0000000000..cfea10fa42 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.try_get_types.html @@ -0,0 +1,3 @@ +try_get_types in db_handling::helpers - Rust
pub fn try_get_types(database: &Db) -> Result<Option<Vec<TypeEntry>>>
Expand description

Try to get types information from the database.

+

If no types information is found, result is Ok(None).

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.try_get_valid_current_verifier.html b/rustdocs/db_handling/helpers/fn.try_get_valid_current_verifier.html new file mode 100644 index 0000000000..d865bc0914 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.try_get_valid_current_verifier.html @@ -0,0 +1,11 @@ +try_get_valid_current_verifier in db_handling::helpers - Rust
pub fn try_get_valid_current_verifier(
+    database: &Db,
+    verifier_key: &VerifierKey
+) -> Result<Option<ValidCurrentVerifier>>
Expand description

Try to get ValidCurrentVerifier from the Vault database for a network, +using VerifierKey.

+

If the network is not known to the database, i.e. there is no verifier data +and network genesis hash is not encountered elsewhere in the database, +result is Ok(None).

+

Note that CurrentVerifier::Dead or damaged verifier data result in +errors.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/fn.validate_mnemonic.html b/rustdocs/db_handling/helpers/fn.validate_mnemonic.html new file mode 100644 index 0000000000..769c59f9a5 --- /dev/null +++ b/rustdocs/db_handling/helpers/fn.validate_mnemonic.html @@ -0,0 +1 @@ +validate_mnemonic in db_handling::helpers - Rust
pub fn validate_mnemonic(mnemonic: &str) -> bool
\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/index.html b/rustdocs/db_handling/helpers/index.html new file mode 100644 index 0000000000..914f68df1f --- /dev/null +++ b/rustdocs/db_handling/helpers/index.html @@ -0,0 +1,12 @@ +db_handling::helpers - Rust

Module db_handling::helpers

source ·
Expand description

Common helper functions for database operations

+

Structs

  • Specs invariants that are expected to stay unchanged for the network over +time and can not be different for same genesis hash and different encryption +algorithms.

Functions

\ No newline at end of file diff --git a/rustdocs/db_handling/helpers/sidebar-items.js b/rustdocs/db_handling/helpers/sidebar-items.js new file mode 100644 index 0000000000..7ada2f93fe --- /dev/null +++ b/rustdocs/db_handling/helpers/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["assert_db_version","genesis_hash_in_specs","get_address_details","get_all_networks","get_danger_status","get_general_verifier","get_meta_values_by_name_version","get_network_specs","get_types","get_valid_current_verifier","make_batch_clear_tree","open_tree","prep_types","remove_metadata","remove_network","remove_types_info","transfer_metadata_to_cold","try_get_address_details","try_get_meta_values_by_name_version","try_get_network_specs","try_get_types","try_get_valid_current_verifier","validate_mnemonic"],"struct":["SpecsInvariants"]}; \ No newline at end of file diff --git a/rustdocs/db_handling/helpers/struct.SpecsInvariants.html b/rustdocs/db_handling/helpers/struct.SpecsInvariants.html new file mode 100644 index 0000000000..6f29887fc9 --- /dev/null +++ b/rustdocs/db_handling/helpers/struct.SpecsInvariants.html @@ -0,0 +1,125 @@ +SpecsInvariants in db_handling::helpers - Rust
pub struct SpecsInvariants {
+    pub base58prefix: u16,
+    pub first_network_specs_key: NetworkSpecsKey,
+    pub genesis_hash: H256,
+    pub name: String,
+}
Expand description

Specs invariants that are expected to stay unchanged for the network over +time and can not be different for same genesis hash and different encryption +algorithms.

+

Fields§

§base58prefix: u16§first_network_specs_key: NetworkSpecsKey

network with lowest order, for correct navigation when updating the +network metadata

+
§genesis_hash: H256§name: String

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/enum.DerivationCheck.html b/rustdocs/db_handling/identities/enum.DerivationCheck.html new file mode 100644 index 0000000000..ca848c3397 --- /dev/null +++ b/rustdocs/db_handling/identities/enum.DerivationCheck.html @@ -0,0 +1,128 @@ +DerivationCheck in db_handling::identities - Rust
pub enum DerivationCheck {
+    BadFormat,
+    Password,
+    NoPassword(Option<(MultiSigner, AddressDetails)>),
+}
Expand description

Proposed derivation status.

+

Variants§

§

BadFormat

Derivation has bad format, UI disables proceeding with address +generation.

+
§

Password

Derivation has password (///<password> part).

+

Dynamic check in the database for already existing address is disabled.

+
§

NoPassword(Option<(MultiSigner, AddressDetails)>)

Derivation has no password.

+

Dynamic check in the database for already existing address is enabled.

+

Inner content reflects if the already existing address is found and its +details.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/enum.ExportAddrs.html b/rustdocs/db_handling/identities/enum.ExportAddrs.html new file mode 100644 index 0000000000..765449e427 --- /dev/null +++ b/rustdocs/db_handling/identities/enum.ExportAddrs.html @@ -0,0 +1,154 @@ +ExportAddrs in db_handling::identities - Rust
pub enum ExportAddrs {
+    V1(ExportAddrsV1),
+    V2(ExportAddrsV2),
+}

Variants§

Trait Implementations§

source§

impl Clone for ExportAddrs

source§

fn clone(&self) -> ExportAddrs

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ExportAddrs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for ExportAddrs

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for ExportAddrs

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<ExportAddrs> for ExportAddrs

source§

fn eq(&self, other: &ExportAddrs) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<ExportAddrs> for ExportAddrs

source§

impl Eq for ExportAddrs

source§

impl StructuralEq for ExportAddrs

source§

impl StructuralPartialEq for ExportAddrs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/enum.SignaturesBulk.html b/rustdocs/db_handling/identities/enum.SignaturesBulk.html new file mode 100644 index 0000000000..9825d278c2 --- /dev/null +++ b/rustdocs/db_handling/identities/enum.SignaturesBulk.html @@ -0,0 +1,148 @@ +SignaturesBulk in db_handling::identities - Rust
pub enum SignaturesBulk {
+    V1(SignaturesBulkV1),
+}

Variants§

Trait Implementations§

source§

impl Clone for SignaturesBulk

source§

fn clone(&self) -> SignaturesBulk

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for SignaturesBulk

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for SignaturesBulk

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl From<SignaturesBulkV1> for SignaturesBulk

source§

fn from(s: SignaturesBulkV1) -> Self

Converts to this type from the input type.
source§

impl EncodeLike<SignaturesBulk> for SignaturesBulk

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/enum.TransactionBulk.html b/rustdocs/db_handling/identities/enum.TransactionBulk.html new file mode 100644 index 0000000000..d089d6096d --- /dev/null +++ b/rustdocs/db_handling/identities/enum.TransactionBulk.html @@ -0,0 +1,148 @@ +TransactionBulk in db_handling::identities - Rust
pub enum TransactionBulk {
+    V1(TransactionBulkV1),
+}

Variants§

Trait Implementations§

source§

impl Clone for TransactionBulk

source§

fn clone(&self) -> TransactionBulk

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for TransactionBulk

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for TransactionBulk

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<TransactionBulk> for TransactionBulk

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/enum.VaultFeatures.html b/rustdocs/db_handling/identities/enum.VaultFeatures.html new file mode 100644 index 0000000000..38185653aa --- /dev/null +++ b/rustdocs/db_handling/identities/enum.VaultFeatures.html @@ -0,0 +1,154 @@ +VaultFeatures in db_handling::identities - Rust
pub enum VaultFeatures {
+    BulkOperations,
+    DynamicDerivations,
+}

Variants§

§

BulkOperations

§

DynamicDerivations

Trait Implementations§

source§

impl Clone for VaultFeatures

source§

fn clone(&self) -> VaultFeatures

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for VaultFeatures

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for VaultFeatures

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for VaultFeatures

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<VaultFeatures> for VaultFeatures

source§

fn eq(&self, other: &VaultFeatures) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<VaultFeatures> for VaultFeatures

source§

impl Eq for VaultFeatures

source§

impl StructuralEq for VaultFeatures

source§

impl StructuralPartialEq for VaultFeatures

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.check_derivation_set.html b/rustdocs/db_handling/identities/fn.check_derivation_set.html new file mode 100644 index 0000000000..d148b5278f --- /dev/null +++ b/rustdocs/db_handling/identities/fn.check_derivation_set.html @@ -0,0 +1,13 @@ +check_derivation_set in db_handling::identities - Rust
pub fn check_derivation_set(derivations: &[String]) -> Result<()>
Expand description

Check derivations before offering user to import them.

+

Vault allows bulk import only for valid derivations, with or without +password. For passworded derivations no password is ever confirmed, as the +user presumably has the derivations already recorded somewhere.

+

This function is used in transaction_parsing::derivations to check the +incoming derivations once they are received in derivations qr code +payload.

+

Note that once the derivations are checked, they are moved around as +“checked derivations” and not checked anymore until they are used in +import_derivations. Only checked derivations are written into the +database temporary storage in TRANSACTION tree, same data is recovered as +ensured by the checksum matching.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.create_increment_set.html b/rustdocs/db_handling/identities/fn.create_increment_set.html new file mode 100644 index 0000000000..76ff3cf637 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.create_increment_set.html @@ -0,0 +1,55 @@ +create_increment_set in db_handling::identities - Rust
pub fn create_increment_set(
+    database: &Db,
+    increment: u32,
+    multisigner: &MultiSigner,
+    network_specs_key: &NetworkSpecsKey,
+    seed_phrase: &str
+) -> Result<()>
Expand description

Add a set of new derived addresses: N+1, N+2, etc into Vault database.

+

The number of the added addresses is set by increment input.

+

Input [MultiSigner] and NetworkSpecsKey determine the address, and the +associated AddressDetails are found in the database. The derivations are +based on the path from the AddressDetails.

+

If the database has addressed in given network with path that could be +interpreted as <path>//<number>, the first derivation of the increment set +is <path>//<number>+1. If no such addresses are existing in the database, +the first derivation of the increment set is <path>//0.

+

Further derivations of the increment set have number part increased by 1 +until all requested derivations are generated.

+

Note: this is intended only for addresses not protected by the password +(i.e. having derivation path without ///<password> part). If the +increment set is created on a passworded address, only public derivation +path part will be used for increment set generation.

+

This function inputs secret seed phrase as &str. It is passed as &str +into create_address and used there.

+

Example

+

User creates increment set of 3 on derivation //user. Resulting +derivations are:

+
    +
  • //user
  • +
  • //user//0
  • +
  • //user//1
  • +
  • //user//2
  • +
+

User creates increment set of 2 on //user again, resulting derivations +are:

+
    +
  • //user
  • +
  • //user//0
  • +
  • //user//1
  • +
  • //user//2
  • +
  • //user//3
  • +
  • //user//4
  • +
+

If the increment set of 2 is created on //user//0, resulting derivations +would be:

+
    +
  • //user
  • +
  • //user//0
  • +
  • //user//0//0
  • +
  • //user//0//1
  • +
  • //user//1
  • +
  • //user//2
  • +
  • //user//3
  • +
  • //user//4
  • +
+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.create_key_set.html b/rustdocs/db_handling/identities/fn.create_key_set.html new file mode 100644 index 0000000000..8f8bde3bee --- /dev/null +++ b/rustdocs/db_handling/identities/fn.create_key_set.html @@ -0,0 +1,10 @@ +create_key_set in db_handling::identities - Rust
pub fn create_key_set(
+    database: &Db,
+    seed_name: &str,
+    seed_phrase: &str,
+    derive_for_networks: Vec<String>
+) -> Result<()>
Expand description

Creates seed into Vault: add default addresses for derive_for_networks in the Vault

+

Each network has a default derivation path, recorded in NetworkSpecs +field path_id, normally path_id is //<network_name>.

+

derive_for_networks is a list of network ids to derive addresses for.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.cut_path.html b/rustdocs/db_handling/identities/fn.cut_path.html new file mode 100644 index 0000000000..4052439ff0 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.cut_path.html @@ -0,0 +1,9 @@ +cut_path in db_handling::identities - Rust
pub fn cut_path(path: &str) -> Result<(String, String)>
Expand description

Separate derivation path with password into non-secret part and password.

+

Function is expected to deal only with derivations having a password +(i.e. with ///<password> part of the derivation path). Password-free +derivations do not get to the point in navigator where this function is +called. Calling this function on password-free derivation is an error.

+

Function receives derivation path with secret password part, and outputs +hard and soft derivations part and secret password part of the derivation +path separately.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.derivation_check.html b/rustdocs/db_handling/identities/fn.derivation_check.html new file mode 100644 index 0000000000..9740e2ddb1 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.derivation_check.html @@ -0,0 +1,24 @@ +derivation_check in db_handling::identities - Rust
pub fn derivation_check(
+    database: &Db,
+    seed_name: &str,
+    path: &str,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<DerivationCheck>
Expand description

Preliminary checks if the user-proposed derivation could be used to create +the address.

+

This function does not use secret phrase, and only searches the +AddressDetails from the database for already existing addresses with +same derivation path, in case there is no password in the proposed +derivation.

+

If the proposed derivation is passworded, no checking could be done without +using the seed phrase, and UI allows to proceed to try creating new address. +If address already exists, an error would appear on the next stage.

+

No checking for collisions is done here (i.e. no checking if the same +AddressKey will be produced for <secret phrase 1> + <derivation path 1> +as for already known <secret phrase 2> + <derivation path 2>), because seed +phrase is not known. If collision occurs, an error would appear on the next +stage.

+

Note that the only errors in this function could appear from database +malfunction when the database is being searched for the exact match, in case +of password-free valid derivation. Bad format of the derivation is not +an error, UI just does not allow to proceed.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.derive_single_key.html b/rustdocs/db_handling/identities/fn.derive_single_key.html new file mode 100644 index 0000000000..1885f137fb --- /dev/null +++ b/rustdocs/db_handling/identities/fn.derive_single_key.html @@ -0,0 +1,8 @@ +derive_single_key in db_handling::identities - Rust
pub fn derive_single_key(
+    database: &Db,
+    seeds: &HashMap<String, String>,
+    derivation_path: &str,
+    root_multisigner: &MultiSigner,
+    network_key: NetworkSpecsKey
+) -> Result<(MultiSigner, AddressDetails)>
Expand description

Helper function to get public key from seed phrase and derivation path

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.dynamic_derivations_response.html b/rustdocs/db_handling/identities/fn.dynamic_derivations_response.html new file mode 100644 index 0000000000..93a739953e --- /dev/null +++ b/rustdocs/db_handling/identities/fn.dynamic_derivations_response.html @@ -0,0 +1,5 @@ +dynamic_derivations_response in db_handling::identities - Rust
pub fn dynamic_derivations_response(
+    request: &DynamicDerivationsAddressRequestV1,
+    seed_phrase: &str
+) -> Result<DynamicDerivationsAddressResponse>
Expand description

Prepare DynamicDerivationsAddressResponse for the given request

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.export_key_set_addrs.html b/rustdocs/db_handling/identities/fn.export_key_set_addrs.html new file mode 100644 index 0000000000..569a8ab9f7 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.export_key_set_addrs.html @@ -0,0 +1,6 @@ +export_key_set_addrs in db_handling::identities - Rust
pub fn export_key_set_addrs(
+    database: &Db,
+    seed_name: &str,
+    exported_set: ExportedSet
+) -> Result<ExportAddrs>
Expand description

Export info about keys and their addresses known to Vault

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.export_secret_key.html b/rustdocs/db_handling/identities/fn.export_secret_key.html new file mode 100644 index 0000000000..d723069a4b --- /dev/null +++ b/rustdocs/db_handling/identities/fn.export_secret_key.html @@ -0,0 +1,18 @@ +export_secret_key in db_handling::identities - Rust
pub fn export_secret_key(
+    database: &Db,
+    public_key: &str,
+    expected_seed_name: &str,
+    network_specs_key_hex: &str,
+    seed_phrase: &str,
+    key_password: Option<String>
+) -> Result<MKeyDetails>
Expand description

Prepare secret key export screen struct MKeyDetails.

+

For QR code the secret key information is put in format +secret:0x{}:{network genesis hash} transformed into bytes, to be +compatible with polkadot-js interface.

+

There is no direct mentioning of Encryption in the QR code. It is +that user knows the key in which network and with what encryption they are +exporting.

+

The QR code here contains sensitive information, and is made with special +coloration, so that the difference with safe QR codes is immediately visible +on screen.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.generate_random_phrase.html b/rustdocs/db_handling/identities/fn.generate_random_phrase.html new file mode 100644 index 0000000000..1527c63f99 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.generate_random_phrase.html @@ -0,0 +1,4 @@ +generate_random_phrase in db_handling::identities - Rust
pub fn generate_random_phrase(words_number: u32) -> Result<String>
Expand description

Generate random phrase with given number of words.

+

The output is a secret seed phrase.

+

Its zeroization and safe handling are delegated to hardware.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.generate_test_identities.html b/rustdocs/db_handling/identities/fn.generate_test_identities.html new file mode 100644 index 0000000000..1f55230fc0 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.generate_test_identities.html @@ -0,0 +1,9 @@ +generate_test_identities in db_handling::identities - Rust
pub fn generate_test_identities(database: &Db) -> Result<()>
Expand description

Generate test Alice addresses in test cold database.

+

Function wipes ADDRTREE and adds:

+
    +
  • seed key, i.e. seed addresses for all 3 default networks (Polkadot, +Kusama, Westend)
  • +
  • addresses with default derivation path in each default network
  • +
  • address with //Alice derivation path in Westend network
  • +
+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.get_addresses_by_seed_name.html b/rustdocs/db_handling/identities/fn.get_addresses_by_seed_name.html new file mode 100644 index 0000000000..cfe7eef5df --- /dev/null +++ b/rustdocs/db_handling/identities/fn.get_addresses_by_seed_name.html @@ -0,0 +1,5 @@ +get_addresses_by_seed_name in db_handling::identities - Rust
pub fn get_addresses_by_seed_name(
+    database: &Db,
+    seed_name: &str
+) -> Result<Vec<(MultiSigner, AddressDetails)>>
Expand description

Get all existing addresses for a given seed name from the database.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.get_all_addresses.html b/rustdocs/db_handling/identities/fn.get_all_addresses.html new file mode 100644 index 0000000000..7149e88567 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.get_all_addresses.html @@ -0,0 +1,4 @@ +get_all_addresses in db_handling::identities - Rust
pub fn get_all_addresses(
+    database: &Db
+) -> Result<Vec<(MultiSigner, AddressDetails)>>
Expand description

Get all existing addresses from the database.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.get_multisigner_by_address.html b/rustdocs/db_handling/identities/fn.get_multisigner_by_address.html new file mode 100644 index 0000000000..f9354d939e --- /dev/null +++ b/rustdocs/db_handling/identities/fn.get_multisigner_by_address.html @@ -0,0 +1,4 @@ +get_multisigner_by_address in db_handling::identities - Rust
pub fn get_multisigner_by_address(
+    database: &Db,
+    address: &AddressKey
+) -> Result<Option<MultiSigner>>
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.import_all_addrs.html b/rustdocs/db_handling/identities/fn.import_all_addrs.html new file mode 100644 index 0000000000..02dc3ff2d7 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.import_all_addrs.html @@ -0,0 +1,4 @@ +import_all_addrs in db_handling::identities - Rust
pub fn import_all_addrs(
+    database: &Db,
+    seed_derived_keys: Vec<SeedKeysPreview>
+) -> Result<()>
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.inject_derivations_has_pwd.html b/rustdocs/db_handling/identities/fn.inject_derivations_has_pwd.html new file mode 100644 index 0000000000..de44ada84a --- /dev/null +++ b/rustdocs/db_handling/identities/fn.inject_derivations_has_pwd.html @@ -0,0 +1,4 @@ +inject_derivations_has_pwd in db_handling::identities - Rust
pub fn inject_derivations_has_pwd(
+    seed_derived_keys: Vec<SeedKeysPreview>,
+    seeds: HashMap<String, String>
+) -> Result<Vec<SeedKeysPreview>>
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.is_passworded.html b/rustdocs/db_handling/identities/fn.is_passworded.html new file mode 100644 index 0000000000..f1a5fa7668 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.is_passworded.html @@ -0,0 +1,4 @@ +is_passworded in db_handling::identities - Rust
pub fn is_passworded(path: &str) -> Result<bool>
Expand description

Check derivation format and determine if it has a password.

+

Invalid derivation produces an error. Valid derivation is checked for +password with regex.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.process_dynamic_derivations_v1.html b/rustdocs/db_handling/identities/fn.process_dynamic_derivations_v1.html new file mode 100644 index 0000000000..45c148b7d4 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.process_dynamic_derivations_v1.html @@ -0,0 +1,5 @@ +process_dynamic_derivations_v1 in db_handling::identities - Rust
pub fn process_dynamic_derivations_v1(
+    database: &Db,
+    seeds: HashMap<String, String>,
+    request: DynamicDerivationsAddressRequestV1
+) -> Result<DDPreview>
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.remove_key.html b/rustdocs/db_handling/identities/fn.remove_key.html new file mode 100644 index 0000000000..5784831541 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.remove_key.html @@ -0,0 +1,12 @@ +remove_key in db_handling::identities - Rust
pub fn remove_key(
+    database: &Db,
+    multisigner: &MultiSigner,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<()>
Expand description

Remove address from the Vault database.

+

Address is determined by [MultiSigner] and NetworkSpecsKey of the +network.

+

Function removes network NetworkSpecsKey from network_id set in +AddressDetails associated with provided [MultiSigner]. If no networks +associated with AddressKey remain, i.e. network_id set becomes empty, +whole entry is removed.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.remove_keys_set.html b/rustdocs/db_handling/identities/fn.remove_keys_set.html new file mode 100644 index 0000000000..e8203e4587 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.remove_keys_set.html @@ -0,0 +1,13 @@ +remove_keys_set in db_handling::identities - Rust
pub fn remove_keys_set(
+    database: &Db,
+    multiselect: &[MultiSigner],
+    network_specs_key: &NetworkSpecsKey
+) -> Result<()>
Expand description

Remove a set of addresses within a single network from the Vault database.

+

Address is determined by [MultiSigner] and NetworkSpecsKey of the +network. Function inputs network NetworkSpecsKey and a set of +MultiSigner values for which the address within a network must be deleted.

+

NetworkSpecsKey of the network is removed from network_id set in +AddressDetails associated with each of the provided MultiSigner +values. If no networks associated with AddressKey remain, i.e. +network_id set becomes empty, whole associated entry is removed.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.remove_seed.html b/rustdocs/db_handling/identities/fn.remove_seed.html new file mode 100644 index 0000000000..059fc40c44 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.remove_seed.html @@ -0,0 +1,5 @@ +remove_seed in db_handling::identities - Rust
pub fn remove_seed(database: &Db, seed_name: &str) -> Result<()>
Expand description

Remove all addresses associated with given seed name from the Vault +database.

+

Complementary action in frontend is removal of the seed data from the device +key management system.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.try_create_address.html b/rustdocs/db_handling/identities/fn.try_create_address.html new file mode 100644 index 0000000000..f95d420780 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.try_create_address.html @@ -0,0 +1,19 @@ +try_create_address in db_handling::identities - Rust
pub fn try_create_address(
+    database: &Db,
+    seed_name: &str,
+    seed_phrase: &str,
+    path: &str,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<()>
Expand description

Create a new address in the Vault database.

+

If the associated AddressKey already exists in the ADDRTREE tree of +the Vault database, a new network NetworkSpecsKey is added into +network_id set of the AddressDetails. If the AddressKey is new, +a new ADDRTREE entry is made.

+

Secrets passed into this function are:

+
    +
  • seed phrase
  • +
  • path, possibly with secret password part (///<...>).
  • +
+

Both are input as &str and go directly in create_address (both) and +derivation_check (path only).

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.try_create_seed.html b/rustdocs/db_handling/identities/fn.try_create_seed.html new file mode 100644 index 0000000000..b8900dfc47 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.try_create_seed.html @@ -0,0 +1,15 @@ +try_create_seed in db_handling::identities - Rust
pub fn try_create_seed(
+    database: &Db,
+    seed_name: &str,
+    seed_phrase: &str,
+    make_seed_keys: bool
+) -> Result<()>
Expand description

Accept seed into Vault: add default addresses for a seed in the Vault +database.

+

Each network has a default derivation path, recorded in NetworkSpecs +field path_id, normally path_id is //<network_name>.

+

This function adds addresses with default derivation paths into the Vault +database. If the make_seed_keys flag is set to true, seed keys are also +added. History log is accordingly updated.

+

This function inputs secret seed phrase as &str. It is passed as &str +into populate_addresses and used there.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/fn.validate_key_password.html b/rustdocs/db_handling/identities/fn.validate_key_password.html new file mode 100644 index 0000000000..f449068ec1 --- /dev/null +++ b/rustdocs/db_handling/identities/fn.validate_key_password.html @@ -0,0 +1,6 @@ +validate_key_password in db_handling::identities - Rust
pub fn validate_key_password(
+    database: &Db,
+    address_key: &AddressKey,
+    seed_phrase: &str,
+    password: &str
+) -> Result<bool>
\ No newline at end of file diff --git a/rustdocs/db_handling/identities/index.html b/rustdocs/db_handling/identities/index.html new file mode 100644 index 0000000000..4ed49244e1 --- /dev/null +++ b/rustdocs/db_handling/identities/index.html @@ -0,0 +1,30 @@ +db_handling::identities - Rust

Module db_handling::identities

source ·
Expand description

Creating, collecting, and removing addresses in cold database

+

In Vault and Vault-related ecosystem the address is a key pair within a +certain network. Vault Rust database stores only non-secret data +associated with each address generated by user.

+

Required data to generate address:

+
    +
  • seed phrase (secret words set, must be always zeroized after use and is +never stored in Rust database)
  • +
  • derivation path (/soft//hard///password); password part, i.e. whatever +follows /// is not stored in Rust database and must be zeroized after use
  • +
  • NetworkSpecsKey
  • +
+

The combination of seed phrase and derivation path allows to generate key +pair using the encryption algorithm supported by the network, for which the +address is generated.

+

Vault stores only the public key, it is used together with encryption +algorithm Encryption to generate +AddressKey.

+

Same AddressKey could correspond to more than one network if the addresses +were produced for same seed phrase and derivation path, and networks use +same encryption algorithm. The networks specs keys of associated networks +are stored in network_id field of AddressDetails.

+

Vault interface shows those addresses as separate entities.

+

Non-secret data associated with AddressKey is stored in +ADDRTREE tree of the cold database as SCALE-encoded +AddressDetails.

+

Structs

Enums

Functions

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/sidebar-items.js b/rustdocs/db_handling/identities/sidebar-items.js new file mode 100644 index 0000000000..0691b2e028 --- /dev/null +++ b/rustdocs/db_handling/identities/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["DerivationCheck","ExportAddrs","SignaturesBulk","TransactionBulk","VaultFeatures"],"fn":["check_derivation_set","create_increment_set","create_key_set","cut_path","derivation_check","derive_single_key","dynamic_derivations_response","export_key_set_addrs","export_secret_key","generate_random_phrase","generate_test_identities","get_addresses_by_seed_name","get_all_addresses","get_multisigner_by_address","import_all_addrs","inject_derivations_has_pwd","is_passworded","process_dynamic_derivations_v1","remove_key","remove_keys_set","remove_seed","try_create_address","try_create_seed","validate_key_password"],"struct":["AddrInfo","DynamicDerivationTransaction","ExportAddrsV1","ExportAddrsV2","SeedInfo","SignaturesBulkV1","TransactionBulkV1"]}; \ No newline at end of file diff --git a/rustdocs/db_handling/identities/struct.AddrInfo.html b/rustdocs/db_handling/identities/struct.AddrInfo.html new file mode 100644 index 0000000000..102135d0a5 --- /dev/null +++ b/rustdocs/db_handling/identities/struct.AddrInfo.html @@ -0,0 +1,163 @@ +AddrInfo in db_handling::identities - Rust
pub struct AddrInfo {
+    pub address: String,
+    pub derivation_path: Option<String>,
+    pub encryption: Encryption,
+    pub genesis_hash: H256,
+}

Fields§

§address: String

Address in the network.

+

This is either ss58 form for substrate-based chains or +h160 form for ethereum based +chains

+
§derivation_path: Option<String>

The derivation path of the key if user provided one

+
§encryption: Encryption

The type of encryption in the network

+
§genesis_hash: H256

Genesis hash

+

Trait Implementations§

source§

impl Clone for AddrInfo

source§

fn clone(&self) -> AddrInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AddrInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for AddrInfo

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for AddrInfo

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<AddrInfo> for AddrInfo

source§

fn eq(&self, other: &AddrInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<AddrInfo> for AddrInfo

source§

impl Eq for AddrInfo

source§

impl StructuralEq for AddrInfo

source§

impl StructuralPartialEq for AddrInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/struct.DynamicDerivationTransaction.html b/rustdocs/db_handling/identities/struct.DynamicDerivationTransaction.html new file mode 100644 index 0000000000..68e932bcb2 --- /dev/null +++ b/rustdocs/db_handling/identities/struct.DynamicDerivationTransaction.html @@ -0,0 +1,149 @@ +DynamicDerivationTransaction in db_handling::identities - Rust
pub struct DynamicDerivationTransaction {
+    pub root_multisigner: MultiSigner,
+    pub derivation_path: String,
+}

Fields§

§root_multisigner: MultiSigner§derivation_path: String

Trait Implementations§

source§

impl Clone for DynamicDerivationTransaction

source§

fn clone(&self) -> DynamicDerivationTransaction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for DynamicDerivationTransaction

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationTransaction

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<DynamicDerivationTransaction> for DynamicDerivationTransaction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/struct.ExportAddrsV1.html b/rustdocs/db_handling/identities/struct.ExportAddrsV1.html new file mode 100644 index 0000000000..cf03ef018b --- /dev/null +++ b/rustdocs/db_handling/identities/struct.ExportAddrsV1.html @@ -0,0 +1,155 @@ +ExportAddrsV1 in db_handling::identities - Rust
pub struct ExportAddrsV1 {
+    pub addrs: Vec<SeedInfo>,
+}

Fields§

§addrs: Vec<SeedInfo>

Trait Implementations§

source§

impl Clone for ExportAddrsV1

source§

fn clone(&self) -> ExportAddrsV1

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ExportAddrsV1

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for ExportAddrsV1

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for ExportAddrsV1

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl From<ExportAddrsV2> for ExportAddrsV1

source§

fn from(val: ExportAddrsV2) -> Self

Converts to this type from the input type.
source§

impl PartialEq<ExportAddrsV1> for ExportAddrsV1

source§

fn eq(&self, other: &ExportAddrsV1) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<ExportAddrsV1> for ExportAddrsV1

source§

impl Eq for ExportAddrsV1

source§

impl StructuralEq for ExportAddrsV1

source§

impl StructuralPartialEq for ExportAddrsV1

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/struct.ExportAddrsV2.html b/rustdocs/db_handling/identities/struct.ExportAddrsV2.html new file mode 100644 index 0000000000..71ea864c83 --- /dev/null +++ b/rustdocs/db_handling/identities/struct.ExportAddrsV2.html @@ -0,0 +1,154 @@ +ExportAddrsV2 in db_handling::identities - Rust
pub struct ExportAddrsV2 {
+    pub addr: SeedInfo,
+    /* private fields */
+}

Fields§

§addr: SeedInfo

Implementations§

source§

impl ExportAddrsV2

source

pub fn new(addr: SeedInfo) -> Self

Trait Implementations§

source§

impl Clone for ExportAddrsV2

source§

fn clone(&self) -> ExportAddrsV2

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ExportAddrsV2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for ExportAddrsV2

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for ExportAddrsV2

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl From<ExportAddrsV2> for ExportAddrsV1

source§

fn from(val: ExportAddrsV2) -> Self

Converts to this type from the input type.
source§

impl PartialEq<ExportAddrsV2> for ExportAddrsV2

source§

fn eq(&self, other: &ExportAddrsV2) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<ExportAddrsV2> for ExportAddrsV2

source§

impl Eq for ExportAddrsV2

source§

impl StructuralEq for ExportAddrsV2

source§

impl StructuralPartialEq for ExportAddrsV2

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/struct.SeedInfo.html b/rustdocs/db_handling/identities/struct.SeedInfo.html new file mode 100644 index 0000000000..685493ba31 --- /dev/null +++ b/rustdocs/db_handling/identities/struct.SeedInfo.html @@ -0,0 +1,158 @@ +SeedInfo in db_handling::identities - Rust
pub struct SeedInfo {
+    pub name: String,
+    pub multisigner: MultiSigner,
+    pub derived_keys: Vec<AddrInfo>,
+}

Fields§

§name: String

Name of the seed.

+
§multisigner: MultiSigner

Public key of the root key.

+
§derived_keys: Vec<AddrInfo>

Derived keys.

+

Trait Implementations§

source§

impl Clone for SeedInfo

source§

fn clone(&self) -> SeedInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SeedInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for SeedInfo

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for SeedInfo

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<SeedInfo> for SeedInfo

source§

fn eq(&self, other: &SeedInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<SeedInfo> for SeedInfo

source§

impl Eq for SeedInfo

source§

impl StructuralEq for SeedInfo

source§

impl StructuralPartialEq for SeedInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/struct.SignaturesBulkV1.html b/rustdocs/db_handling/identities/struct.SignaturesBulkV1.html new file mode 100644 index 0000000000..18da7d2306 --- /dev/null +++ b/rustdocs/db_handling/identities/struct.SignaturesBulkV1.html @@ -0,0 +1,148 @@ +SignaturesBulkV1 in db_handling::identities - Rust
pub struct SignaturesBulkV1 { /* private fields */ }

Trait Implementations§

source§

impl Clone for SignaturesBulkV1

source§

fn clone(&self) -> SignaturesBulkV1

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for SignaturesBulkV1

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for SignaturesBulkV1

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl From<&[MultiSignature]> for SignaturesBulkV1

source§

fn from(signatures: &[MultiSignature]) -> Self

Converts to this type from the input type.
source§

impl From<SignaturesBulkV1> for SignaturesBulk

source§

fn from(s: SignaturesBulkV1) -> Self

Converts to this type from the input type.
source§

impl EncodeLike<SignaturesBulkV1> for SignaturesBulkV1

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/identities/struct.TransactionBulkV1.html b/rustdocs/db_handling/identities/struct.TransactionBulkV1.html new file mode 100644 index 0000000000..ee5572afec --- /dev/null +++ b/rustdocs/db_handling/identities/struct.TransactionBulkV1.html @@ -0,0 +1,150 @@ +TransactionBulkV1 in db_handling::identities - Rust
pub struct TransactionBulkV1 {
+    pub encoded_transactions: Vec<Vec<u8>>,
+}

Fields§

§encoded_transactions: Vec<Vec<u8>>

Trait Implementations§

source§

impl Clone for TransactionBulkV1

source§

fn clone(&self) -> TransactionBulkV1

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for TransactionBulkV1

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for TransactionBulkV1

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<TransactionBulkV1> for TransactionBulkV1

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/index.html b/rustdocs/db_handling/index.html new file mode 100644 index 0000000000..b410aa9029 --- /dev/null +++ b/rustdocs/db_handling/index.html @@ -0,0 +1,20 @@ +db_handling - Rust

Crate db_handling

source ·
Expand description

This crate deals with standard database-related procedures used in +Vault and Vault-supporting +ecosystem.

+

This crate:

+
    +
  • contains helpers to operate the databases, used throughout Vault system
  • +
  • generates cold (used in air-gapped Vault) and hot (used in +generate_message client) databases with default settings
  • +
  • deals with taking data out of the database and putting the data in the +database
  • +
  • contains Vault interface interactions, allowing exports of data to the +interface
  • +
  • deals with address generation for Vault
  • +
+

Features

+

Feature "active" corresponds to all Vault-related things happening +without air-gap, including the generation of the database for Vault +during the build.

+

Modules

Enums

  • DB handling error type.

Functions

  • Generate or restore “cold” database with default values, for release +build.
  • Generate or restore “hot” database with default values.

Type Definitions

\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/constant.BIP_CAP.html b/rustdocs/db_handling/interface_signer/constant.BIP_CAP.html new file mode 100644 index 0000000000..7ef863f9c6 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/constant.BIP_CAP.html @@ -0,0 +1,3 @@ +BIP_CAP in db_handling::interface_signer - Rust
pub const BIP_CAP: usize = 24;
Expand description

Maximum word count in bip39 standard.

+

See https://docs.rs/tiny-bip39/0.8.2/src/bip39/mnemonic_type.rs.html#60

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/constant.WORD_LENGTH.html b/rustdocs/db_handling/interface_signer/constant.WORD_LENGTH.html new file mode 100644 index 0000000000..021aaadec0 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/constant.WORD_LENGTH.html @@ -0,0 +1,2 @@ +WORD_LENGTH in db_handling::interface_signer - Rust
pub const WORD_LENGTH: usize = 8;
Expand description

Maximum word length in bip39 standard.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.addresses_set_seed_name_network.html b/rustdocs/db_handling/interface_signer/fn.addresses_set_seed_name_network.html new file mode 100644 index 0000000000..e08dee8042 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.addresses_set_seed_name_network.html @@ -0,0 +1,7 @@ +addresses_set_seed_name_network in db_handling::interface_signer - Rust
pub fn addresses_set_seed_name_network(
+    database: &Db,
+    seed_name: &str,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<Vec<(MultiSigner, AddressDetails)>>
Expand description

Get address-associated public data for all addresses from the Vault +database with given seed name and network NetworkSpecsKey.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.backup_prep.html b/rustdocs/db_handling/interface_signer/fn.backup_prep.html new file mode 100644 index 0000000000..adbfb15c97 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.backup_prep.html @@ -0,0 +1,4 @@ +backup_prep in db_handling::interface_signer - Rust
pub fn backup_prep(database: &Db, seed_name: &str) -> Result<MBackup>
Expand description

Prepare seed backup screen struct MBackup for given seed name.

+

Function inputs seed name, outputs Vec with all known derivations in all +networks.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.derive_prep.html b/rustdocs/db_handling/interface_signer/fn.derive_prep.html new file mode 100644 index 0000000000..54baf86a3c --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.derive_prep.html @@ -0,0 +1,11 @@ +derive_prep in db_handling::interface_signer - Rust
pub fn derive_prep(
+    _database: &Db,
+    seed_name: &str,
+    _collision: Option<(MultiSigner, AddressDetails)>,
+    _suggest: &str,
+    _keyboard: bool
+) -> Result<MDeriveKey>
Expand description

Prepare key derivation screen struct MDeriveKey.

+

Function inputs seed name, network NetworkSpecsKey and user-suggested +derivation, outputs struct with derived address data and, if the derived +address already exists in the database, shows the its data.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.dynamic_path_check.html b/rustdocs/db_handling/interface_signer/fn.dynamic_path_check.html new file mode 100644 index 0000000000..2ac84671a7 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.dynamic_path_check.html @@ -0,0 +1,16 @@ +dynamic_path_check in db_handling::interface_signer - Rust
pub fn dynamic_path_check(
+    database: &Db,
+    seed_name: &str,
+    path: &str,
+    network_specs_key_hex: &str
+) -> DerivationCheck
Expand description

Return NavDerivationCheck with allowed action details for new key derivation.

+

Function is used to dynamically check from the frontend if user is allowed +to proceed with the proposed derived key generation.

+

User is allowed to try to proceed only if the derivation is valid and, in +case of derivations without password, if the derivation does not already +exist in the database. Passworded valid derivations are allowed to proceed, +but result in an error later on, if the derivation exists.

+

Function makes only preliminary check on password-free derivations, it +does not use seed phrase and does not calculate the AddressKey, i.e. +it can’t check passworded derivations, and allows them to proceed anyway.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.export_key.html b/rustdocs/db_handling/interface_signer/fn.export_key.html new file mode 100644 index 0000000000..0e86f4e946 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.export_key.html @@ -0,0 +1,14 @@ +export_key in db_handling::interface_signer - Rust
pub fn export_key(
+    database: &Db,
+    multisigner: &MultiSigner,
+    expected_seed_name: &str,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<MKeyDetails>
Expand description

Prepare export key screen struct MKeyDetails.

+

For QR code the address information is put in format +substrate:{public key as base58}:0x{network genesis hash} +transformed into bytes, to be compatible with polkadot-js interface.

+

Note that no Encryption algorithm +information is contained in the QR code. If there are multiple Encryption +algorithms supported by the network, the only visible difference in exports +would be the identicon.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.first_network.html b/rustdocs/db_handling/interface_signer/fn.first_network.html new file mode 100644 index 0000000000..1acc2c48e8 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.first_network.html @@ -0,0 +1,4 @@ +first_network in db_handling::interface_signer - Rust
pub fn first_network(database: &Db) -> Result<Option<OrderedNetworkSpecs>>
Expand description

Sort database networks by the order and get the network specs for the first +network on the list.

+

If there are no networks in the system, throws error.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.get_all_seed_names_with_identicons.html b/rustdocs/db_handling/interface_signer/fn.get_all_seed_names_with_identicons.html new file mode 100644 index 0000000000..342fafbb3b --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.get_all_seed_names_with_identicons.html @@ -0,0 +1,14 @@ +get_all_seed_names_with_identicons in db_handling::interface_signer - Rust
pub fn get_all_seed_names_with_identicons(
+    database: &Db,
+    names_phone_knows: &[String]
+) -> Result<Vec<SeedNameCard>>
Expand description

Return a Vec with all seed names with seed key identicons if seed key is +available.

+

Function processes all seeds known to Vault KMS (which are input as +&[String]), including seeds without any corresponding addresses currently +known to Vault (orphans).

+

If the same seed has more than one seed key in the database, i.e. it has +been used to create seed keys with more than one +Encryption algorithm, only one +identicon is selected, in order of preference: Sr25519, Ed25519, +Ecdsa.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.guess.html b/rustdocs/db_handling/interface_signer/fn.guess.html new file mode 100644 index 0000000000..3f1da57d2f --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.guess.html @@ -0,0 +1,4 @@ +guess in db_handling::interface_signer - Rust
pub fn guess(word_part: &str) -> Vec<&'static str>
Expand description

Get possible options of English bip39 words that start with user-entered +word part.

+

List length limit is MAX_WORDS_DISPLAY.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.history_hex_checksum.html b/rustdocs/db_handling/interface_signer/fn.history_hex_checksum.html new file mode 100644 index 0000000000..8deb4b625a --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.history_hex_checksum.html @@ -0,0 +1,2 @@ +history_hex_checksum in db_handling::interface_signer - Rust
pub fn history_hex_checksum(database: &Db) -> Result<String>
Expand description

Get database history tree checksum to be displayed in log screen.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.keys_by_seed_name.html b/rustdocs/db_handling/interface_signer/fn.keys_by_seed_name.html new file mode 100644 index 0000000000..0e91ac462a --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.keys_by_seed_name.html @@ -0,0 +1 @@ +keys_by_seed_name in db_handling::interface_signer - Rust
pub fn keys_by_seed_name(database: &Db, seed_name: &str) -> Result<MKeysNew>
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.metadata_details.html b/rustdocs/db_handling/interface_signer/fn.metadata_details.html new file mode 100644 index 0000000000..bf09b51dee --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.metadata_details.html @@ -0,0 +1,7 @@ +metadata_details in db_handling::interface_signer - Rust
pub fn metadata_details(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey,
+    network_version: u32
+) -> Result<MManageMetadata>
Expand description

Return MManageMetadata with metadata details for network with given +NetworkSpecsKey and given version.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.network_details_by_key.html b/rustdocs/db_handling/interface_signer/fn.network_details_by_key.html new file mode 100644 index 0000000000..bf7e9adacc --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.network_details_by_key.html @@ -0,0 +1,6 @@ +network_details_by_key in db_handling::interface_signer - Rust
pub fn network_details_by_key(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<MNetworkDetails>
Expand description

Return MNetworkDetails with network specs and metadata set information +for network with given NetworkSpecsKey.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.print_all_identities.html b/rustdocs/db_handling/interface_signer/fn.print_all_identities.html new file mode 100644 index 0000000000..af68c3f71c --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.print_all_identities.html @@ -0,0 +1,7 @@ +print_all_identities in db_handling::interface_signer - Rust
pub fn print_all_identities(database: &Db) -> Result<Vec<MRawKey>>
Expand description

Return a Vec with address-associated public data for all addresses from the +Vault database.

+

Function is used to show users all possible addresses, when selecting the +address to generate +SufficientCrypto for signing +updates with the Vault.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.print_new_seed.html b/rustdocs/db_handling/interface_signer/fn.print_new_seed.html new file mode 100644 index 0000000000..10a0807e2f --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.print_new_seed.html @@ -0,0 +1,3 @@ +print_new_seed in db_handling::interface_signer - Rust
pub fn print_new_seed(seed_name: &str) -> Result<MNewSeedBackup>
Expand description

Generate new random seed phrase, make identicon for sr25519 public key, +and send to Vault screen.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.purge_transactions.html b/rustdocs/db_handling/interface_signer/fn.purge_transactions.html new file mode 100644 index 0000000000..6e0d74db74 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.purge_transactions.html @@ -0,0 +1,4 @@ +purge_transactions in db_handling::interface_signer - Rust
pub fn purge_transactions(database: &Db) -> Result<()>
Expand description

Clear transaction tree of the database.

+

Function is intended for cases when transaction is declined by the user +(e.g. user has scanned something, read it, clicked back or decline)

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.show_all_networks.html b/rustdocs/db_handling/interface_signer/fn.show_all_networks.html new file mode 100644 index 0000000000..6d20a9430a --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.show_all_networks.html @@ -0,0 +1,3 @@ +show_all_networks in db_handling::interface_signer - Rust
pub fn show_all_networks(database: &Db) -> Result<Vec<MMNetwork>>
Expand description

Make Vec with network information for all networks in the Vault database, +without any selection.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.show_all_networks_with_flag.html b/rustdocs/db_handling/interface_signer/fn.show_all_networks_with_flag.html new file mode 100644 index 0000000000..cf858ccd78 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.show_all_networks_with_flag.html @@ -0,0 +1,6 @@ +show_all_networks_with_flag in db_handling::interface_signer - Rust
pub fn show_all_networks_with_flag(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<MNetworkMenu>
Expand description

Return Vec with network information for all networks in the Vault database, +with bool indicator which one is currently selected.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/fn.show_types_status.html b/rustdocs/db_handling/interface_signer/fn.show_types_status.html new file mode 100644 index 0000000000..4fd08c5d48 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/fn.show_types_status.html @@ -0,0 +1,2 @@ +show_types_status in db_handling::interface_signer - Rust
pub fn show_types_status(database: &Db) -> Result<MTypesInfo>
Expand description

Make types status display.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/index.html b/rustdocs/db_handling/interface_signer/index.html new file mode 100644 index 0000000000..f893dfbda4 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/index.html @@ -0,0 +1,12 @@ +db_handling::interface_signer - Rust
Expand description

Utils to communicate with the Vault frontend

+

Structs

Constants

  • Maximum word count in bip39 standard.
  • Maximum word length in bip39 standard.

Functions

\ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/sidebar-items.js b/rustdocs/db_handling/interface_signer/sidebar-items.js new file mode 100644 index 0000000000..61c40e4ad2 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"constant":["BIP_CAP","WORD_LENGTH"],"fn":["addresses_set_seed_name_network","backup_prep","derive_prep","dynamic_path_check","export_key","first_network","get_all_seed_names_with_identicons","guess","history_hex_checksum","keys_by_seed_name","metadata_details","network_details_by_key","print_all_identities","print_new_seed","purge_transactions","show_all_networks","show_all_networks_with_flag","show_types_status"],"struct":["SeedDraft"]}; \ No newline at end of file diff --git a/rustdocs/db_handling/interface_signer/struct.SeedDraft.html b/rustdocs/db_handling/interface_signer/struct.SeedDraft.html new file mode 100644 index 0000000000..adca44a1f9 --- /dev/null +++ b/rustdocs/db_handling/interface_signer/struct.SeedDraft.html @@ -0,0 +1,138 @@ +SeedDraft in db_handling::interface_signer - Rust
pub struct SeedDraft { /* private fields */ }
Expand description

Zeroizeable seed phrase draft.

+

Implementations§

source§

impl SeedDraft

source

pub fn initiate() -> Self

Start new SeedDraft

+
source

pub fn text_field_update(&mut self, user_text: &str)

Modify SeedDraft with updated user_text from the frontend.

+

Note that user_text input by default starts with ’ ’ (space). If user +removes this space, it results in removing whole previous word.

+
source

pub fn added(&mut self, word: &str, position: Option<u32>) -> bool

User tries to add the word to the saved field of the SeedDraft. +Output is true if addition happens. SeedDraft gets modified in the +process.

+

Optional position input could be used to mark the position in seed +phrase to add the word to.

+
source

pub fn remove(&mut self, position: u32)

Remove word at given position from the saved seed phrase draft.

+
source

pub fn remove_last(&mut self)

Remove last word from the saved seed phrase draft.

+
source

pub fn draft(&self) -> Vec<String>

Make a String with a seed phrase draft.

+

Returned string contains a secret and should be handled as such.

+
source

pub fn try_finalize(&self) -> Option<String>

Combines all draft elements into seed phrase proposal, +and checks its validity. +If valid, outputs secret seed phrase.

+
source

pub fn user_input(&self) -> &str

Output the user input back into user interface.

+

Trait Implementations§

source§

impl Clone for SeedDraft

source§

fn clone(&self) -> SeedDraft

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SeedDraft

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Drop for SeedDraft

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl Zeroize for SeedDraft

source§

fn zeroize(&mut self)

Zero out this object from memory using Rust intrinsics which ensure the +zeroization operation is not “optimized away” by the compiler.
source§

impl ZeroizeOnDrop for SeedDraft

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.clear_history.html b/rustdocs/db_handling/manage_history/fn.clear_history.html new file mode 100644 index 0000000000..bf527133ca --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.clear_history.html @@ -0,0 +1,2 @@ +clear_history in db_handling::manage_history - Rust
pub fn clear_history(database: &Db) -> Result<()>
Expand description

Clear Vault history and make a log Entry that history was cleared.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.device_was_online.html b/rustdocs/db_handling/manage_history/fn.device_was_online.html new file mode 100644 index 0000000000..ee4d36a5e1 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.device_was_online.html @@ -0,0 +1,9 @@ +device_was_online in db_handling::manage_history - Rust
pub fn device_was_online(database: &Db) -> Result<()>
Expand description

Process the fact that the Vault device was online.

+
    +
  • Add history log entry with Event::DeviceWasOnline.
  • +
  • Update DangerRecord stored in SETTREE with +device_was_online = true flag.
  • +
+

Unacknowledged non-safe DangerRecord block the use of Vault in the +frontend.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.enter_events.html b/rustdocs/db_handling/manage_history/fn.enter_events.html new file mode 100644 index 0000000000..40f3091370 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.enter_events.html @@ -0,0 +1,2 @@ +enter_events in db_handling::manage_history - Rust
pub fn enter_events(database: &Db, events: Vec<Event>) -> Result<()>
Expand description

Enter Event set into the database as a single database transaction.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.events_to_batch.html b/rustdocs/db_handling/manage_history/fn.events_to_batch.html new file mode 100644 index 0000000000..a52e0f88e6 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.events_to_batch.html @@ -0,0 +1,3 @@ +events_to_batch in db_handling::manage_history - Rust
pub fn events_to_batch(database: &Db, events: Vec<Event>) -> Result<Batch>
Expand description

Timestamp Event set and make with it a new [Batch], that could be +applied to the HISTORY tree.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.get_history.html b/rustdocs/db_handling/manage_history/fn.get_history.html new file mode 100644 index 0000000000..fe57422bb3 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.get_history.html @@ -0,0 +1,2 @@ +get_history in db_handling::manage_history - Rust
pub fn get_history(database: &Db) -> Result<Vec<(Order, Entry)>>
Expand description

Get history log contents from the database.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.get_history_entry_by_order.html b/rustdocs/db_handling/manage_history/fn.get_history_entry_by_order.html new file mode 100644 index 0000000000..3c545f166f --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.get_history_entry_by_order.html @@ -0,0 +1,3 @@ +get_history_entry_by_order in db_handling::manage_history - Rust
pub fn get_history_entry_by_order(database: &Db, order: u32) -> Result<Entry>
Expand description

Get from the database a history log Entry by u32 order identifier +received from the frontend.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.history_entry_system.html b/rustdocs/db_handling/manage_history/fn.history_entry_system.html new file mode 100644 index 0000000000..a61c7a6ed3 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.history_entry_system.html @@ -0,0 +1,2 @@ +history_entry_system in db_handling::manage_history - Rust
pub fn history_entry_system(database: &Db, event: Event) -> Result<()>
Expand description

Enter system-generated Event into the database.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.history_entry_user.html b/rustdocs/db_handling/manage_history/fn.history_entry_user.html new file mode 100644 index 0000000000..c740266690 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.history_entry_user.html @@ -0,0 +1,2 @@ +history_entry_user in db_handling::manage_history - Rust
pub fn history_entry_user(database: &Db, string_from_user: &str) -> Result<()>
Expand description

Enter user-generated Event into the database.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.history_total_pages.html b/rustdocs/db_handling/manage_history/fn.history_total_pages.html new file mode 100644 index 0000000000..460a4c5877 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.history_total_pages.html @@ -0,0 +1,3 @@ +history_total_pages in db_handling::manage_history - Rust
pub fn history_total_pages(database: &Db) -> Result<u32>
Expand description

Print total number of pages, for maximum HISTORY_PAGE_SIZE number of +entries per page.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.reset_danger_status_to_safe.html b/rustdocs/db_handling/manage_history/fn.reset_danger_status_to_safe.html new file mode 100644 index 0000000000..826e4e09a6 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.reset_danger_status_to_safe.html @@ -0,0 +1,10 @@ +reset_danger_status_to_safe in db_handling::manage_history - Rust
pub fn reset_danger_status_to_safe(database: &Db) -> Result<()>
Expand description

Acknowledge that the Vault device was online and reset the +DangerRecord back to safe.

+
    +
  • Add history log entry with Event::ResetDangerRecord.
  • +
  • Reset DangerRecord stored in SETTREE to +safe, i.e. with device_was_online = false flag.
  • +
+

Acknowledged and reset DangerRecord allow to resume the use of Vault in +the frontend. Use it wisely.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/fn.seed_name_was_shown.html b/rustdocs/db_handling/manage_history/fn.seed_name_was_shown.html new file mode 100644 index 0000000000..de25fb7f99 --- /dev/null +++ b/rustdocs/db_handling/manage_history/fn.seed_name_was_shown.html @@ -0,0 +1,7 @@ +seed_name_was_shown in db_handling::manage_history - Rust
pub fn seed_name_was_shown(
+    database: &Db,
+    seed_name_was_shown: String
+) -> Result<()>
Expand description

Record in history log that certain seed was shown on Vault screen, +presumably for backup.

+

Seeds are distinguished by the seed name.

+
\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/index.html b/rustdocs/db_handling/manage_history/index.html new file mode 100644 index 0000000000..2f8409d715 --- /dev/null +++ b/rustdocs/db_handling/manage_history/index.html @@ -0,0 +1,13 @@ +db_handling::manage_history - Rust
Expand description

Displaying and updating history log

+

The Vault keeps a history log of all events that change the database and +affect security. It is stored in HISTORY tree of the cold database.

+

Each history log Entry contains Event set and a timestamp. Database +key for Entry value is Order, SCALE-encoded number of the entry.

+

In addition to keeping the log, Vault also displays HISTORY tree +checksum for user to possibly keep the track of.

+

Functions

\ No newline at end of file diff --git a/rustdocs/db_handling/manage_history/sidebar-items.js b/rustdocs/db_handling/manage_history/sidebar-items.js new file mode 100644 index 0000000000..55e653fd9a --- /dev/null +++ b/rustdocs/db_handling/manage_history/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["clear_history","device_was_online","enter_events","events_to_batch","get_history","get_history_entry_by_order","history_entry_system","history_entry_user","history_total_pages","reset_danger_status_to_safe","seed_name_was_shown"]}; \ No newline at end of file diff --git a/rustdocs/db_handling/sidebar-items.js b/rustdocs/db_handling/sidebar-items.js new file mode 100644 index 0000000000..ac7de93260 --- /dev/null +++ b/rustdocs/db_handling/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Error"],"fn":["default_cold_release","default_hot"],"mod":["cold_default","db_transactions","helpers","identities","interface_signer","manage_history"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/db_handling/type.Result.html b/rustdocs/db_handling/type.Result.html new file mode 100644 index 0000000000..9148f584fd --- /dev/null +++ b/rustdocs/db_handling/type.Result.html @@ -0,0 +1,2 @@ +Result in db_handling - Rust

Type Definition db_handling::Result

source ·
pub type Result<T> = Result<T, Error>;
Expand description

DB handling result.

+
\ No newline at end of file diff --git a/rustdocs/defaults/all.html b/rustdocs/defaults/all.html new file mode 100644 index 0000000000..be8bb87c96 --- /dev/null +++ b/rustdocs/defaults/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/defaults/constant.DEFAULT_VERIFIER_PUBLIC.html b/rustdocs/defaults/constant.DEFAULT_VERIFIER_PUBLIC.html new file mode 100644 index 0000000000..eaa442f2d8 --- /dev/null +++ b/rustdocs/defaults/constant.DEFAULT_VERIFIER_PUBLIC.html @@ -0,0 +1,4 @@ +DEFAULT_VERIFIER_PUBLIC in defaults - Rust
pub const DEFAULT_VERIFIER_PUBLIC: [u8; 32];
Expand description

Real Parity public key, with Sr25519 encryption

+

To be used in VerifierValue for general verifier in default cold +database

+
\ No newline at end of file diff --git a/rustdocs/defaults/enum.Error.html b/rustdocs/defaults/enum.Error.html new file mode 100644 index 0000000000..736146004f --- /dev/null +++ b/rustdocs/defaults/enum.Error.html @@ -0,0 +1,133 @@ +Error in defaults - Rust

Enum defaults::Error

source ·
pub enum Error {
+    IoError(Error),
+    DefinitionsError(Error),
+    Base58PrefixSpecsMismatch {
+        specs: u16,
+        meta: u16,
+    },
+    OrphanMetadata {
+        name: String,
+        filename: String,
+    },
+}

Variants§

§

IoError(Error)

§

DefinitionsError(Error)

§

Base58PrefixSpecsMismatch

Fields

§specs: u16
§meta: u16

Base58 prefix from metadata (meta) does not match base58 prefix in specs (specs)

+
§

OrphanMetadata

Fields

§name: String
§filename: String

Default metadata set contains metadata files that have no corresponding +default network specs and address book entries.

+

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/defaults/error/enum.Error.html b/rustdocs/defaults/error/enum.Error.html new file mode 100644 index 0000000000..feaa2442de --- /dev/null +++ b/rustdocs/defaults/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../defaults/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/defaults/error/type.Result.html b/rustdocs/defaults/error/type.Result.html new file mode 100644 index 0000000000..5d89a08223 --- /dev/null +++ b/rustdocs/defaults/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../defaults/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/defaults/fn.default_address_book.html b/rustdocs/defaults/fn.default_address_book.html new file mode 100644 index 0000000000..35e2f1484a --- /dev/null +++ b/rustdocs/defaults/fn.default_address_book.html @@ -0,0 +1,2 @@ +default_address_book in defaults - Rust
pub fn default_address_book() -> Vec<AddressBookEntry>
Expand description

Generate address book set for the default networks, for hot database

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.default_chainspecs.html b/rustdocs/defaults/fn.default_chainspecs.html new file mode 100644 index 0000000000..4a148be5b6 --- /dev/null +++ b/rustdocs/defaults/fn.default_chainspecs.html @@ -0,0 +1,3 @@ +default_chainspecs in defaults - Rust
pub fn default_chainspecs() -> Vec<OrderedNetworkSpecs>
Expand description

Generate network specs OrderedNetworkSpecs set for the default networks, for +cold database

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.default_chainspecs_to_send.html b/rustdocs/defaults/fn.default_chainspecs_to_send.html new file mode 100644 index 0000000000..a9ecb46791 --- /dev/null +++ b/rustdocs/defaults/fn.default_chainspecs_to_send.html @@ -0,0 +1,3 @@ +default_chainspecs_to_send in defaults - Rust
pub fn default_chainspecs_to_send() -> Vec<NetworkSpecs>
Expand description

Generate network specs NetworkSpecs set for the default networks, +for hot database

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.default_general_verifier.html b/rustdocs/defaults/fn.default_general_verifier.html new file mode 100644 index 0000000000..ef4d21133e --- /dev/null +++ b/rustdocs/defaults/fn.default_general_verifier.html @@ -0,0 +1,3 @@ +default_general_verifier in defaults - Rust
pub fn default_general_verifier() -> Verifier
Expand description

Generate default general verifier Verifier, with Parity public key +inside.

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.default_types_content.html b/rustdocs/defaults/fn.default_types_content.html new file mode 100644 index 0000000000..4fb149510b --- /dev/null +++ b/rustdocs/defaults/fn.default_types_content.html @@ -0,0 +1,2 @@ +default_types_content in defaults - Rust
pub fn default_types_content() -> Result<ContentLoadTypes>
Expand description

Generate default types as ContentLoadTypes

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.default_types_vec.html b/rustdocs/defaults/fn.default_types_vec.html new file mode 100644 index 0000000000..7aa43da9fc --- /dev/null +++ b/rustdocs/defaults/fn.default_types_vec.html @@ -0,0 +1,18 @@ +default_types_vec in defaults - Rust
pub fn default_types_vec() -> Result<Vec<TypeEntry>>
Expand description

Generate default types as TypeEntry set

+

Type definitions stored in ../defaults/default_types/full_types_information +are recorded with standard Rust syntax, processed with regular expressions +to categorize, and collected as TypeEntry set.

+

Types information is necessary only to parse transactions produced with +RuntimeVersion of the network metadata below V14. Therefore, it is +obsolete for default networks.

+

Types information currently on file was collected for older metadata +versions of Westend, Polkadot, Kusama, and Rococo, when they were still +using metadata runtime version V12 and V13. Type definitions were gathered +(mostly) from substrate crates and in some cases from js client code, when +it was not possible to find explicit descriptions in substrate crates.

+

This types collection is totally not expected to be exhaustive for any +network a user may encounter, although the most common types are likely +described. If user gets an error that certain type is unknown, this type +description could be added into types file by user, and types update could +be generated by user.

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.default_verifiers.html b/rustdocs/defaults/fn.default_verifiers.html new file mode 100644 index 0000000000..7d011af31f --- /dev/null +++ b/rustdocs/defaults/fn.default_verifiers.html @@ -0,0 +1,2 @@ +default_verifiers in defaults - Rust
pub fn default_verifiers() -> Vec<(VerifierKey, CurrentVerifier)>
Expand description

Generate verifiers set for the default networks, for cold database

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.nav_test_metadata.html b/rustdocs/defaults/fn.nav_test_metadata.html new file mode 100644 index 0000000000..cc4161c1bb --- /dev/null +++ b/rustdocs/defaults/fn.nav_test_metadata.html @@ -0,0 +1,3 @@ +nav_test_metadata in defaults - Rust
pub fn nav_test_metadata() -> Result<Vec<MetaValues>>
Expand description

Read metadata set for navigation test cold database from nav_test_metadata +folder

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.release_metadata.html b/rustdocs/defaults/fn.release_metadata.html new file mode 100644 index 0000000000..1cc82e2698 --- /dev/null +++ b/rustdocs/defaults/fn.release_metadata.html @@ -0,0 +1,2 @@ +release_metadata in defaults - Rust

Function defaults::release_metadata

source ·
pub fn release_metadata() -> Result<Vec<MetaValues>>
Expand description

Read metadata set for release cold database from release_metadata folder

+
\ No newline at end of file diff --git a/rustdocs/defaults/fn.test_metadata.html b/rustdocs/defaults/fn.test_metadata.html new file mode 100644 index 0000000000..a762082bd0 --- /dev/null +++ b/rustdocs/defaults/fn.test_metadata.html @@ -0,0 +1,2 @@ +test_metadata in defaults - Rust

Function defaults::test_metadata

source ·
pub fn test_metadata() -> Result<Vec<MetaValues>>
Expand description

Read metadata set for test cold database from test_metadata folder

+
\ No newline at end of file diff --git a/rustdocs/defaults/index.html b/rustdocs/defaults/index.html new file mode 100644 index 0000000000..301cd29207 --- /dev/null +++ b/rustdocs/defaults/index.html @@ -0,0 +1,48 @@ +defaults - Rust

Crate defaults

source ·
Expand description

Default data for Vault +and Vault-supporting ecosystem.

+

This crate deals with data loaded into Vault on build and retained on reset.

+

Vault supports by default three networks: Polkadot, Kusama, and Westend, +both on the cold and the hot side. More default networks could be considered +in the future.

+

Defaults in the cold database

+

Default build of the cold database for Vault includes:

+
    +
  • general verifier Verifier set to Some(VerifierValue) with Parity +public key as a verifier value
  • +
  • network specs OrderedNetworkSpecs for default networks
  • +
  • verifiers for default networks, set to +CurrentVerifier::Valid(ValidCurrentVerifier::General)
  • +
  • two latest metadata versions for each of the default networks
  • +
  • default types information
  • +
+

Latest metadata entries get updated as soon as they are published and could +be fetched via RPC calls. For this, new metadata entry is added into +release_metadata folder, and older one is removed.

+

Defaults in the hot database

+

Default hot database contains:

+
    +
  • network specs NetworkSpecs for default networks
  • +
  • address book containing the data for default networks
  • +
  • default types information
  • +
+

Features

+

Feature "signer" corresponds to everything related to Vault air-gapped +device. Currently the only Vault-related default is Verifier with Parity +public key, that could be set up as a general verifier after Vault wipe by +the user.

+

Feature "active" corresponds to all Vault-related things happening +without air-gap. This includes generating default:

+
    +
  • network specs sets for cold and hot databases
  • +
  • verifiers for cold databases
  • +
  • metadata sets for cold databases
  • +
  • address book for hot database
  • +
  • types information for cold and hot databases
  • +
+

Feature "test" includes both "signer" and "active" features, along +with some testing, and is the default one.

+

Enums

Constants

Functions

Type Definitions

\ No newline at end of file diff --git a/rustdocs/defaults/sidebar-items.js b/rustdocs/defaults/sidebar-items.js new file mode 100644 index 0000000000..eed5347bd2 --- /dev/null +++ b/rustdocs/defaults/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"constant":["DEFAULT_VERIFIER_PUBLIC"],"enum":["Error"],"fn":["default_address_book","default_chainspecs","default_chainspecs_to_send","default_general_verifier","default_types_content","default_types_vec","default_verifiers","nav_test_metadata","release_metadata","test_metadata"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/defaults/type.Result.html b/rustdocs/defaults/type.Result.html new file mode 100644 index 0000000000..c75309a0ae --- /dev/null +++ b/rustdocs/defaults/type.Result.html @@ -0,0 +1 @@ +Result in defaults - Rust

Type Definition defaults::Result

source ·
pub type Result<T> = Result<T, Error>;
\ No newline at end of file diff --git a/rustdocs/definitions/all.html b/rustdocs/definitions/all.html new file mode 100644 index 0000000000..9f4dfef108 --- /dev/null +++ b/rustdocs/definitions/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Structs

Enums

Functions

Type Definitions

\ No newline at end of file diff --git a/rustdocs/definitions/crypto/enum.Encryption.html b/rustdocs/definitions/crypto/enum.Encryption.html new file mode 100644 index 0000000000..033808fd89 --- /dev/null +++ b/rustdocs/definitions/crypto/enum.Encryption.html @@ -0,0 +1,163 @@ +Encryption in definitions::crypto - Rust
pub enum Encryption {
+    Ed25519,
+    Sr25519,
+    Ecdsa,
+    Ethereum,
+}
Expand description

Encryption algorithm

+

Lists all encryption algorithms supported by Substrate

+

Variants§

§

Ed25519

§

Sr25519

§

Ecdsa

§

Ethereum

Implementations§

source§

impl Encryption

source

pub fn show(&self) -> String

Display the encryption

+

This is used both in error printing and in json data exports

+
source

pub fn identicon_style(&self) -> IdenticonStyle

The style to use for identicons.

+

Dots ss58 +Blockies for ethereum h160 addrs.

+

Trait Implementations§

source§

impl Clone for Encryption

source§

fn clone(&self) -> Encryption

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Encryption

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for Encryption

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for Encryption

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<Encryption> for Encryption

source§

fn eq(&self, other: &Encryption) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl TryFrom<String> for Encryption

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(value: String) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Copy for Encryption

source§

impl EncodeLike<Encryption> for Encryption

source§

impl Eq for Encryption

source§

impl StructuralEq for Encryption

source§

impl StructuralPartialEq for Encryption

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/crypto/enum.SufficientCrypto.html b/rustdocs/definitions/crypto/enum.SufficientCrypto.html new file mode 100644 index 0000000000..119f5facf9 --- /dev/null +++ b/rustdocs/definitions/crypto/enum.SufficientCrypto.html @@ -0,0 +1,181 @@ +SufficientCrypto in definitions::crypto - Rust
pub enum SufficientCrypto {
+    Ed25519 {
+        public: Public,
+        signature: Signature,
+    },
+    Sr25519 {
+        public: Public,
+        signature: Signature,
+    },
+    Ecdsa {
+        public: Public,
+        signature: Signature,
+    },
+}
Expand description

Data sufficient to generate signed update

+

Contains public key and signature for data within certain encryption +algorithm.

+

Stores no information on what data exactly is signed, supposedly user +keeps track of what they are signing.

+

Variants§

§

Ed25519

Fields

§public: Public

public key of the signature author

+
§signature: Signature

signature for the data

+

Ed25519 encryption algorithm

+
§

Sr25519

Fields

§public: Public

public key of the signature author

+
§signature: Signature

signature for the data

+

Sr25519 encryption algorithm

+
§

Ecdsa

Fields

§public: Public

public key of the signature author

+
§signature: Signature

signature for the data

+

Ecdsa encryption algorithm

+

Implementations§

source§

impl SufficientCrypto

source

pub fn verifier_value(&self) -> VerifierValue

Get VerifierValue from public key part of SufficientCrypto

+
source

pub fn multi_signature(&self) -> MultiSignature

Get MultiSignature +from signature part of SufficientCrypto

+

Trait Implementations§

source§

impl Clone for SufficientCrypto

source§

fn clone(&self) -> SufficientCrypto

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SufficientCrypto

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for SufficientCrypto

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for SufficientCrypto

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<SufficientCrypto> for SufficientCrypto

source§

fn eq(&self, other: &SufficientCrypto) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<SufficientCrypto> for SufficientCrypto

source§

impl Eq for SufficientCrypto

source§

impl StructuralEq for SufficientCrypto

source§

impl StructuralPartialEq for SufficientCrypto

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/crypto/index.html b/rustdocs/definitions/crypto/index.html new file mode 100644 index 0000000000..a9d822d0a8 --- /dev/null +++ b/rustdocs/definitions/crypto/index.html @@ -0,0 +1,59 @@ +definitions::crypto - Rust

Module definitions::crypto

source ·
Expand description

Encryption-related types with public information

+

Vault supports all three encryption algorithms currently used by the +Substrate: Ed25519, Sr25519, and Ecdsa.

+

In addition to MultiSigner +and MultiSignature, +Vault uses similarly structured enums Encryption with only encryption +algorithm information and SufficientCrypto with encryption, public key +and data signature combined.

+

Networks are expected to use certain encryption algorithm Encryption. +This is reflected in OrderedNetworkSpecs +and in NetworkSpecs +field encryption, and also in corresponding database keys +NetworkSpecsKey. +In principle, network could support more than one encryption algorithm, +in this case there would be more than one database entry for the network +specs with different keys.
+Default networks (Polkadot, Kusama, and Westend) all operate with Sr25519 +encryption.

+

Each address in Vault has an associated encryption algorithm +Encryption. This is reflected in AddressDetails +field encryption and in corresponding database key +AddressKey. Address is associated with a +network, and only matching Encryption is allowed. +Address is generated from seed phrase and derivation, public keys produced +for different encryption algorithms with same seed phrase and derivation +are totally different.

+

Both general verifier and each individual network +CurrentVerifier also have +associated Encryption. Encryption algorithm used by verifiers could be +different from the one used by the network they are verifying, it is used +only to check the validity of the signed update.

+

Vault receives Substrate transactions starting in hexadecimal recording +with 53xxyy where xx corresponds to the encryption type.

+

Possible signature schemes are:

+
    +
  • 00 for Ed25519
  • +
  • 01 for Sr25519
  • +
  • 02 for Ecdsa
  • +
+

To be able to sign transaction in Vault, address producing transaction +must be associated with declared encryption algorithm and with transaction +network with. Also, transaction network must have entry in the database +having declared encryption algorithm.

+

Updating transaction, in addition to three variants above, also may be +unsigned, with ff as an encryption piece. ff means only that no +signature is provided, it has no corresponding value in Encryption.

+

SufficientCrypto is a construction that could be created in Vault +and exported through static QR code. It contains encryption algorithm, +public key and corresponding signature for some data. Data could be network +specs, network metadata, or types information, that is loaded into Vault. +The information in SufficientCrypto is sufficient to verify the updating +payload validity elsewhere.

+

This way Vault user can produce verified updating transactions with +own signatures.

+

SufficientCrypto could be used by the hot-side client to generate QR +codes with updating payloads signed by an address from Vault.

+

Vault keeps track of the generated SufficientCrypto QR codes in +history log.

+

Enums

\ No newline at end of file diff --git a/rustdocs/definitions/crypto/sidebar-items.js b/rustdocs/definitions/crypto/sidebar-items.js new file mode 100644 index 0000000000..4338a0067a --- /dev/null +++ b/rustdocs/definitions/crypto/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Encryption","SufficientCrypto"]}; \ No newline at end of file diff --git a/rustdocs/definitions/danger/index.html b/rustdocs/definitions/danger/index.html new file mode 100644 index 0000000000..b4ceee3249 --- /dev/null +++ b/rustdocs/definitions/danger/index.html @@ -0,0 +1,9 @@ +definitions::danger - Rust

Module definitions::danger

source ·
Expand description

Record of the Vault exposure to dangerous events

+

Vault potentially dangerous exposures are recorded in SETTREE as +encoded DangerRecord under key DANGER.

+

Vault should stay offline (i.e. air-gapped) throughout its usage.

+

In case Vault finds itself online, it records this in the database +danger record and generates log entry in HISTORY tree.

+

DangerRecord could be reset only by designated reset function, and the +fact of the reset is also recorded in the history log.

+

Structs

\ No newline at end of file diff --git a/rustdocs/definitions/danger/sidebar-items.js b/rustdocs/definitions/danger/sidebar-items.js new file mode 100644 index 0000000000..6d88e69f38 --- /dev/null +++ b/rustdocs/definitions/danger/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["DangerRecord"]}; \ No newline at end of file diff --git a/rustdocs/definitions/danger/struct.DangerRecord.html b/rustdocs/definitions/danger/struct.DangerRecord.html new file mode 100644 index 0000000000..82e1b34841 --- /dev/null +++ b/rustdocs/definitions/danger/struct.DangerRecord.html @@ -0,0 +1,127 @@ +DangerRecord in definitions::danger - Rust
pub struct DangerRecord(_);
Expand description

Danger status in the Vault database

+

Indicates if the Vault has a record of unsafe exposure.

+

Implementations§

source§

impl DangerRecord

source

pub fn safe() -> Self

Set danger record to “safe”.

+

Switch all exposure flags to false.

+
source

pub fn set_was_online() -> Self

Set device_was_online exposure flag to true.

+

Having device_was_online flag true makes danger record “not safe”.

+
source

pub fn from_ivec(ivec: &IVec) -> Self

Get DangerRecord with content from the encoded value, +as it is stored in the database.

+

Infallible, as the validity of the value is not checked.

+
source

pub fn device_was_online(&self) -> Result<bool>

Get the value of device_was_online flag from DangerRecord.

+

Could result in error if the DangerRecord content is corrupted.

+
source

pub fn store(&self) -> Vec<u8>

Transform DangerRecord into Vec<u8> to put in the database.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/derivations/enum.DerivedKeyError.html b/rustdocs/definitions/derivations/enum.DerivedKeyError.html new file mode 100644 index 0000000000..0c7fb812d1 --- /dev/null +++ b/rustdocs/definitions/derivations/enum.DerivedKeyError.html @@ -0,0 +1,129 @@ +DerivedKeyError in definitions::derivations - Rust
pub enum DerivedKeyError {
+    NetworkMissing,
+    KeySetMissing,
+    BadFormat,
+}

Variants§

§

NetworkMissing

Network specs were not imported into the Vault

+
§

KeySetMissing

Seed is not in the Vault

+
§

BadFormat

Bad format of the derivation path

+

Trait Implementations§

source§

impl Clone for DerivedKeyError

source§

fn clone(&self) -> DerivedKeyError

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DerivedKeyError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DerivedKeyError> for DerivedKeyError

source§

fn eq(&self, other: &DerivedKeyError) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DerivedKeyError

source§

impl StructuralEq for DerivedKeyError

source§

impl StructuralPartialEq for DerivedKeyError

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/derivations/enum.DerivedKeyStatus.html b/rustdocs/definitions/derivations/enum.DerivedKeyStatus.html new file mode 100644 index 0000000000..71daa2afc9 --- /dev/null +++ b/rustdocs/definitions/derivations/enum.DerivedKeyStatus.html @@ -0,0 +1,130 @@ +DerivedKeyStatus in definitions::derivations - Rust
pub enum DerivedKeyStatus {
+    Importable,
+    AlreadyExists,
+    Invalid {
+        errors: Vec<DerivedKeyError>,
+    },
+}

Variants§

§

Importable

Key can be imported into the Vault

+
§

AlreadyExists

Key is already into the Vault. Unable to determine for a key with password

+
§

Invalid

Fields

Trait Implementations§

source§

impl Clone for DerivedKeyStatus

source§

fn clone(&self) -> DerivedKeyStatus

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DerivedKeyStatus

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DerivedKeyStatus> for DerivedKeyStatus

source§

fn eq(&self, other: &DerivedKeyStatus) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DerivedKeyStatus

source§

impl StructuralEq for DerivedKeyStatus

source§

impl StructuralPartialEq for DerivedKeyStatus

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/derivations/index.html b/rustdocs/definitions/derivations/index.html new file mode 100644 index 0000000000..f6a306eec7 --- /dev/null +++ b/rustdocs/definitions/derivations/index.html @@ -0,0 +1 @@ +definitions::derivations - Rust
\ No newline at end of file diff --git a/rustdocs/definitions/derivations/sidebar-items.js b/rustdocs/definitions/derivations/sidebar-items.js new file mode 100644 index 0000000000..eb3c213c67 --- /dev/null +++ b/rustdocs/definitions/derivations/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["DerivedKeyError","DerivedKeyStatus"],"struct":["DerivedKeyPreview","SeedKeysPreview"]}; \ No newline at end of file diff --git a/rustdocs/definitions/derivations/struct.DerivedKeyPreview.html b/rustdocs/definitions/derivations/struct.DerivedKeyPreview.html new file mode 100644 index 0000000000..0ab4e57de8 --- /dev/null +++ b/rustdocs/definitions/derivations/struct.DerivedKeyPreview.html @@ -0,0 +1,139 @@ +DerivedKeyPreview in definitions::derivations - Rust
pub struct DerivedKeyPreview {
+    pub address: String,
+    pub derivation_path: Option<String>,
+    pub encryption: Encryption,
+    pub genesis_hash: H256,
+    pub identicon: Identicon,
+    pub has_pwd: Option<bool>,
+    pub network_title: Option<String>,
+    pub status: DerivedKeyStatus,
+}

Fields§

§address: String

Address in the network.

+

This is either ss58 form for substrate-based chains or +h160 form for ethereum based chains

+
§derivation_path: Option<String>

The derivation path of the key if user provided one

+
§encryption: Encryption

The type of encryption in the network

+
§genesis_hash: H256

Genesis hash

+
§identicon: Identicon§has_pwd: Option<bool>

Has to be calculated using inject_derivations_has_pwd. Otherwise, None

+
§network_title: Option<String>

Might be None if network specs were not imported into the Vault

+
§status: DerivedKeyStatus

Trait Implementations§

source§

impl Clone for DerivedKeyPreview

source§

fn clone(&self) -> DerivedKeyPreview

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DerivedKeyPreview

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DerivedKeyPreview> for DerivedKeyPreview

source§

fn eq(&self, other: &DerivedKeyPreview) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DerivedKeyPreview

source§

impl StructuralEq for DerivedKeyPreview

source§

impl StructuralPartialEq for DerivedKeyPreview

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/derivations/struct.SeedKeysPreview.html b/rustdocs/definitions/derivations/struct.SeedKeysPreview.html new file mode 100644 index 0000000000..8dc27a74b4 --- /dev/null +++ b/rustdocs/definitions/derivations/struct.SeedKeysPreview.html @@ -0,0 +1,129 @@ +SeedKeysPreview in definitions::derivations - Rust
pub struct SeedKeysPreview {
+    pub name: String,
+    pub multisigner: MultiSigner,
+    pub derived_keys: Vec<DerivedKeyPreview>,
+}

Fields§

§name: String

Name of the seed.

+
§multisigner: MultiSigner

Public key of the root key.

+
§derived_keys: Vec<DerivedKeyPreview>

Derived keys.

+

Trait Implementations§

source§

impl Clone for SeedKeysPreview

source§

fn clone(&self) -> SeedKeysPreview

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SeedKeysPreview

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<SeedKeysPreview> for SeedKeysPreview

source§

fn eq(&self, other: &SeedKeysPreview) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for SeedKeysPreview

source§

impl StructuralEq for SeedKeysPreview

source§

impl StructuralPartialEq for SeedKeysPreview

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/enum.DynamicDerivationsAddressResponse.html b/rustdocs/definitions/dynamic_derivations/enum.DynamicDerivationsAddressResponse.html new file mode 100644 index 0000000000..b842af3de5 --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/enum.DynamicDerivationsAddressResponse.html @@ -0,0 +1,153 @@ +DynamicDerivationsAddressResponse in definitions::dynamic_derivations - Rust
pub enum DynamicDerivationsAddressResponse {
+    V1(DynamicDerivationsAddressResponseV1),
+}

Variants§

Trait Implementations§

source§

impl Clone for DynamicDerivationsAddressResponse

source§

fn clone(&self) -> DynamicDerivationsAddressResponse

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationsAddressResponse

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationsAddressResponse

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationsAddressResponse

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationsAddressResponse> for DynamicDerivationsAddressResponse

source§

fn eq(&self, other: &DynamicDerivationsAddressResponse) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationsAddressResponse> for DynamicDerivationsAddressResponse

source§

impl Eq for DynamicDerivationsAddressResponse

source§

impl StructuralEq for DynamicDerivationsAddressResponse

source§

impl StructuralPartialEq for DynamicDerivationsAddressResponse

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/enum.DynamicDerivationsRequest.html b/rustdocs/definitions/dynamic_derivations/enum.DynamicDerivationsRequest.html new file mode 100644 index 0000000000..4a2ed3190a --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/enum.DynamicDerivationsRequest.html @@ -0,0 +1,153 @@ +DynamicDerivationsRequest in definitions::dynamic_derivations - Rust
pub enum DynamicDerivationsRequest {
+    V1(DynamicDerivationsAddressRequestV1),
+}

Variants§

Trait Implementations§

source§

impl Clone for DynamicDerivationsRequest

source§

fn clone(&self) -> DynamicDerivationsRequest

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationsRequest

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationsRequest

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationsRequest

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationsRequest> for DynamicDerivationsRequest

source§

fn eq(&self, other: &DynamicDerivationsRequest) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationsRequest> for DynamicDerivationsRequest

source§

impl Eq for DynamicDerivationsRequest

source§

impl StructuralEq for DynamicDerivationsRequest

source§

impl StructuralPartialEq for DynamicDerivationsRequest

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/index.html b/rustdocs/definitions/dynamic_derivations/index.html new file mode 100644 index 0000000000..76efcd4e6c --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/index.html @@ -0,0 +1 @@ +definitions::dynamic_derivations - Rust
\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/sidebar-items.js b/rustdocs/definitions/dynamic_derivations/sidebar-items.js new file mode 100644 index 0000000000..95eb4c77e2 --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["DynamicDerivationsAddressResponse","DynamicDerivationsRequest"],"struct":["DynamicDerivationRequestInfo","DynamicDerivationResponseInfo","DynamicDerivationsAddressRequestV1","DynamicDerivationsAddressResponseV1","DynamicDerivationsRequestInfo","DynamicDerivationsResponseInfo"]}; \ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationRequestInfo.html b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationRequestInfo.html new file mode 100644 index 0000000000..14d7f854ff --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationRequestInfo.html @@ -0,0 +1,158 @@ +DynamicDerivationRequestInfo in definitions::dynamic_derivations - Rust
pub struct DynamicDerivationRequestInfo {
+    pub derivation_path: String,
+    pub encryption: Encryption,
+    pub genesis_hash: H256,
+}

Fields§

§derivation_path: String

Dynamic derivation path

+
§encryption: Encryption

The type of encryption in the network

+
§genesis_hash: H256

Genesis hash of the network for the dynamic derivation

+

Trait Implementations§

source§

impl Clone for DynamicDerivationRequestInfo

source§

fn clone(&self) -> DynamicDerivationRequestInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationRequestInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationRequestInfo

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationRequestInfo

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationRequestInfo> for DynamicDerivationRequestInfo

source§

fn eq(&self, other: &DynamicDerivationRequestInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationRequestInfo> for DynamicDerivationRequestInfo

source§

impl Eq for DynamicDerivationRequestInfo

source§

impl StructuralEq for DynamicDerivationRequestInfo

source§

impl StructuralPartialEq for DynamicDerivationRequestInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationResponseInfo.html b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationResponseInfo.html new file mode 100644 index 0000000000..4f3429cd86 --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationResponseInfo.html @@ -0,0 +1,158 @@ +DynamicDerivationResponseInfo in definitions::dynamic_derivations - Rust
pub struct DynamicDerivationResponseInfo {
+    pub derivation_path: String,
+    pub encryption: Encryption,
+    pub public_key: MultiSigner,
+}

Fields§

§derivation_path: String

Dynamic derivation path

+
§encryption: Encryption

The type of encryption in the network

+
§public_key: MultiSigner

Public key of the derivation path. The address may be derived from it.

+

Trait Implementations§

source§

impl Clone for DynamicDerivationResponseInfo

source§

fn clone(&self) -> DynamicDerivationResponseInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationResponseInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationResponseInfo

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationResponseInfo

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationResponseInfo> for DynamicDerivationResponseInfo

source§

fn eq(&self, other: &DynamicDerivationResponseInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationResponseInfo> for DynamicDerivationResponseInfo

source§

impl Eq for DynamicDerivationResponseInfo

source§

impl StructuralEq for DynamicDerivationResponseInfo

source§

impl StructuralPartialEq for DynamicDerivationResponseInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsAddressRequestV1.html b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsAddressRequestV1.html new file mode 100644 index 0000000000..d0f82fb960 --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsAddressRequestV1.html @@ -0,0 +1,155 @@ +DynamicDerivationsAddressRequestV1 in definitions::dynamic_derivations - Rust
pub struct DynamicDerivationsAddressRequestV1 {
+    pub addr: DynamicDerivationsRequestInfo,
+}

Fields§

§addr: DynamicDerivationsRequestInfo

Trait Implementations§

source§

impl Clone for DynamicDerivationsAddressRequestV1

source§

fn clone(&self) -> DynamicDerivationsAddressRequestV1

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationsAddressRequestV1

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationsAddressRequestV1

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationsAddressRequestV1

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationsAddressRequestV1> for DynamicDerivationsAddressRequestV1

source§

fn eq(&self, other: &DynamicDerivationsAddressRequestV1) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationsAddressRequestV1> for DynamicDerivationsAddressRequestV1

source§

impl Eq for DynamicDerivationsAddressRequestV1

source§

impl StructuralEq for DynamicDerivationsAddressRequestV1

source§

impl StructuralPartialEq for DynamicDerivationsAddressRequestV1

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsAddressResponseV1.html b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsAddressResponseV1.html new file mode 100644 index 0000000000..bdbec3ab3e --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsAddressResponseV1.html @@ -0,0 +1,155 @@ +DynamicDerivationsAddressResponseV1 in definitions::dynamic_derivations - Rust
pub struct DynamicDerivationsAddressResponseV1 {
+    pub addr: DynamicDerivationsResponseInfo,
+}

Fields§

§addr: DynamicDerivationsResponseInfo

Trait Implementations§

source§

impl Clone for DynamicDerivationsAddressResponseV1

source§

fn clone(&self) -> DynamicDerivationsAddressResponseV1

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationsAddressResponseV1

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationsAddressResponseV1

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationsAddressResponseV1

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationsAddressResponseV1> for DynamicDerivationsAddressResponseV1

source§

fn eq(&self, other: &DynamicDerivationsAddressResponseV1) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationsAddressResponseV1> for DynamicDerivationsAddressResponseV1

source§

impl Eq for DynamicDerivationsAddressResponseV1

source§

impl StructuralEq for DynamicDerivationsAddressResponseV1

source§

impl StructuralPartialEq for DynamicDerivationsAddressResponseV1

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsRequestInfo.html b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsRequestInfo.html new file mode 100644 index 0000000000..2cf0ee4f90 --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsRequestInfo.html @@ -0,0 +1,155 @@ +DynamicDerivationsRequestInfo in definitions::dynamic_derivations - Rust
pub struct DynamicDerivationsRequestInfo {
+    pub multisigner: MultiSigner,
+    pub dynamic_derivations: Vec<DynamicDerivationRequestInfo>,
+}

Fields§

§multisigner: MultiSigner

Public key of the root key

+
§dynamic_derivations: Vec<DynamicDerivationRequestInfo>

Trait Implementations§

source§

impl Clone for DynamicDerivationsRequestInfo

source§

fn clone(&self) -> DynamicDerivationsRequestInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationsRequestInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationsRequestInfo

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationsRequestInfo

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationsRequestInfo> for DynamicDerivationsRequestInfo

source§

fn eq(&self, other: &DynamicDerivationsRequestInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationsRequestInfo> for DynamicDerivationsRequestInfo

source§

impl Eq for DynamicDerivationsRequestInfo

source§

impl StructuralEq for DynamicDerivationsRequestInfo

source§

impl StructuralPartialEq for DynamicDerivationsRequestInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsResponseInfo.html b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsResponseInfo.html new file mode 100644 index 0000000000..883670644d --- /dev/null +++ b/rustdocs/definitions/dynamic_derivations/struct.DynamicDerivationsResponseInfo.html @@ -0,0 +1,155 @@ +DynamicDerivationsResponseInfo in definitions::dynamic_derivations - Rust
pub struct DynamicDerivationsResponseInfo {
+    pub multisigner: MultiSigner,
+    pub dynamic_derivations: Vec<DynamicDerivationResponseInfo>,
+}

Fields§

§multisigner: MultiSigner

Public key of the root key

+
§dynamic_derivations: Vec<DynamicDerivationResponseInfo>

Trait Implementations§

source§

impl Clone for DynamicDerivationsResponseInfo

source§

fn clone(&self) -> DynamicDerivationsResponseInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DynamicDerivationsResponseInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for DynamicDerivationsResponseInfo

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for DynamicDerivationsResponseInfo

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<DynamicDerivationsResponseInfo> for DynamicDerivationsResponseInfo

source§

fn eq(&self, other: &DynamicDerivationsResponseInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<DynamicDerivationsResponseInfo> for DynamicDerivationsResponseInfo

source§

impl Eq for DynamicDerivationsResponseInfo

source§

impl StructuralEq for DynamicDerivationsResponseInfo

source§

impl StructuralPartialEq for DynamicDerivationsResponseInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/error/enum.Error.html b/rustdocs/definitions/error/enum.Error.html new file mode 100644 index 0000000000..f1f6d27993 --- /dev/null +++ b/rustdocs/definitions/error/enum.Error.html @@ -0,0 +1,172 @@ +Error in definitions::error - Rust

Enum definitions::error::Error

source ·
pub enum Error {
+
Show 14 variants HexDecodingError(FromHexError), + CodecError(Error), + Wasm(Wasm), + Ss58(PublicError), + Io(Error), + LibSecp(Error), + WrongPublicKeyLength, + EncryptionMismatch { + address_key: AddressKey, + encryption: Encryption, + }, + SpecsGenesisHashMismatch { + network_specs_key: NetworkSpecsKey, + genesis_hash: H256, + }, + SpecsToSendEncryptionMismatch { + network_specs_key: NetworkSpecsKey, + encryption: Encryption, + }, + SpecsToSendGenesisHash { + network_specs_key: NetworkSpecsKey, + genesis_hash: H256, + }, + MetadataError(MetadataError), + MetadataMismatch { + this_name: String, + this_version: u32, + that_name: String, + that_version: u32, + }, + UnknownEncryption(String), +
}

Variants§

§

HexDecodingError(FromHexError)

§

CodecError(Error)

§

Wasm(Wasm)

§

Ss58(PublicError)

§

Io(Error)

§

LibSecp(Error)

§

WrongPublicKeyLength

Received public key length is different from the one expected for +given encryption algorithm.

+
§

EncryptionMismatch

Fields

§address_key: AddressKey
§encryption: Encryption

Error when there is encryption mismatch between one of +NetworkSpecsKey in network_id field of AddressDetails and the +encryption field of AddressDetails

+
§

SpecsGenesisHashMismatch

Fields

§network_specs_key: NetworkSpecsKey
§genesis_hash: H256

NetworkSpecsKey is built using network genesis hash and Encryption. +OrderedNetworkSpecs entry stored under +this NetworkSpecsKey in SPECSTREE tree of the cold database +contains genesis_hash field with a different genesis hash.

+
§

SpecsToSendEncryptionMismatch

Fields

§network_specs_key: NetworkSpecsKey
§encryption: Encryption

NetworkSpecsKey is built using network genesis hash and Encryption. +NetworkSpecs entry +stored under this NetworkSpecsKey in SPECSTREEPREP tree of the hot +database contains encryption field with a different Encryption.

+
§

SpecsToSendGenesisHash

Fields

§network_specs_key: NetworkSpecsKey
§genesis_hash: H256

NetworkSpecsKey is built using network genesis hash and Encryption. +NetworkSpecs entry +stored under this NetworkSpecsKey in SPECSTREEPREP tree of the hot +database contains genesis_hash field with a different genesis hash.

+
§

MetadataError(MetadataError)

§

MetadataMismatch

Fields

§this_name: String
§this_version: u32
§that_name: String
§that_version: u32

Network name and/or network version in MetaKey do not match the +network name and network version from Version constant, System +pallet of the metadata stored under this MetaKey.

+

Error could be encountered only in the hot database.

+
§

UnknownEncryption(String)

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<FromHexError> for Error

source§

fn from(source: FromHexError) -> Self

Converts to this type from the input type.
source§

impl From<MetadataError> for Error

source§

fn from(source: MetadataError) -> Self

Converts to this type from the input type.
source§

impl From<PublicError> for Error

source§

fn from(source: PublicError) -> Self

Converts to this type from the input type.
source§

impl From<Wasm> for Error

source§

fn from(source: Wasm) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/definitions/error/enum.MetadataError.html b/rustdocs/definitions/error/enum.MetadataError.html new file mode 100644 index 0000000000..6a1bde4782 --- /dev/null +++ b/rustdocs/definitions/error/enum.MetadataError.html @@ -0,0 +1,154 @@ +MetadataError in definitions::error - Rust
pub enum MetadataError {
+    VersionIncompatible,
+    NoSystemPallet,
+    NoVersionInConstants,
+    RuntimeVersionNotDecodeable,
+    Base58PrefixNotDecodeable,
+    Base58PrefixSpecsMismatch {
+        specs: u16,
+        meta: u16,
+    },
+    NotMeta,
+    UnableToDecode,
+}
Expand description

Intrinsic problems of the metadata making it unsuitable for Vault use

+

Variants§

§

VersionIncompatible

Supported are V12, V13, and V14 versions of +RuntimeMetadata.

+

Any other version results in error.

+
§

NoSystemPallet

Metadata does not have System pallet, i.e. there is no place to look +for network +RuntimeVersion

+
§

NoVersionInConstants

Metadata does not have Version constant in System pallet, i.e. +there is no place to look for network +RuntimeVersion

+
§

RuntimeVersionNotDecodeable

Vec<u8> retrieved from Version constant in System pallet could +not be decoded as +RuntimeVersion

+
§

Base58PrefixNotDecodeable

Metadata has SS58Prefix constant in System pallet, but its content +could not be decoded as valid base58 prefix, i.e. as u16 or u8 +number

+
§

Base58PrefixSpecsMismatch

Fields

§specs: u16
§meta: u16

Base58 prefix from metadata (meta) does not match base58 prefix in specs (specs)

+
§

NotMeta

Metadata first 4 bytes are not expected b"meta" prelude

+
§

UnableToDecode

Metadata body (after b"meta" prelude) could not be decoded as +RuntimeMetadata

+

Trait Implementations§

source§

impl Debug for MetadataError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for MetadataError

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for MetadataError

1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<MetadataError> for Error

source§

fn from(source: MetadataError) -> Self

Converts to this type from the input type.
source§

impl From<MetadataError> for Wasm

source§

fn from(source: MetadataError) -> Self

Converts to this type from the input type.
source§

impl PartialEq<MetadataError> for MetadataError

source§

fn eq(&self, other: &MetadataError) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for MetadataError

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/error/enum.TransferContent.html b/rustdocs/definitions/error/enum.TransferContent.html new file mode 100644 index 0000000000..9af87fffa1 --- /dev/null +++ b/rustdocs/definitions/error/enum.TransferContent.html @@ -0,0 +1,129 @@ +TransferContent in definitions::error - Rust
pub enum TransferContent {
+    AddSpecs,
+    LoadMeta,
+    LoadTypes,
+}
Expand description

Error decoding transfer content

+

All variants could be encountered both on the active side +(when checking the message content while signing it) +and on the Vault side (when processing the received messages)

+

Variants§

§

AddSpecs

add_specs message content

+
§

LoadMeta

load_metadata message content

+
§

LoadTypes

load_types message content

+

Implementations§

source§

impl TransferContent

source

pub fn show(&self) -> String

Display TransferContent in readable form

+

Trait Implementations§

source§

impl Debug for TransferContent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/error/index.html b/rustdocs/definitions/error/index.html new file mode 100644 index 0000000000..47e4d91f8e --- /dev/null +++ b/rustdocs/definitions/error/index.html @@ -0,0 +1 @@ +definitions::error - Rust

Module definitions::error

source ·

Enums

Type Definitions

\ No newline at end of file diff --git a/rustdocs/definitions/error/sidebar-items.js b/rustdocs/definitions/error/sidebar-items.js new file mode 100644 index 0000000000..b822f11ee8 --- /dev/null +++ b/rustdocs/definitions/error/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Error","MetadataError","TransferContent"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/definitions/error/type.Result.html b/rustdocs/definitions/error/type.Result.html new file mode 100644 index 0000000000..efe2ace11c --- /dev/null +++ b/rustdocs/definitions/error/type.Result.html @@ -0,0 +1 @@ +Result in definitions::error - Rust

Type Definition definitions::error::Result

source ·
pub type Result<T> = Result<T, Error>;
\ No newline at end of file diff --git a/rustdocs/definitions/error_active/enum.Check.html b/rustdocs/definitions/error_active/enum.Check.html new file mode 100644 index 0000000000..40515c8d35 --- /dev/null +++ b/rustdocs/definitions/error_active/enum.Check.html @@ -0,0 +1,125 @@ +Check in definitions::error_active - Rust
pub enum Check {
+    FaultyMetadata(MetadataError),
+    MetadataFile(Error),
+}
Expand description

Error checking metadata file

+

Variants§

§

FaultyMetadata(MetadataError)

Metadata extracted from the metadata file is not suitable to be used in +Vault.

+

Associated data is MetadataError specifying what exactly is wrong +with the metadata.

+
§

MetadataFile(Error)

Unable to read directory with default metadata

+

Trait Implementations§

source§

impl Debug for Check

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Check

§

impl Send for Check

§

impl Sync for Check

§

impl Unpin for Check

§

impl !UnwindSafe for Check

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

\ No newline at end of file diff --git a/rustdocs/definitions/error_active/enum.Wasm.html b/rustdocs/definitions/error_active/enum.Wasm.html new file mode 100644 index 0000000000..70ece54c45 --- /dev/null +++ b/rustdocs/definitions/error_active/enum.Wasm.html @@ -0,0 +1,134 @@ +Wasm in definitions::error_active - Rust
pub enum Wasm {
+    Executor(Error),
+    DecodingMetadata,
+    FaultyMetadata(MetadataError),
+    File(Error),
+    WasmError(WasmError),
+}
Expand description

Errors with wasm files processing

+

Variants§

§

Executor(Error)

Failed to make Metadata_metadata call on data extracted from wasm +file.

+
§

DecodingMetadata

Metadata extracted from wasm file could not be decoded.

+
§

FaultyMetadata(MetadataError)

Metadata extracted from wasm file is not suitable to be used in +Vault.

+

Associated data is MetadataError specifying what exactly is wrong +with the metadata.

+
§

File(Error)

Error reading wasm file.

+
§

WasmError(WasmError)

Trait Implementations§

source§

impl Debug for Wasm

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Wasm

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Wasm

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Wasm

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Wasm

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<MetadataError> for Wasm

source§

fn from(source: MetadataError) -> Self

Converts to this type from the input type.
source§

impl From<Wasm> for Error

source§

fn from(source: Wasm) -> Self

Converts to this type from the input type.
source§

impl From<WasmError> for Wasm

source§

fn from(source: WasmError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Wasm

§

impl Send for Wasm

§

impl Sync for Wasm

§

impl Unpin for Wasm

§

impl !UnwindSafe for Wasm

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/definitions/error_active/index.html b/rustdocs/definitions/error_active/index.html new file mode 100644 index 0000000000..89c1a0359f --- /dev/null +++ b/rustdocs/definitions/error_active/index.html @@ -0,0 +1,7 @@ +definitions::error_active - Rust
Expand description

Errors occurring on the active side, i.e. while operating generate_message +client

+

Active side deals with both preparation of cold database that would be +loaded in Vault on build and with hot database operations. Cold database +could be the release cold database (the actual one for Vault build) or +the test cold database (with test Alice identities, used for tests).

+

Enums

  • Error checking metadata file
  • Errors with wasm files processing
\ No newline at end of file diff --git a/rustdocs/definitions/error_active/sidebar-items.js b/rustdocs/definitions/error_active/sidebar-items.js new file mode 100644 index 0000000000..a762503895 --- /dev/null +++ b/rustdocs/definitions/error_active/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Check","Wasm"]}; \ No newline at end of file diff --git a/rustdocs/definitions/error_signer/enum.GeneralVerifierForContent.html b/rustdocs/definitions/error_signer/enum.GeneralVerifierForContent.html new file mode 100644 index 0000000000..7fbc9657a5 --- /dev/null +++ b/rustdocs/definitions/error_signer/enum.GeneralVerifierForContent.html @@ -0,0 +1,128 @@ +GeneralVerifierForContent in definitions::error_signer - Rust
pub enum GeneralVerifierForContent {
+    Network {
+        name: String,
+    },
+    Types,
+}
Expand description

Content that should have been verified by the general verifier

+

Variants§

§

Network

Fields

§name: String

Network data. +Associated data is the network name.

+
§

Types

Types information.

+

Trait Implementations§

source§

impl Debug for GeneralVerifierForContent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<GeneralVerifierForContent> for GeneralVerifierForContent

source§

fn eq(&self, other: &GeneralVerifierForContent) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for GeneralVerifierForContent

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/error_signer/enum.ParserDecodingError.html b/rustdocs/definitions/error_signer/enum.ParserDecodingError.html new file mode 100644 index 0000000000..68d1be15e2 --- /dev/null +++ b/rustdocs/definitions/error_signer/enum.ParserDecodingError.html @@ -0,0 +1,310 @@ +ParserDecodingError in definitions::error_signer - Rust
pub enum ParserDecodingError {
+
Show 26 variants UnexpectedImmortality, + UnexpectedMortality, + GenesisHashMismatch, + ImmortalHashMismatch, + ExtensionsOlder, + MethodNotFound { + method_index: u8, + pallet_name: String, + }, + PalletNotFound(u8), + NoCallsInPallet(String), + V14TypeNotResolved, + ArgumentTypeError, + ArgumentNameError, + NoCompact, + DataTooShort, + PrimitiveFailure(String), + UnexpectedOptionVariant, + IdFields, + BalanceNotDescribed, + UnexpectedEnumVariant, + UnexpectedCompactInsides, + UnknownType(String), + NotBitStoreType, + NotBitOrderType, + BitVecFailure, + Era, + SomeDataNotUsedMethod, + SomeDataNotUsedExtensions, +
}
Expand description

Errors directly related to transaction parsing

+

Signable transactions are differentiated based on prelude:

+
    +
  • 53xx00 mortal transactions
  • +
  • 53xx02 immortal transactions
  • +
  • 53xx03 text message transactions
  • +
+

53xx00 and 53xx02 transactions contain encoded transaction data, and +are parsed prior to signing using the network metadata. Transaction is +generated in client, for certain address and within certain network. +To parse the transaction and to generate the signature, Vault must +have the network information (network specs and correct network metadata) +and the public address-associated information in its database.

+

53xx00 and 53xx02 transcations consist of:

+
    +
  • prelude, 53xx00 or 53xx02, where xx stands for the encryption +algorithm associated with address and network used
  • +
  • public key corresponding to the address that can sign the transaction
  • +
  • encoded call data, the body of the transaction
  • +
  • extensions, as set in the network metadata
  • +
  • genesis hash of the network in which the transaction was generated
  • +
+

Parsing process first separates the prelude, public key, genesis hash and +the combined call + extensions data.

+

The call information is SCALE-encoded into Vec<u8> bytes and then those +bytes are SCALE-encoded again, so that the call data contained in the +transaction consists of compact with encoded call length in bytes +followed by the Vec<u8> with the encoded data.

+

Call and extensions are cut based on the call length declared at the start +of the combined call + extensions data.

+

Then the extensions are decoded, and it is checked that the metadata version +in extensions coincides with the metadata version used for the decoding.

+

Decoding the extensions for metadata with RuntimeMetadataV12 or +RuntimeMetadataV13 is using a static set of extensions, namely:

+
    +
  • Era
  • +
  • nonce, compact u64
  • +
  • transaction tip, compact u128
  • +
  • metadata version, u32
  • +
  • tx version, u32
  • +
  • network genesis hash, [u8; 32]
  • +
  • block hash, [u8; 32]
  • +
+

Decoding the extensions for metadata with RuntimeMetadataV14 uses +dynamically acquired set of extensions from the metadata itself.

+

After the extensions, the call data itself is decoded using the network +metadata. Each call first byte is the index of the pallet.

+

Metadata with RuntimeMetadataV12 or RuntimeMetadataV13 has only type +names associated with call arguments. Vault finds what the types really +are and how to decode them by using the types information that must be in +Vault database. +For RuntimeMetadataV12 or RuntimeMetadataV13 the second byte in call is +the index of the method within the pallet, and thes Vault finds the types +used by the method and proceeds to decode the call data piece by piece.

+

Metadata with RuntimeMetadataV14 has types data in-built in the metadata +itself, and the types needed to decode the call are resolved during the +decoding. For RuntimeMetadataV14 the second byte in call is also +the index of the method within the pallet, but this already goes into the +type resolver.

+

Calls may contain nested calls, for RuntimeMetadataV12 or +RuntimeMetadataV13 metadata the call decoding always starts with pallet +and method combination processing. For RuntimeMetadataV14 metadata the +nested calls are processed through the type resolver, i.e. the pallet index +is processed independently only on the start of the decoding.

+

53xx03 transaction consists of:

+
    +
  • prelude 53xx03, where xx stands for the encryption algorithm +associated with address and network used
  • +
  • public key corresponding to the address that can sign the transaction
  • +
  • SCALE-encoded String contents of the message
  • +
  • genesis hash of the network in which the transaction was generated
  • +
+

Vault assumes that every byte of the transaction will be processed, and +shows an error if this is not the case.

+

Variants§

§

UnexpectedImmortality

Transaction was announced by the prelude to be mortal (53xx00), +but has Era::Immortal in extensions

+
§

UnexpectedMortality

Transaction was announced by the prelude to be immortal (53xx02), +but has Era::Mortal(_, _) in extensions

+
§

GenesisHashMismatch

Genesis hash cut from the end of the transaction does not match the one +found in the extensions

+
§

ImmortalHashMismatch

In immortal transaction the block hash from the extensions is the +network genesis hash.

+

This error happens when block hash is different with the genesis hash +cut from the end of the transaction.

+
§

ExtensionsOlder

Error decoding the extensions using metadata with RuntimeMetadataV12 +or RuntimeMetadataV13, with default extensions set.

+
§

MethodNotFound

Fields

§method_index: u8

index of the method, second byte of the call data

+
§pallet_name: String

name of the pallet, found from the first byte of the call data

+

Used only for RuntimeMetadataV12 or RuntimeMetadataV13, +indicates that method index (second byte of the call data) is not valid +for the pallet with found name.

+
§

PalletNotFound(u8)

Used only for all calls in RuntimeMetadataV12 or RuntimeMetadataV13, +and for entry call in RuntimeMetadataV14 metadata. First byte of the +call data is not a valid pallet index.

+

Associated data is what was thought to be a pallet index.

+
§

NoCallsInPallet(String)

Only for entry call in RuntimeMetadataV14. Pallet found via first byte +of the call has no associated calls.

+

Associated data is the pallet name.

+
§

V14TypeNotResolved

Only for RuntimeMetadataV14. Found type index could not be resolved +in types registry

+
§

ArgumentTypeError

Only for RuntimeMetadataV12 and RuntimeMetadataV13. Argument type +could not be taken out of DecodeDifferent construction.

+
§

ArgumentNameError

Only for RuntimeMetadataV12 and RuntimeMetadataV13. Argument name +could not be taken out of DecodeDifferent construction.

+
§

NoCompact

Parser was trying to find an encoded +compact, +in the bytes sequence, but was unable to.

+
§

DataTooShort

Parser was expecting more data.

+
§

PrimitiveFailure(String)

Parser was unable to decode the data piece into a primitive type.

+

Associated data is primitive identifier.

+
§

UnexpectedOptionVariant

SCALE-encoded Option<_> can have as a first byte:

+
    +
  • 0 if the value is None
  • +
  • 1 if the value is Some
  • +
  • 2 if the value is Some(false) for Option<bool> encoding
  • +
+

This error appears if the parser encounters something unexpected in the +first byte of encoded Option<_> instead.

+
§

IdFields

Only for RuntimeMetadataV12 and RuntimeMetadataV13. +Decoding +IdentityFields +requires having correct type information for +IdentityField +in types information. If types information has no entry for +IdentityFields or it is not an enum, this error appears.

+
§

BalanceNotDescribed

Parser processes certain types as balance (i.e. transforms the data +into appropriate float using decimals and units provided). +For some types the balance representation is not possible, this error +occurs if the parser tried to process as a balance some type not +suitable for it.

+
§

UnexpectedEnumVariant

SCALE-encoded enum can have as a first byte only correct index of the +variant used.

+

This error appears if the first byte is an invalid variant index.

+
§

UnexpectedCompactInsides

Parser found that type declared as a +compact +has inner type that could not be encoded as a compact

+
§

UnknownType(String)

Only for RuntimeMetadataV12 and RuntimeMetadataV13. +Parser has encountered a type that could not be interpreted using the +existing types information.

+

Associated data is the type description as it was received by parser +from the metadata.

+
§

NotBitStoreType

Only for RuntimeMetadataV14. +While decoding +BitVec<T,O>, +parser encountered T type not implementing +BitStore.

+
§

NotBitOrderType

Only for RuntimeMetadataV14. +While decoding +BitVec<T,O>, +parser encountered O type not implementing +BitOrder.

+
§

BitVecFailure

Only for RuntimeMetadataV14. +Parser failed to decode +BitVec<T,O>, +even though T and O types were suitable.

+
§

Era

Only for RuntimeMetadataV14. +Parser failed to decode data slice as +Era.

+
§

SomeDataNotUsedMethod

Parser expects to use all data in decoding. This error appears if some +data was not used in parsing of the method.

+
§

SomeDataNotUsedExtensions

Only for RuntimeMetadataV14. +Parser expects to use all data in decoding. This error appears if some +data from extensions is not used in the decoding.

+

Trait Implementations§

source§

impl Debug for ParserDecodingError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/error_signer/enum.ParserError.html b/rustdocs/definitions/error_signer/enum.ParserError.html new file mode 100644 index 0000000000..b808f890a9 --- /dev/null +++ b/rustdocs/definitions/error_signer/enum.ParserError.html @@ -0,0 +1,145 @@ +ParserError in definitions::error_signer - Rust
pub enum ParserError {
+    SeparateMethodExtensions,
+    Decoding(ParserDecodingError),
+    FundamentallyBadV14Metadata(ParserMetadataError),
+    WrongNetworkVersion {
+        as_decoded: String,
+        in_metadata: u32,
+    },
+}
Expand description

Errors in transaction parsing

+

Variants§

§

SeparateMethodExtensions

§

Decoding(ParserDecodingError)

Errors occurring during the decoding procedure.

+
§

FundamentallyBadV14Metadata(ParserMetadataError)

Errors occurring because the metadata +RuntimeMetadataV14 +has extensions not acceptable in existing safety paradigm for +signable transactions.

+
§

WrongNetworkVersion

Fields

§as_decoded: String

metadata version from transaction extensions, as found through +parsing process

+
§in_metadata: u32

metadata version actually used for parsing, from the Version +constant in System pallet of the metadata

+

While parsing transaction with certain version of network metadata, +found that the version found in signable extensions does not match +the version of the metadata used for parsing.

+

Transaction parsing in Vault is done by consecutively checking all +available metadata for a given network name, starting with the highest +available version, and looking for a matching network version in the +parsed extensions.

+

For RuntimeMetadataV12 and RuntimeMetadataV13 the extensions set +is a fixed one, whereas for RuntimeMetadataV14 is may vary and is +determined by the metadata itself.

+

Trait Implementations§

source§

impl Debug for ParserError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/error_signer/enum.ParserMetadataError.html b/rustdocs/definitions/error_signer/enum.ParserMetadataError.html new file mode 100644 index 0000000000..1f061a10df --- /dev/null +++ b/rustdocs/definitions/error_signer/enum.ParserMetadataError.html @@ -0,0 +1,145 @@ +ParserMetadataError in definitions::error_signer - Rust
pub enum ParserMetadataError {
+    NoEra,
+    NoBlockHash,
+    NoVersionExt,
+    EraTwice,
+    GenesisHashTwice,
+    BlockHashTwice,
+    SpecVersionTwice,
+}
Expand description

Errors occurring because the network metadata +RuntimeMetadataV14 +has extensions not compatible with Vault.

+

To be compatible with signable transactions, metadata extensions must +include:

+
    +
  • Era (once)
  • +
  • block hash (once)
  • +
  • metadata version (once)
  • +
  • network genesis hash (at most, once)
  • +
+

If the metadata does not follow those criteria, transactions could not be +parsed, and therefore, could not be signed.

+

Variants§

§

NoEra

Metadata extensions have no Era

+
§

NoBlockHash

Metadata extensions have no block hash

+
§

NoVersionExt

Metadata extensions have no network metadata version

+
§

EraTwice

Metadata extensions have more than one Era

+
§

GenesisHashTwice

Metadata extensions have more than one genesis hash

+
§

BlockHashTwice

Metadata extensions have more than one block hash

+
§

SpecVersionTwice

Metadata extensions have more than one network metadata version

+

Trait Implementations§

source§

impl Debug for ParserMetadataError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/error_signer/index.html b/rustdocs/definitions/error_signer/index.html new file mode 100644 index 0000000000..5a20fdd82a --- /dev/null +++ b/rustdocs/definitions/error_signer/index.html @@ -0,0 +1,4 @@ +definitions::error_signer - Rust
Expand description

Errors occurring in Vault

+

Enums

\ No newline at end of file diff --git a/rustdocs/definitions/error_signer/sidebar-items.js b/rustdocs/definitions/error_signer/sidebar-items.js new file mode 100644 index 0000000000..2764dbd9ab --- /dev/null +++ b/rustdocs/definitions/error_signer/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["GeneralVerifierForContent","ParserDecodingError","ParserError","ParserMetadataError"]}; \ No newline at end of file diff --git a/rustdocs/definitions/helpers/enum.IdenticonStyle.html b/rustdocs/definitions/helpers/enum.IdenticonStyle.html new file mode 100644 index 0000000000..7a43bc262f --- /dev/null +++ b/rustdocs/definitions/helpers/enum.IdenticonStyle.html @@ -0,0 +1,122 @@ +IdenticonStyle in definitions::helpers - Rust
pub enum IdenticonStyle {
+    Dots,
+    Blockies,
+    Jdenticon,
+}

Variants§

§

Dots

Default style for substrate-based networks, dots in a circle.

+
§

Blockies

Blockies style used in Ethereum networks.

+
§

Jdenticon

Jdenticon style used to identify key sets.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.base58_or_eth_to_multisigner.html b/rustdocs/definitions/helpers/fn.base58_or_eth_to_multisigner.html new file mode 100644 index 0000000000..1b6a17f228 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.base58_or_eth_to_multisigner.html @@ -0,0 +1,4 @@ +base58_or_eth_to_multisigner in definitions::helpers - Rust
pub fn base58_or_eth_to_multisigner(
+    base58_or_eth: &str,
+    encryption: &Encryption
+) -> Result<MultiSigner>
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.ecdsa_public_to_eth_address.html b/rustdocs/definitions/helpers/fn.ecdsa_public_to_eth_address.html new file mode 100644 index 0000000000..104b69e70c --- /dev/null +++ b/rustdocs/definitions/helpers/fn.ecdsa_public_to_eth_address.html @@ -0,0 +1,2 @@ +ecdsa_public_to_eth_address in definitions::helpers - Rust
pub fn ecdsa_public_to_eth_address(public: &Public) -> Result<H160>
Expand description

Turn a ecdsa::Public addr into an Ethereum address.

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.get_multisigner.html b/rustdocs/definitions/helpers/fn.get_multisigner.html new file mode 100644 index 0000000000..ded06688c3 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.get_multisigner.html @@ -0,0 +1,6 @@ +get_multisigner in definitions::helpers - Rust
pub fn get_multisigner(
+    public: &[u8],
+    encryption: &Encryption
+) -> Result<MultiSigner>
Expand description

Get MultiSigner +from public key and Encryption

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.make_identicon_from_account.html b/rustdocs/definitions/helpers/fn.make_identicon_from_account.html new file mode 100644 index 0000000000..5e63117221 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.make_identicon_from_account.html @@ -0,0 +1 @@ +make_identicon_from_account in definitions::helpers - Rust
pub fn make_identicon_from_account(account: AccountId32) -> Identicon
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.make_identicon_from_id20.html b/rustdocs/definitions/helpers/fn.make_identicon_from_id20.html new file mode 100644 index 0000000000..e72449ceb1 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.make_identicon_from_id20.html @@ -0,0 +1 @@ +make_identicon_from_id20 in definitions::helpers - Rust
pub fn make_identicon_from_id20(id: &[u8; 20]) -> Identicon
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.make_identicon_from_multisigner.html b/rustdocs/definitions/helpers/fn.make_identicon_from_multisigner.html new file mode 100644 index 0000000000..e0a318683d --- /dev/null +++ b/rustdocs/definitions/helpers/fn.make_identicon_from_multisigner.html @@ -0,0 +1,6 @@ +make_identicon_from_multisigner in definitions::helpers - Rust
pub fn make_identicon_from_multisigner(
+    multisigner: &MultiSigner,
+    style: IdenticonStyle
+) -> Identicon
Expand description

Print identicon from +MultiSigner

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.multisigner_to_encryption.html b/rustdocs/definitions/helpers/fn.multisigner_to_encryption.html new file mode 100644 index 0000000000..d8574bae32 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.multisigner_to_encryption.html @@ -0,0 +1,3 @@ +multisigner_to_encryption in definitions::helpers - Rust
pub fn multisigner_to_encryption(m: &MultiSigner) -> Encryption
Expand description
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.multisigner_to_public.html b/rustdocs/definitions/helpers/fn.multisigner_to_public.html new file mode 100644 index 0000000000..16d330623e --- /dev/null +++ b/rustdocs/definitions/helpers/fn.multisigner_to_public.html @@ -0,0 +1,3 @@ +multisigner_to_public in definitions::helpers - Rust
pub fn multisigner_to_public(m: &MultiSigner) -> Vec<u8> 
Expand description

Get Vec<u8> public key from +MultiSigner

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.pic_meta.html b/rustdocs/definitions/helpers/fn.pic_meta.html new file mode 100644 index 0000000000..83eaf4b2b7 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.pic_meta.html @@ -0,0 +1,3 @@ +pic_meta in definitions::helpers - Rust

Function definitions::helpers::pic_meta

source ·
pub fn pic_meta(meta_hash: &[u8]) -> Identicon
Expand description

Print id pic for metadata hash

+

Currently uses PNG identicon generator, could be changed later.

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.pic_types.html b/rustdocs/definitions/helpers/fn.pic_types.html new file mode 100644 index 0000000000..4c4335b6e5 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.pic_types.html @@ -0,0 +1,3 @@ +pic_types in definitions::helpers - Rust

Function definitions::helpers::pic_types

source ·
pub fn pic_types(types_hash: &[u8]) -> Identicon
Expand description

Print id pic for hash of SCALE-encoded types data

+

Currently uses PNG identicon generator, could be changed later.

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.print_multisigner_as_base58_or_eth.html b/rustdocs/definitions/helpers/fn.print_multisigner_as_base58_or_eth.html new file mode 100644 index 0000000000..15518f69c0 --- /dev/null +++ b/rustdocs/definitions/helpers/fn.print_multisigner_as_base58_or_eth.html @@ -0,0 +1,12 @@ +print_multisigner_as_base58_or_eth in definitions::helpers - Rust
pub fn print_multisigner_as_base58_or_eth(
+    multi_signer: &MultiSigner,
+    optional_prefix: Option<u16>,
+    encryption: Encryption
+) -> String
Expand description

Print MultiSigner +in base58 format

+

Could be done for both +custom +network-specific base58 prefix by providing Some(value) as optional_prefix or with +default +one by leaving it None.

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/fn.unhex.html b/rustdocs/definitions/helpers/fn.unhex.html new file mode 100644 index 0000000000..df1b4f48df --- /dev/null +++ b/rustdocs/definitions/helpers/fn.unhex.html @@ -0,0 +1,6 @@ +unhex in definitions::helpers - Rust

Function definitions::helpers::unhex

source ·
pub fn unhex(hex_entry: &str) -> Result<Vec<u8>>
Expand description

Decode hexadecimal &str into Vec<u8>, with descriptive error

+

Function could be used both on hot and cold side.

+

In addition to encoded &str required is input of T::NotHex, to produce +error with details on what exactly turned out to be invalid hexadecimal +string.

+
\ No newline at end of file diff --git a/rustdocs/definitions/helpers/index.html b/rustdocs/definitions/helpers/index.html new file mode 100644 index 0000000000..c243d8cb2a --- /dev/null +++ b/rustdocs/definitions/helpers/index.html @@ -0,0 +1,7 @@ +definitions::helpers - Rust

Module definitions::helpers

source ·
Expand description

Common helper functions

+

Enums

Functions

\ No newline at end of file diff --git a/rustdocs/definitions/helpers/sidebar-items.js b/rustdocs/definitions/helpers/sidebar-items.js new file mode 100644 index 0000000000..a543ba32d4 --- /dev/null +++ b/rustdocs/definitions/helpers/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["IdenticonStyle"],"fn":["base58_or_eth_to_multisigner","ecdsa_public_to_eth_address","get_multisigner","make_identicon_from_account","make_identicon_from_id20","make_identicon_from_multisigner","multisigner_to_encryption","multisigner_to_public","pic_meta","pic_types","print_multisigner_as_base58_or_eth","unhex"]}; \ No newline at end of file diff --git a/rustdocs/definitions/history/enum.Event.html b/rustdocs/definitions/history/enum.Event.html new file mode 100644 index 0000000000..4acea16e95 --- /dev/null +++ b/rustdocs/definitions/history/enum.Event.html @@ -0,0 +1,268 @@ +Event in definitions::history - Rust
pub enum Event {
+
Show 30 variants MetadataAdded { + meta_values_display: MetaValuesDisplay, + }, + MetadataRemoved { + meta_values_display: MetaValuesDisplay, + }, + MetadataSigned { + meta_values_export: MetaValuesExport, + }, + NetworkSpecsAdded { + network_specs_display: NetworkSpecsDisplay, + }, + NetworkSpecsRemoved { + network_specs_display: NetworkSpecsDisplay, + }, + NetworkSpecsSigned { + network_specs_export: NetworkSpecsExport, + }, + NetworkVerifierSet { + network_verifier_display: NetworkVerifierDisplay, + }, + GeneralVerifierSet { + verifier: Verifier, + }, + TypesAdded { + types_display: TypesDisplay, + }, + TypesRemoved { + types_display: TypesDisplay, + }, + TypesSigned { + types_export: TypesExport, + }, + TransactionSigned { + sign_display: SignDisplay, + }, + TransactionSignError { + sign_display: SignDisplay, + }, + MessageSigned { + sign_message_display: SignMessageDisplay, + }, + MessageSignError { + sign_message_display: SignMessageDisplay, + }, + IdentityAdded { + identity_history: IdentityHistory, + }, + IdentityRemoved { + identity_history: IdentityHistory, + }, + IdentitiesWiped, + DeviceWasOnline, + ResetDangerRecord, + SeedCreated { + seed_created: String, + }, + SeedRemoved { + seed_name: String, + }, + SeedNameWasShown { + seed_name_was_shown: String, + }, + SecretWasExported { + identity_history: IdentityHistory, + }, + Warning { + warning: String, + }, + WrongPassword, + UserEntry { + user_entry: String, + }, + SystemEntry { + system_entry: String, + }, + HistoryCleared, + DatabaseInitiated, +
}
Expand description

Events that could be recorded in the history log

+

Variants§

§

MetadataAdded

Fields

§meta_values_display: MetaValuesDisplay

Network metadata was added

+
§

MetadataRemoved

Fields

§meta_values_display: MetaValuesDisplay

Network metadata was removed

+
§

MetadataSigned

Fields

§meta_values_export: MetaValuesExport

User has generated SufficientCrypto +with one of Vault addresses for load_metadata update

+
§

NetworkSpecsAdded

Fields

§network_specs_display: NetworkSpecsDisplay

Network specs were added

+
§

NetworkSpecsRemoved

Fields

§network_specs_display: NetworkSpecsDisplay

Network specs were removed

+
§

NetworkSpecsSigned

Fields

§network_specs_export: NetworkSpecsExport

User has generated SufficientCrypto +with one of Vault addresses for add_specs update

+
§

NetworkVerifierSet

Fields

§network_verifier_display: NetworkVerifierDisplay

Network verifier with ValidCurrentVerifier was set for network

+
§

GeneralVerifierSet

Fields

§verifier: Verifier

General verifier was set up

+
§

TypesAdded

Fields

§types_display: TypesDisplay

Types information was added

+
§

TypesRemoved

Fields

§types_display: TypesDisplay

Types information was removed

+
§

TypesSigned

Fields

§types_export: TypesExport

User has generated SufficientCrypto +with one of Vault addresses for load_types update

+
§

TransactionSigned

Fields

§sign_display: SignDisplay

User has generated signature for a transaction

+
§

TransactionSignError

Fields

§sign_display: SignDisplay

User tried to generate signature for a transaction, but failed to enter +a valid password

+
§

MessageSigned

Fields

§sign_message_display: SignMessageDisplay

User has generated signature for a message

+
§

MessageSignError

Fields

§sign_message_display: SignMessageDisplay

User tried to generate signature for a message, but failed to enter +a valid password

+
§

IdentityAdded

Fields

§identity_history: IdentityHistory

User generated a new address

+
§

IdentityRemoved

Fields

§identity_history: IdentityHistory

User removed an address

+
§

IdentitiesWiped

All identities were wiped

+
§

DeviceWasOnline

Vault was online, i.e. the air-gap was broken

+
§

ResetDangerRecord

User has acknowledged the dangers detected and has reset the Vault +danger status

+
§

SeedCreated

Fields

§seed_created: String

New seed was created (stored value here is the seed name)

+
§

SeedRemoved

Fields

§seed_name: String

User removed a seed

+
§

SeedNameWasShown

Fields

§seed_name_was_shown: String

User opened seed backup, and seed phrase for shortly shown as a plain +text on screen (stored value here is the seed name)

+
§

SecretWasExported

Fields

§identity_history: IdentityHistory

User has generated QR code for secret key export

+
§

Warning

Fields

§warning: String

A warning was produces and displayed to user

+
§

WrongPassword

User has entered wrong password

+
§

UserEntry

Fields

§user_entry: String

User has manually added entry to history log

+
§

SystemEntry

Fields

§system_entry: String

System-generated entry into history log

+
§

HistoryCleared

History was cleared

+
§

DatabaseInitiated

Database was initiated

+

Trait Implementations§

source§

impl Clone for Event

source§

fn clone(&self) -> Event

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Event

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for Event

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for Event

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<Event> for Event

source§

fn eq(&self, other: &Event) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<Event> for Event

source§

impl Eq for Event

source§

impl StructuralEq for Event

source§

impl StructuralPartialEq for Event

Auto Trait Implementations§

§

impl RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl UnwindSafe for Event

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/fn.all_events_preview.html b/rustdocs/definitions/history/fn.all_events_preview.html new file mode 100644 index 0000000000..b2cbdc8ca5 --- /dev/null +++ b/rustdocs/definitions/history/fn.all_events_preview.html @@ -0,0 +1,4 @@ +all_events_preview in definitions::history - Rust
pub fn all_events_preview() -> Vec<Event>
Expand description

Test function generating a set of all possible events

+

Uses mock values and is needed to test Event format in displaying all events +in user interface.

+
\ No newline at end of file diff --git a/rustdocs/definitions/history/index.html b/rustdocs/definitions/history/index.html new file mode 100644 index 0000000000..dfcd4dcd2f --- /dev/null +++ b/rustdocs/definitions/history/index.html @@ -0,0 +1,22 @@ +definitions::history - Rust

Module definitions::history

source ·
Expand description

Types used in Vault history log

+

Vault keeps log of all events in HISTORY tree of the cold database.

+

Every log Entry consists of timestamp and a set of simultaneously +occurred events Vec<Event>. Entry is stored SCALE-encoded under key +Order. Order is produced from the order the +event gets in history log when entered. Order is an addition to the +timestamp, and normally arranging entries by the timestamp should +coincide with arranging entries by Order.

+

Log by default starts with database init Entry containing:

+
    +
  • Event::DatabaseInitiated
  • +
  • Event::GeneralVerifierSet(_)
  • +
+

User can clear history log at any time. This indeed will remove all history +entries, and the log will then start with Entry containing +Event::HistoryCleared.

+

Structs

Enums

  • Events that could be recorded in the history log

Functions

\ No newline at end of file diff --git a/rustdocs/definitions/history/sidebar-items.js b/rustdocs/definitions/history/sidebar-items.js new file mode 100644 index 0000000000..9a4b280837 --- /dev/null +++ b/rustdocs/definitions/history/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Event"],"fn":["all_events_preview"],"struct":["Entry","IdentityHistory","MetaValuesDisplay","MetaValuesExport","NetworkSpecsDisplay","NetworkSpecsExport","NetworkVerifierDisplay","SignDisplay","SignMessageDisplay","TypesDisplay","TypesExport"]}; \ No newline at end of file diff --git a/rustdocs/definitions/history/struct.Entry.html b/rustdocs/definitions/history/struct.Entry.html new file mode 100644 index 0000000000..3a4e56f5af --- /dev/null +++ b/rustdocs/definitions/history/struct.Entry.html @@ -0,0 +1,158 @@ +Entry in definitions::history - Rust

Struct definitions::history::Entry

source ·
pub struct Entry {
+    pub timestamp: String,
+    pub events: Vec<Event>,
+}
Expand description

History log individual entry

+

Contains timestamp and set of simultaneously occurred events Vec<Event>.

+

Entry is stored SCALE-encoded in the HISTORY tree of the cold database, +under key Order.

+

Fields§

§timestamp: String§events: Vec<Event>

Trait Implementations§

source§

impl Clone for Entry

source§

fn clone(&self) -> Entry

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Entry

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for Entry

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for Entry

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<Entry> for Entry

source§

fn eq(&self, other: &Entry) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<Entry> for Entry

source§

impl Eq for Entry

source§

impl StructuralEq for Entry

source§

impl StructuralPartialEq for Entry

Auto Trait Implementations§

§

impl RefUnwindSafe for Entry

§

impl Send for Entry

§

impl Sync for Entry

§

impl Unpin for Entry

§

impl UnwindSafe for Entry

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.IdentityHistory.html b/rustdocs/definitions/history/struct.IdentityHistory.html new file mode 100644 index 0000000000..b05beb92da --- /dev/null +++ b/rustdocs/definitions/history/struct.IdentityHistory.html @@ -0,0 +1,180 @@ +IdentityHistory in definitions::history - Rust
pub struct IdentityHistory {
+    pub seed_name: String,
+    pub encryption: Encryption,
+    pub public_key: Vec<u8>,
+    pub path: String,
+    pub network_genesis_hash: H256,
+}
Expand description

Event content for address generation or removal.

+

Fields§

§seed_name: String

The name of the seed.

+
§encryption: Encryption

Encryption scheme of the seed.

+
§public_key: Vec<u8>

Public key.

+
§path: String
    +
  • path with soft (/) and hard (//) derivations only, without password
  • +
+
§network_genesis_hash: H256
    +
  • genesis hash of the network within which the address is
  • +
+

Implementations§

source§

impl IdentityHistory

source

pub fn new( + seed_name: String, + encryption: Encryption, + public_key: Vec<u8>, + path: String, + network_genesis_hash: H256 +) -> Self

source

pub fn get( + seed_name: &str, + encryption: &Encryption, + public_key: &[u8], + path: &str, + network_genesis_hash: H256 +) -> Self

Generate IdentityHistory from parts

+

Trait Implementations§

source§

impl Clone for IdentityHistory

source§

fn clone(&self) -> IdentityHistory

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for IdentityHistory

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for IdentityHistory

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for IdentityHistory

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<IdentityHistory> for IdentityHistory

source§

fn eq(&self, other: &IdentityHistory) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<IdentityHistory> for IdentityHistory

source§

impl Eq for IdentityHistory

source§

impl StructuralEq for IdentityHistory

source§

impl StructuralPartialEq for IdentityHistory

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.MetaValuesDisplay.html b/rustdocs/definitions/history/struct.MetaValuesDisplay.html new file mode 100644 index 0000000000..72aa43cde4 --- /dev/null +++ b/rustdocs/definitions/history/struct.MetaValuesDisplay.html @@ -0,0 +1,158 @@ +MetaValuesDisplay in definitions::history - Rust
pub struct MetaValuesDisplay {
+    pub name: String,
+    pub version: u32,
+    pub meta_hash: H256,
+}
Expand description

Event content for importing or removing metadata of a known network

+

Contains network name, network version, metadata hash.

+

Fields§

§name: String§version: u32§meta_hash: H256

Implementations§

source§

impl MetaValuesDisplay

source

pub fn new(name: String, version: u32, meta_hash: H256) -> Self

source

pub fn get(meta_values: &MetaValues) -> Self

Trait Implementations§

source§

impl Clone for MetaValuesDisplay

source§

fn clone(&self) -> MetaValuesDisplay

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MetaValuesDisplay

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for MetaValuesDisplay

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for MetaValuesDisplay

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<MetaValuesDisplay> for MetaValuesDisplay

source§

fn eq(&self, other: &MetaValuesDisplay) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<MetaValuesDisplay> for MetaValuesDisplay

source§

impl Eq for MetaValuesDisplay

source§

impl StructuralEq for MetaValuesDisplay

source§

impl StructuralPartialEq for MetaValuesDisplay

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.MetaValuesExport.html b/rustdocs/definitions/history/struct.MetaValuesExport.html new file mode 100644 index 0000000000..e9813f9092 --- /dev/null +++ b/rustdocs/definitions/history/struct.MetaValuesExport.html @@ -0,0 +1,168 @@ +MetaValuesExport in definitions::history - Rust
pub struct MetaValuesExport {
+    pub name: String,
+    pub version: u32,
+    pub meta_hash: H256,
+    pub signed_by: VerifierValue,
+}
Expand description

Event content for generating SufficientCrypto +QR code for load_metadata message

+

Effectively records that network metadata was signed by user. +Contains network name, network version, metadata hash, and VerifierValue +of address used for SufficientCrypto generation.

+

Fields§

§name: String§version: u32§meta_hash: H256§signed_by: VerifierValue

Implementations§

source§

impl MetaValuesExport

source

pub fn new( + name: String, + version: u32, + meta_hash: H256, + signed_by: VerifierValue +) -> Self

source

pub fn get(meta_values: &MetaValues, signed_by: &VerifierValue) -> Self

Generate MetaValuesExport from MetaValues and VerifierValue +of address used for SufficientCrypto generation.

+

Trait Implementations§

source§

impl Clone for MetaValuesExport

source§

fn clone(&self) -> MetaValuesExport

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MetaValuesExport

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for MetaValuesExport

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for MetaValuesExport

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<MetaValuesExport> for MetaValuesExport

source§

fn eq(&self, other: &MetaValuesExport) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<MetaValuesExport> for MetaValuesExport

source§

impl Eq for MetaValuesExport

source§

impl StructuralEq for MetaValuesExport

source§

impl StructuralPartialEq for MetaValuesExport

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.NetworkSpecsDisplay.html b/rustdocs/definitions/history/struct.NetworkSpecsDisplay.html new file mode 100644 index 0000000000..e0fe4c8615 --- /dev/null +++ b/rustdocs/definitions/history/struct.NetworkSpecsDisplay.html @@ -0,0 +1,163 @@ +NetworkSpecsDisplay in definitions::history - Rust
pub struct NetworkSpecsDisplay {
+    pub network: OrderedNetworkSpecs,
+    pub valid_current_verifier: ValidCurrentVerifier,
+    pub general_verifier: Verifier,
+}
Expand description

Event content for importing or removing network specs

+

Fields§

§network: OrderedNetworkSpecs§valid_current_verifier: ValidCurrentVerifier§general_verifier: Verifier

Implementations§

source§

impl NetworkSpecsDisplay

source

pub fn get( + specs: &OrderedNetworkSpecs, + valid_current_verifier: &ValidCurrentVerifier, + general_verifier: &Verifier +) -> Self

Generate NetworkSpecsDisplay from OrderedNetworkSpecs, +network-associated ValidCurrentVerifier, and +general verifier Verifier

+

Trait Implementations§

source§

impl Clone for NetworkSpecsDisplay

source§

fn clone(&self) -> NetworkSpecsDisplay

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NetworkSpecsDisplay

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for NetworkSpecsDisplay

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for NetworkSpecsDisplay

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<NetworkSpecsDisplay> for NetworkSpecsDisplay

source§

fn eq(&self, other: &NetworkSpecsDisplay) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<NetworkSpecsDisplay> for NetworkSpecsDisplay

source§

impl Eq for NetworkSpecsDisplay

source§

impl StructuralEq for NetworkSpecsDisplay

source§

impl StructuralPartialEq for NetworkSpecsDisplay

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.NetworkSpecsExport.html b/rustdocs/definitions/history/struct.NetworkSpecsExport.html new file mode 100644 index 0000000000..0147030cc7 --- /dev/null +++ b/rustdocs/definitions/history/struct.NetworkSpecsExport.html @@ -0,0 +1,161 @@ +NetworkSpecsExport in definitions::history - Rust
pub struct NetworkSpecsExport {
+    pub specs_to_send: NetworkSpecs,
+    pub signed_by: VerifierValue,
+}
Expand description

Event content for generating SufficientCrypto +QR code for add_specs message

+

Effectively records that network specs were signed by user. +Contains NetworkSpecs and VerifierValue of address used for +SufficientCrypto generation.

+

Fields§

§specs_to_send: NetworkSpecs§signed_by: VerifierValue

Implementations§

source§

impl NetworkSpecsExport

source

pub fn get(specs_to_send: &NetworkSpecs, signed_by: &VerifierValue) -> Self

Generate NetworkSpecsExport from NetworkSpecs and +VerifierValue of address used for SufficientCrypto generation.

+

Trait Implementations§

source§

impl Clone for NetworkSpecsExport

source§

fn clone(&self) -> NetworkSpecsExport

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NetworkSpecsExport

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for NetworkSpecsExport

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for NetworkSpecsExport

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<NetworkSpecsExport> for NetworkSpecsExport

source§

fn eq(&self, other: &NetworkSpecsExport) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<NetworkSpecsExport> for NetworkSpecsExport

source§

impl Eq for NetworkSpecsExport

source§

impl StructuralEq for NetworkSpecsExport

source§

impl StructuralPartialEq for NetworkSpecsExport

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.NetworkVerifierDisplay.html b/rustdocs/definitions/history/struct.NetworkVerifierDisplay.html new file mode 100644 index 0000000000..afe091852f --- /dev/null +++ b/rustdocs/definitions/history/struct.NetworkVerifierDisplay.html @@ -0,0 +1,163 @@ +NetworkVerifierDisplay in definitions::history - Rust
pub struct NetworkVerifierDisplay {
+    pub genesis_hash: H256,
+    pub valid_current_verifier: ValidCurrentVerifier,
+    pub general_verifier: Verifier,
+}
Expand description

Event content for setting network verifier

+

Fields§

§genesis_hash: H256§valid_current_verifier: ValidCurrentVerifier§general_verifier: Verifier

Implementations§

source§

impl NetworkVerifierDisplay

source

pub fn get( + verifier_key: &VerifierKey, + valid_current_verifier: &ValidCurrentVerifier, + general_verifier: &Verifier +) -> Self

Generate NetworkVerifierDisplay from VerifierKey, +ValidCurrentVerifier, the setting of which the event records, +and general verifier Verifier

+

Trait Implementations§

source§

impl Clone for NetworkVerifierDisplay

source§

fn clone(&self) -> NetworkVerifierDisplay

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NetworkVerifierDisplay

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for NetworkVerifierDisplay

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for NetworkVerifierDisplay

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<NetworkVerifierDisplay> for NetworkVerifierDisplay

source§

fn eq(&self, other: &NetworkVerifierDisplay) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<NetworkVerifierDisplay> for NetworkVerifierDisplay

source§

impl Eq for NetworkVerifierDisplay

source§

impl StructuralEq for NetworkVerifierDisplay

source§

impl StructuralPartialEq for NetworkVerifierDisplay

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.SignDisplay.html b/rustdocs/definitions/history/struct.SignDisplay.html new file mode 100644 index 0000000000..df585c886d --- /dev/null +++ b/rustdocs/definitions/history/struct.SignDisplay.html @@ -0,0 +1,176 @@ +SignDisplay in definitions::history - Rust
pub struct SignDisplay {
+    pub transaction: Vec<u8>,
+    pub network_name: String,
+    pub signed_by: VerifierValue,
+    pub user_comment: String,
+}
Expand description

History log information about transactions, both successfully signed and +the ones with wrong password entered by user

+

Fields§

§transaction: Vec<u8>

raw Vec<u8> transaction that user either tried to sign or signed

+
§network_name: String

name for the network in which transaction is generated, +as it is recorded in the network specs and network metadata

+
§signed_by: VerifierValue

address that has generated and signed the transaction

+
§user_comment: String

user entered comment for transaction

+

Implementations§

source§

impl SignDisplay

source

pub fn new( + transaction: Vec<u8>, + network_name: String, + signed_by: VerifierValue, + user_comment: String +) -> Self

source

pub fn get( + transaction: &[u8], + network_name: &str, + signed_by: &VerifierValue, + user_comment: &str +) -> Self

Generate SignDisplay from parts

+
source

pub fn transaction_network_encryption(&self) -> (Vec<u8>, String, Encryption)

Get raw transaction, network name, and Encryption from SignDisplay

+
source

pub fn transaction(&self) -> Vec<u8>

Get raw transaction from SignDisplay

+

Trait Implementations§

source§

impl Clone for SignDisplay

source§

fn clone(&self) -> SignDisplay

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SignDisplay

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for SignDisplay

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for SignDisplay

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<SignDisplay> for SignDisplay

source§

fn eq(&self, other: &SignDisplay) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<SignDisplay> for SignDisplay

source§

impl Eq for SignDisplay

source§

impl StructuralEq for SignDisplay

source§

impl StructuralPartialEq for SignDisplay

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.SignMessageDisplay.html b/rustdocs/definitions/history/struct.SignMessageDisplay.html new file mode 100644 index 0000000000..efc9a4885b --- /dev/null +++ b/rustdocs/definitions/history/struct.SignMessageDisplay.html @@ -0,0 +1,169 @@ +SignMessageDisplay in definitions::history - Rust
pub struct SignMessageDisplay {
+    pub message: String,
+    pub network_name: String,
+    pub signed_by: VerifierValue,
+    pub user_comment: String,
+}
Expand description

History log information about messages, both successfully signed and +the ones with wrong password entered by user

+

Fields§

§message: String

decoded message

+
§network_name: String

name for the network in which message transaction is generated, +as it is recorded in the network specs and network metadata

+
§signed_by: VerifierValue

address that has generated and signed the message

+
§user_comment: String

user entered comment for message

+

Implementations§

source§

impl SignMessageDisplay

source

pub fn get( + message: &str, + network_name: &str, + signed_by: &VerifierValue, + user_comment: &str +) -> Self

Generate SignMessageDisplay from parts

+

Trait Implementations§

source§

impl Clone for SignMessageDisplay

source§

fn clone(&self) -> SignMessageDisplay

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SignMessageDisplay

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for SignMessageDisplay

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for SignMessageDisplay

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<SignMessageDisplay> for SignMessageDisplay

source§

fn eq(&self, other: &SignMessageDisplay) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<SignMessageDisplay> for SignMessageDisplay

source§

impl Eq for SignMessageDisplay

source§

impl StructuralEq for SignMessageDisplay

source§

impl StructuralPartialEq for SignMessageDisplay

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.TypesDisplay.html b/rustdocs/definitions/history/struct.TypesDisplay.html new file mode 100644 index 0000000000..f3d95cead4 --- /dev/null +++ b/rustdocs/definitions/history/struct.TypesDisplay.html @@ -0,0 +1,158 @@ +TypesDisplay in definitions::history - Rust
pub struct TypesDisplay {
+    pub types_hash: H256,
+    pub verifier: Verifier,
+}
Expand description

Event content for importing or removing types information

+

Contains hash of SCALE-encoded types data and types information Verifier.

+

Fields§

§types_hash: H256§verifier: Verifier

Implementations§

source§

impl TypesDisplay

source

pub fn new(types_hash: H256, verifier: Verifier) -> Self

source

pub fn get(types_content: &ContentLoadTypes, verifier: &Verifier) -> Self

Generate TypesDisplay from ContentLoadTypes and types information +Verifier

+

Trait Implementations§

source§

impl Clone for TypesDisplay

source§

fn clone(&self) -> TypesDisplay

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TypesDisplay

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for TypesDisplay

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for TypesDisplay

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<TypesDisplay> for TypesDisplay

source§

fn eq(&self, other: &TypesDisplay) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<TypesDisplay> for TypesDisplay

source§

impl Eq for TypesDisplay

source§

impl StructuralEq for TypesDisplay

source§

impl StructuralPartialEq for TypesDisplay

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/history/struct.TypesExport.html b/rustdocs/definitions/history/struct.TypesExport.html new file mode 100644 index 0000000000..4c310971b2 --- /dev/null +++ b/rustdocs/definitions/history/struct.TypesExport.html @@ -0,0 +1,162 @@ +TypesExport in definitions::history - Rust
pub struct TypesExport {
+    pub types_hash: H256,
+    pub signed_by: VerifierValue,
+}
Expand description

Event content for generating SufficientCrypto +QR code for load_types message

+

Effectively records that types information was signed by user. +used for SufficientCrypto generation.

+

Fields§

§types_hash: H256

Hash of SCALE-encoded types data

+
§signed_by: VerifierValue

VerifierValue of address

+

Implementations§

source§

impl TypesExport

source

pub fn new(types_hash: H256, signed_by: VerifierValue) -> Self

source

pub fn get(types_content: &ContentLoadTypes, signed_by: &VerifierValue) -> Self

Generate TypesExport from ContentLoadTypes and VerifierValue +of address used for SufficientCrypto generation

+

Trait Implementations§

source§

impl Clone for TypesExport

source§

fn clone(&self) -> TypesExport

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TypesExport

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for TypesExport

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for TypesExport

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<TypesExport> for TypesExport

source§

fn eq(&self, other: &TypesExport) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<TypesExport> for TypesExport

source§

impl Eq for TypesExport

source§

impl StructuralEq for TypesExport

source§

impl StructuralPartialEq for TypesExport

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/index.html b/rustdocs/definitions/index.html new file mode 100644 index 0000000000..45c6c533df --- /dev/null +++ b/rustdocs/definitions/index.html @@ -0,0 +1,13 @@ +definitions - Rust

Crate definitions

source ·
Expand description

Definitions and common methods for types used in Vault +and Vault-supporting ecosystem.

+

Features

+

Feature "signer" corresponds to everything related to Vault air-gapped +device.

+

Feature "active" corresponds to all Vault-related things happening +without air-gap.

+

Feature "test" includes both "signer" and "active" features, along +with some testing, and is the default one.

+

Modules

\ No newline at end of file diff --git a/rustdocs/definitions/keyring/index.html b/rustdocs/definitions/keyring/index.html new file mode 100644 index 0000000000..23116f5a40 --- /dev/null +++ b/rustdocs/definitions/keyring/index.html @@ -0,0 +1,34 @@ +definitions::keyring - Rust

Module definitions::keyring

source ·
Expand description

Key types and key generation for hot and cold databases

+

Cold database has following trees:

+
    +
  • SPECSTREE, for network specs OrderedNetworkSpecs entries, with keys +NetworkSpecsKey
  • +
  • VERIFIERS, for network verifier CurrentVerifier +entries, with keys VerifierKey
  • +
  • METATREE, for Vec<u8> metadata entries, with keys MetaKey and +prefix search with MetaKeyPrefix
  • +
  • ADDRTREE, for AddressDetails entries +with public information associated with user addresses, with keys +AddressKey
  • +
  • SETTREE, for types information, Vault danger status, and general +verifier
  • +
  • TRANSACTION, to temporarily store transaction information while waiting +for user approval
  • +
  • HISTORY, for Entry log of all events +happening in Vault, with keys Order
  • +
+

Hot database has following trees:

+
    +
  • SPECSTREEPREP, for network specs NetworkSpecs +entries, with keys NetworkSpecsKey
  • +
  • METATREE, for Vec<u8> metadata entries, with keys MetaKey and +prefix search with MetaKeyPrefix
  • +
  • META_HISTORY, for [H256] block hash entries, with keys MetaKey and +prefix search with MetaKeyPrefix
  • +
  • SETTREE, for types information
  • +
  • ADDRESS_BOOK for AddressBookEntry data needed to maintain hot database +and send RPC calls to fetch network information, with keys AddressBookKey
  • +
+

Structs

  • Key in ADDRESS_BOOK tree (hot database)
  • Key in ADDRTREE tree (cold database)
  • Key in METATREE (cold and hot database) and in META_HISTORY tree (hot +database)
  • Prefix for searching in METATREE (cold and hot database) and in +META_HISTORY tree (hot database)
  • Key in SPECSTREE tree (cold database) and in SPECSPREPTREE (hot database)
  • Key in HISTORY tree (cold database)
  • Key in VERIFIERS tree (cold database)
\ No newline at end of file diff --git a/rustdocs/definitions/keyring/sidebar-items.js b/rustdocs/definitions/keyring/sidebar-items.js new file mode 100644 index 0000000000..1f9f5dca2e --- /dev/null +++ b/rustdocs/definitions/keyring/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["AddressBookKey","AddressKey","MetaKey","MetaKeyPrefix","NetworkSpecsKey","Order","VerifierKey"]}; \ No newline at end of file diff --git a/rustdocs/definitions/keyring/struct.AddressBookKey.html b/rustdocs/definitions/keyring/struct.AddressBookKey.html new file mode 100644 index 0000000000..77bd02024b --- /dev/null +++ b/rustdocs/definitions/keyring/struct.AddressBookKey.html @@ -0,0 +1,133 @@ +AddressBookKey in definitions::keyring - Rust
pub struct AddressBookKey(_);
Expand description

Key in ADDRESS_BOOK tree (hot database)

+

Key is used to retrieve the AddressBookEntry for network.

+

Key is a SCALE-encoded address book title, which is either a network name +as it is stated in the metadata for default networks, or the name with +-<encryption> added for non-default networks.

+

Database could have a few entries for related networks, for example, +entry “westend” for default Westend, and entry “westend-ed25519” for +Westend with Ed25519 encryption. Such entries would not conflict.

+

Implementations§

source§

impl AddressBookKey

source

pub fn from_title(title: &str) -> Self

Generate AddressBookKey from network address book title

+
source

pub fn from_ivec(ivec: &IVec) -> Self

Transform database IVec key into AddressBookKey prior to processing

+

Infallible, the validity of resulting AddressBookKey is not checked.

+
source

pub fn title(&self) -> Result<String>

Get the network address book title from the AddressBookKey

+

Could result in error if key is corrupted.

+
source

pub fn key(&self) -> Vec<u8>

Transform AddressBookKey into Vec<u8> database key

+

Trait Implementations§

source§

impl Clone for AddressBookKey

source§

fn clone(&self) -> AddressBookKey

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AddressBookKey

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/keyring/struct.AddressKey.html b/rustdocs/definitions/keyring/struct.AddressKey.html new file mode 100644 index 0000000000..901525a382 --- /dev/null +++ b/rustdocs/definitions/keyring/struct.AddressKey.html @@ -0,0 +1,193 @@ +AddressKey in definitions::keyring - Rust
pub struct AddressKey { /* private fields */ }
Expand description

Key in ADDRTREE tree (cold database)

+

AddressKey is used to retrieve the address associated public information.

+

Key is derived from public key and encryption algorithm.

+

To create an address in Vault, sufficient information is:

+
    +
  • seed phrase
  • +
  • derivation: soft (/) and hard (//) junctions and password (///)
  • +
  • encryption algorithm
  • +
  • network for address to be used with (network must support the encryption +algorithm)
  • +
+

The seed phrase and password are not stored in rust-managed database. +For storing seed phrases, Vault device’s own key management system is used. +Passwords are never stored.
+Cold database stores only non-secret address associated information.

+

Each address is defined by combination of public key, encryption algorithm, +and network.

+

More than one address could be created for same seed phrase and derivation, +with same encryption algorithm, but for different networks.

+

For the user interface these addresses would appear as separate entities, +however, the database stores them under same AddressKey, with a set of +allowed networks.

+

Implementations§

source§

impl AddressKey

source

pub fn new(multisigner: MultiSigner, genesis_hash: Option<H256>) -> Self

Generate AddressKey from corresponding +MultiSigner value
+and a network prefix.

+
source

pub fn from_parts( + public: &[u8], + encryption: &Encryption, + genesis_hash: Option<H256> +) -> Result<Self>

Generate AddressKey from parts: raw public key and Encryption

+

Could result in error if public key length does not match the +expected length for chosen encryption algorithm.

+
source

pub fn from_ivec(ivec: &IVec) -> Result<Self>

Transform database IVec key into AddressKey prior to processing

+

Infallible, the validity of resulting AddressKey is not checked.

+
source

pub fn from_hex(hex_address_key: &str) -> Result<Self>

Transform hexadecimal String into AddressKey

+

Vault receives hexadecimal strings from user interface.

+

This function checks only that hexadecimal format is valid, no length +check happens here.

+
source

pub fn public_key_encryption(&self) -> Result<(Vec<u8>, Encryption)>

Get public key and Encryption from the AddressKey

+
source

pub fn multi_signer(&self) -> &MultiSigner

Get MultiSigner +from the AddressKey

+
source

pub fn key(&self) -> Vec<u8>

Transform AddressKey into Vec<u8> database key

+

Trait Implementations§

source§

impl Clone for AddressKey

source§

fn clone(&self) -> AddressKey

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AddressKey

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for AddressKey

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for AddressKey

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<AddressKey> for AddressKey

source§

fn eq(&self, other: &AddressKey) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<AddressKey> for AddressKey

source§

impl Eq for AddressKey

source§

impl StructuralEq for AddressKey

source§

impl StructuralPartialEq for AddressKey

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/keyring/struct.MetaKey.html b/rustdocs/definitions/keyring/struct.MetaKey.html new file mode 100644 index 0000000000..095bd39a46 --- /dev/null +++ b/rustdocs/definitions/keyring/struct.MetaKey.html @@ -0,0 +1,146 @@ +MetaKey in definitions::keyring - Rust
pub struct MetaKey(_);
Expand description

Key in METATREE (cold and hot database) and in META_HISTORY tree (hot +database)

+

MetaKey is used to retrieve raw Vec<u8> metadata from METATREE and +relevant block hash entries from META_HISTORY.

+

Key is derived from network name as it appears in the metadata and network +version.

+

Each MetaKey corresponds to single metadata entry and each metadata +entry has unique MetaKey. This is so because:

+
    +
  • +

    Metadata that could be used in Vault must contain Version constant in +pallet System, and only such metadata can be added in the databases.

    +
  • +
  • +

    Two raw metadata entries corresponding to same network name and network +version must be identical. If the metadata changes without bumping the +network version, both Vault and hot database client would produce an error. +It is not possible to switch the metadata in cold or hot database to the +changed one without removing the old entry first.

    +
  • +
+

Implementations§

source§

impl MetaKey

source

pub fn from_parts(name: &str, version: u32) -> Self

Generate MetaKey from parts: network name and network version

+
source

pub fn from_ivec(ivec: &IVec) -> Self

Transform database IVec key into MetaKey prior to processing

+

Infallible, the validity of resulting MetaKey is not checked.

+
source

pub fn name_version(&self) -> Result<(String, u32)>

Get network name and network version from the MetaKey

+

Could result in error if key is corrupted.

+
source

pub fn key(&self) -> Vec<u8>

Transform MetaKey into Vec<u8> database key

+

Trait Implementations§

source§

impl Clone for MetaKey

source§

fn clone(&self) -> MetaKey

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MetaKey

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/keyring/struct.MetaKeyPrefix.html b/rustdocs/definitions/keyring/struct.MetaKeyPrefix.html new file mode 100644 index 0000000000..b858fb9584 --- /dev/null +++ b/rustdocs/definitions/keyring/struct.MetaKeyPrefix.html @@ -0,0 +1,130 @@ +MetaKeyPrefix in definitions::keyring - Rust
pub struct MetaKeyPrefix(_);
Expand description

Prefix for searching in METATREE (cold and hot database) and in +META_HISTORY tree (hot database)

+

MetaKeyPrefix is used to retrieve all available Vec<u8> metadata +for a given network name from METATREE and all relevant block hash entries +from META_HISTORY.

+

Prefix is derived from network name as it appears in the metadata.

+

MetaKey consists of concatenated encoded network name and encoded +network version. +MetaKeyPrefix consists only of encoded network name, and is therefore +a common prefix for all MetaKey corresponding to the given network +name and all available network versions.

+

Implementations§

source§

impl MetaKeyPrefix

source

pub fn from_name(name: &str) -> Self

Generate MetaKeyPrefix from network name

+
source

pub fn prefix(&self) -> Vec<u8>

Transform MetaKeyPrefix into Vec<u8> database key prefix

+

Trait Implementations§

source§

impl Debug for MetaKeyPrefix

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/keyring/struct.NetworkSpecsKey.html b/rustdocs/definitions/keyring/struct.NetworkSpecsKey.html new file mode 100644 index 0000000000..f403df05e0 --- /dev/null +++ b/rustdocs/definitions/keyring/struct.NetworkSpecsKey.html @@ -0,0 +1,179 @@ +NetworkSpecsKey in definitions::keyring - Rust
pub struct NetworkSpecsKey(_);
Expand description

Key in SPECSTREE tree (cold database) and in SPECSPREPTREE (hot database)

+

NetworkSpecsKey is used to retrieve the +OrderedNetworkSpecs in cold database and +NetworkSpecs in hot +database.

+

Key is derived from network genesis hash and encryption algorithm.

+

Network could support more than one encryption algorithm. In this case +there would be more than one database entry with different +NetworkSpecsKey values. Such entries do not conflict.

+

Implementations§

source§

impl NetworkSpecsKey

source

pub fn from_parts(genesis_hash: &H256, encryption: &Encryption) -> Self

Generate NetworkSpecsKey from parts: network genesis hash and +Encryption

+
source

pub fn from_ivec(ivec: &IVec) -> Self

Transform database IVec key into NetworkSpecsKey prior to processing

+

Infallible, no check of encryption validity is done here.

+
source

pub fn from_hex(hex_line: &str) -> Result<Self>

Transform hexadecimal String into NetworkSpecsKey

+

Vault receives hexadecimal strings from user interface.

+

This function checks only that hexadecimal format is valid, no check +of encryption validity is done here.

+
source

pub fn genesis_hash_encryption(&self) -> Result<(H256, Encryption)>

Get genesis hash as H256 and Encryption from NetworkSpecsKey

+
source

pub fn key(&self) -> Vec<u8>

Transform NetworkSpecsKey into Vec<u8> database key

+

Trait Implementations§

source§

impl Clone for NetworkSpecsKey

source§

fn clone(&self) -> NetworkSpecsKey

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NetworkSpecsKey

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for NetworkSpecsKey

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for NetworkSpecsKey

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl Hash for NetworkSpecsKey

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<NetworkSpecsKey> for NetworkSpecsKey

source§

fn eq(&self, other: &NetworkSpecsKey) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<NetworkSpecsKey> for NetworkSpecsKey

source§

impl Eq for NetworkSpecsKey

source§

impl StructuralEq for NetworkSpecsKey

source§

impl StructuralPartialEq for NetworkSpecsKey

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CallHasher for Twhere + T: Hash + ?Sized,

§

fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where + H: Hash + ?Sized, + B: BuildHasher,

§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeHash for Twhere + T: Hash,

§

impl<T> MaybeHash for Twhere + T: Hash,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/keyring/struct.Order.html b/rustdocs/definitions/keyring/struct.Order.html new file mode 100644 index 0000000000..6df77d4f71 --- /dev/null +++ b/rustdocs/definitions/keyring/struct.Order.html @@ -0,0 +1,135 @@ +Order in definitions::keyring - Rust

Struct definitions::keyring::Order

source ·
pub struct Order(_);
Expand description

Key in HISTORY tree (cold database)

+

Order is used to retrieve history log entry.

+

History log Entry contains timestamp and a set +of simultaneously occurred events.

+

Order is generated from the number of the history entry in the database +HISTORY tree.

+

Implementations§

source§

impl Order

source

pub fn from_ivec(ivec: &IVec) -> Result<Self>

Transform database IVec key into Order.

+

If Order could not be decoded, i.e. entry is corrupted, produces an +error.

+
source

pub fn from_number(n: u32) -> Self

Generate Order from u32 number

+
source

pub fn stamp(&self) -> u32

Produce u32 number from the Order.

+

Number here is the number of history entry in the HISTORY database.

+
source

pub fn store(&self) -> Vec<u8>

Transform Order into Vec<u8> database key

+

Trait Implementations§

source§

impl Clone for Order

source§

fn clone(&self) -> Order

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Order

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<Order> for Order

source§

fn eq(&self, other: &Order) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Order

source§

impl StructuralEq for Order

source§

impl StructuralPartialEq for Order

Auto Trait Implementations§

§

impl RefUnwindSafe for Order

§

impl Send for Order

§

impl Sync for Order

§

impl Unpin for Order

§

impl UnwindSafe for Order

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/keyring/struct.VerifierKey.html b/rustdocs/definitions/keyring/struct.VerifierKey.html new file mode 100644 index 0000000000..b7a7921466 --- /dev/null +++ b/rustdocs/definitions/keyring/struct.VerifierKey.html @@ -0,0 +1,166 @@ +VerifierKey in definitions::keyring - Rust
pub struct VerifierKey(_);
Expand description

Key in VERIFIERS tree (cold database)

+

VerifierKey is used to retrieve network verifier information.

+

Key is derived from network genesis hash.

+

Same VerifierKey and same CurrentVerifier +are corresponding to all network-associated information:

+
    +
  • network specs, for any encryption algorithm
  • +
  • network metadata
  • +
+

Implementations§

source§

impl VerifierKey

source

pub fn from_parts(genesis_hash: H256) -> Self

Generate VerifierKey from network genesis hash

+
source

pub fn from_ivec(ivec: &IVec) -> Result<Self>

Transform database IVec key into VerifierKey

+
source

pub fn genesis_hash(&self) -> H256

Get genesis hash from the VerifierKey

+
source

pub fn key(&self) -> Vec<u8>

Transform VerifierKey into Vec<u8> database key

+

Trait Implementations§

source§

impl Clone for VerifierKey

source§

fn clone(&self) -> VerifierKey

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for VerifierKey

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for VerifierKey

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for VerifierKey

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<VerifierKey> for VerifierKey

source§

fn eq(&self, other: &VerifierKey) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<VerifierKey> for VerifierKey

source§

impl Eq for VerifierKey

source§

impl StructuralEq for VerifierKey

source§

impl StructuralPartialEq for VerifierKey

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/metadata/fn.convert_wasm_into_metadata.html b/rustdocs/definitions/metadata/fn.convert_wasm_into_metadata.html new file mode 100644 index 0000000000..493048abae --- /dev/null +++ b/rustdocs/definitions/metadata/fn.convert_wasm_into_metadata.html @@ -0,0 +1,4 @@ +convert_wasm_into_metadata in definitions::metadata - Rust
pub fn convert_wasm_into_metadata(filename: &str) -> Result<Vec<u8>>
Expand description

Extracts raw metadata in Vec<u8> format from wasm file.

+

Is used only on Active side, to generate metadata updates before metadata +release.

+
\ No newline at end of file diff --git a/rustdocs/definitions/metadata/fn.info_from_metadata.html b/rustdocs/definitions/metadata/fn.info_from_metadata.html new file mode 100644 index 0000000000..f271ba7f80 --- /dev/null +++ b/rustdocs/definitions/metadata/fn.info_from_metadata.html @@ -0,0 +1,19 @@ +info_from_metadata in definitions::metadata - Rust
pub fn info_from_metadata(
+    runtime_metadata: &RuntimeMetadata
+) -> Result<MetaInfo>
Expand description

Get MetaInfo from +RuntimeMetadata

+

Searches System pallet within the metadata, gets from it Version and +optionally SS58Prefix constants.

+

Produces MetaInfo if the metadata is suitable for the Vault, and +MetadataError if not.

+

RuntimeMetadata suitable for use in Vault:

+
    +
  • must be of runtime version V12 or above
  • +
  • must have ‘System’ pallet
  • +
  • must have Version constant in System pallet, SCALE-decodeable
  • +
  • can have SS58Prefix constant in System pallet, and if it does, the +constant must be SCALE-decodeable
  • +
+

Additionally, for RuntimeMetadataV14 +the extensions set must be decoding-compatible for any signable transaction.

+
\ No newline at end of file diff --git a/rustdocs/definitions/metadata/fn.runtime_metadata_from_slice.html b/rustdocs/definitions/metadata/fn.runtime_metadata_from_slice.html new file mode 100644 index 0000000000..0055811297 --- /dev/null +++ b/rustdocs/definitions/metadata/fn.runtime_metadata_from_slice.html @@ -0,0 +1,8 @@ +runtime_metadata_from_slice in definitions::metadata - Rust
pub fn runtime_metadata_from_slice(meta: &[u8]) -> Result<RuntimeMetadata>
Expand description

Get RuntimeMetadata +from slice of raw Vec<u8> metadata

+

Raw Vec<u8> metadata suitable for use in Vault:

+
    +
  • must begin with b“meta“
  • +
  • after that must be SCALE-encoded RuntimeMetadata with runtime version V12 or above
  • +
+
\ No newline at end of file diff --git a/rustdocs/definitions/metadata/index.html b/rustdocs/definitions/metadata/index.html new file mode 100644 index 0000000000..f47261c8c4 --- /dev/null +++ b/rustdocs/definitions/metadata/index.html @@ -0,0 +1,22 @@ +definitions::metadata - Rust

Module definitions::metadata

source ·
Expand description

Network metadata and related types

+

The main purpose of the Vault is to generate signatures for transactions. +Vault reads the transactions as QR codes with SCALE-encoded +information. +Any transaction before user is able to sign it must be decoded.

+

Transaction decoding uses network metadata, and Vault needs latest +available network metadata to parse freshly generated transactions.

+

New network metadata could be added to Vault through scanning load_metadata +QR code for the network metadata. Vault allows loading new metadata only if +the network has network specs in the database and the incoming load_metadata +payload is signed by the verifier already associated with the network.

+

Metadata is stored both in cold and in hot databases tree METATREE as +SCALE-encoded MetaValues under key MetaKey.

+

Structs

  • Network information needed for RPC calls in the network and for managing the +hot database
  • META_HISTORY tree entry
  • Network information extracted from the metadata: name, version, optional +base58 prefix, warning about extensions incompatible with transaction +parsing for RuntimeMetadata with version 14 and above
  • Metadata as checked RuntimeMetadata +with network info extracted from it, for transaction decoding
  • Metadata values: name, version, optional base58 prefix, warning about +extensions incompatible with transaction parsing for RuntimeMetadata with +version 14 and above, and metadata itself as raw Vec<u8>

Functions

\ No newline at end of file diff --git a/rustdocs/definitions/metadata/sidebar-items.js b/rustdocs/definitions/metadata/sidebar-items.js new file mode 100644 index 0000000000..9312a715a4 --- /dev/null +++ b/rustdocs/definitions/metadata/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["convert_wasm_into_metadata","info_from_metadata","runtime_metadata_from_slice"],"struct":["AddressBookEntry","MetaHistoryEntry","MetaInfo","MetaSetElement","MetaValues"]}; \ No newline at end of file diff --git a/rustdocs/definitions/metadata/struct.AddressBookEntry.html b/rustdocs/definitions/metadata/struct.AddressBookEntry.html new file mode 100644 index 0000000000..9caa6f8a92 --- /dev/null +++ b/rustdocs/definitions/metadata/struct.AddressBookEntry.html @@ -0,0 +1,186 @@ +AddressBookEntry in definitions::metadata - Rust
pub struct AddressBookEntry {
+    pub name: String,
+    pub genesis_hash: H256,
+    pub address: String,
+    pub encryption: Encryption,
+    pub def: bool,
+}
Expand description

Network information needed for RPC calls in the network and for managing the +hot database

+

Hot database contains tree ADDRESS_BOOK with information needed to perform +RPC calls in networks and generate load_metadata and add_specs payloads.

+

ADDRESS_BOOK tree stores SCALE-encoded AddressBookEntry entries under +keys AddressBookKey

+

Fields§

§name: String

Network name, as it appears in Version constant in metadata

+

If network data is queried through RPC call, retrieved metadata must +have exactly same network name in Version constant

+
§genesis_hash: H256

Network genesis hash

+

If network data is queried through RPC call, retrieved version must +be same as the one in address book

+
§address: String

URL address for RPC calls, with or without preferred port

+
§encryption: Encryption

Encryption that is supported by the network

+
§def: bool

Address book entry is the default one

+

Default networks currently are Polkadot, Kusama, Westend with Sr25519 +encryption

+

Implementations§

source§

impl AddressBookEntry

source

pub fn from_entry( + (address_book_key_encoded, address_book_entry_encoded): (IVec, IVec) +) -> Result<AddressBookEntry>

Gets AddressBookEntry from from hot database tree ADDRESS_BOOK +(key, value) entry.

+
source

pub fn process_entry( + (address_book_key_encoded, address_book_entry_encoded): (IVec, IVec) +) -> Result<(String, AddressBookEntry)>

Gets network address book title and AddressBookEntry as a tuple from +from hot database tree ADDRESS_BOOK (key, value) entry.

+

Network address book title differs from title in network specs. +This is just a key in hot database ADDRESS_BOOK, and is not displayed +anywhere else.

+
source

pub fn from_entry_with_title( + _title: &str, + address_book_entry_encoded: &IVec +) -> Result<AddressBookEntry>

Gets AddressBookEntry from network address book title and associated +value from hot database tree ADDRESS_BOOK.

+

Trait Implementations§

source§

impl Debug for AddressBookEntry

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for AddressBookEntry

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for AddressBookEntry

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<AddressBookEntry> for AddressBookEntry

source§

fn eq(&self, other: &AddressBookEntry) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<AddressBookEntry> for AddressBookEntry

source§

impl Eq for AddressBookEntry

source§

impl StructuralEq for AddressBookEntry

source§

impl StructuralPartialEq for AddressBookEntry

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/metadata/struct.MetaHistoryEntry.html b/rustdocs/definitions/metadata/struct.MetaHistoryEntry.html new file mode 100644 index 0000000000..ebccf2cc25 --- /dev/null +++ b/rustdocs/definitions/metadata/struct.MetaHistoryEntry.html @@ -0,0 +1,133 @@ +MetaHistoryEntry in definitions::metadata - Rust
pub struct MetaHistoryEntry {
+    pub name: String,
+    pub version: u32,
+    pub block_hash: H256,
+}
Expand description

META_HISTORY tree entry

+

Fields§

§name: String

network name, from key

+
§version: u32

network metadata version, from key

+
§block_hash: H256

block hash at which the metadata was fetched, from value

+

Implementations§

source§

impl MetaHistoryEntry

source

pub fn from_entry((meta_key_vec, hash_encoded): (IVec, IVec)) -> Result<Self>

From the whole entry

+
source

pub fn from_entry_with_key_parts( + name: &str, + version: u32, + hash_encoded: &IVec +) -> Result<Self>

From the entry with already known key parts

+

Trait Implementations§

source§

impl Debug for MetaHistoryEntry

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MetaHistoryEntry> for MetaHistoryEntry

source§

fn eq(&self, other: &MetaHistoryEntry) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MetaHistoryEntry

source§

impl StructuralEq for MetaHistoryEntry

source§

impl StructuralPartialEq for MetaHistoryEntry

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/metadata/struct.MetaInfo.html b/rustdocs/definitions/metadata/struct.MetaInfo.html new file mode 100644 index 0000000000..0a4346d900 --- /dev/null +++ b/rustdocs/definitions/metadata/struct.MetaInfo.html @@ -0,0 +1,162 @@ +MetaInfo in definitions::metadata - Rust
pub struct MetaInfo {
+    pub name: String,
+    pub version: u32,
+    pub optional_base58prefix: Option<u16>,
+    pub warn_incomplete_extensions: bool,
+}
Expand description

Network information extracted from the metadata: name, version, optional +base58 prefix, warning about extensions incompatible with transaction +parsing for RuntimeMetadata with version 14 and above

+

Fields§

§name: String

Network name, from metadata Version constant

+
§version: u32

Network version, from in metadata Version constant

+
§optional_base58prefix: Option<u16>

Network base58 prefix, could be encountered in metadata SS58Prefix +constant

+

If SS58Prefix constant is present in metadata, the prefix derived +from it is expected to match base58prefix from OrderedNetworkSpecs.

+
§warn_incomplete_extensions: bool

Flag to indicate that extrinsic set from metadata with +RuntimeMetadataV14 +is insufficient for transaction decoding

+

Trait Implementations§

source§

impl Decode for MetaInfo

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for MetaInfo

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<MetaInfo> for MetaInfo

source§

fn eq(&self, other: &MetaInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<MetaInfo> for MetaInfo

source§

impl Eq for MetaInfo

source§

impl StructuralEq for MetaInfo

source§

impl StructuralPartialEq for MetaInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/metadata/struct.MetaSetElement.html b/rustdocs/definitions/metadata/struct.MetaSetElement.html new file mode 100644 index 0000000000..c51c35fb9e --- /dev/null +++ b/rustdocs/definitions/metadata/struct.MetaSetElement.html @@ -0,0 +1,127 @@ +MetaSetElement in definitions::metadata - Rust
pub struct MetaSetElement { /* private fields */ }
Expand description

Metadata as checked RuntimeMetadata +with network info extracted from it, for transaction decoding

+

Implementations§

source§

impl MetaSetElement

source

pub fn from_entry((meta_key_vec, meta_encoded): (IVec, IVec)) -> Result<Self>

Generates MetaSetElement from Vault database tree METATREE (key, value) +entry

+

Checks that name and version from MetaKey match the ones in metadata +Version constant.

+

Also checks that the metadata is suitable for use in Vault. Since the +metadata already was accepted in the database at some point, errors here +are very unlikely to happen and would indicate the database corruption

+
source

pub fn name(&self) -> String

Gets network name

+
source

pub fn version(&self) -> u32

Gets network version

+
source

pub fn optional_base58prefix(&self) -> Option<u16>

Gets optional base58 prefix, if there is one in the metadata

+
source

pub fn runtime_metadata(&self) -> &RuntimeMetadata

Gets runtime metadata, to be used in transcation decoding

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

\ No newline at end of file diff --git a/rustdocs/definitions/metadata/struct.MetaValues.html b/rustdocs/definitions/metadata/struct.MetaValues.html new file mode 100644 index 0000000000..fdaafd73a9 --- /dev/null +++ b/rustdocs/definitions/metadata/struct.MetaValues.html @@ -0,0 +1,165 @@ +MetaValues in definitions::metadata - Rust
pub struct MetaValues {
+    pub name: String,
+    pub version: u32,
+    pub optional_base58prefix: Option<u16>,
+    pub warn_incomplete_extensions: bool,
+    pub meta: Vec<u8>,
+}
Expand description

Metadata values: name, version, optional base58 prefix, warning about +extensions incompatible with transaction parsing for RuntimeMetadata with +version 14 and above, and metadata itself as raw Vec<u8>

+

Fields§

§name: String

Network name, from metadata Version constant

+
§version: u32

Network version, from in metadata Version constant

+
§optional_base58prefix: Option<u16>

Network base58 prefix, could be encountered in metadata SS58Prefix +constant

+

If SS58Prefix constant is present in metadata, the prefix derived +from it is expected to match base58prefix from OrderedNetworkSpecs.

+
§warn_incomplete_extensions: bool

Flag to indicate that extrinsic set from metadata with +RuntimeMetadataV14 +is insufficient for transaction decoding

+
§meta: Vec<u8>

raw metadata

+

Implementations§

source§

impl MetaValues

source

pub fn from_entry_name_version_checked( + name: &str, + version: u32, + meta_encoded: IVec +) -> Result<Self>

Generates MetaValues from value extracted from database tree +METATREE either in cold or in hot database using known associated +network name and network version

+

Checks that input name and version match the ones in metadata Version +constant.

+
source

pub fn from_entry_checked( + (meta_key_vec, meta_encoded): (IVec, IVec) +) -> Result<Self>

Gets MetaValues from either cold or hot database tree METATREE +(key, value) entry

+

Checks that name and version from MetaKey match the ones in metadata +Version constant.

+
source

pub fn from_slice_metadata(meta_slice: &[u8]) -> Result<Self>

Gets MetaValues from raw metadata in Vec<u8> format

+

Produces MetadataError if the metadata is somehow not suitable for +use in Vault.

+
source

pub fn from_wasm_file(filename: &str) -> Result<Self>

Gets MetaValues from wasm file

+

Could be used to generate metadata updates before metadata release.

+
source

pub fn from_str_metadata(meta: &str) -> Result<Self>

Gets MetaValues from raw hexadecimal metadata

+

Is used only on Active side, for: +(a) default and test metadata loading; +(b) decoding and evaluating fetched metadata;

+

Trait Implementations§

source§

impl Clone for MetaValues

source§

fn clone(&self) -> MetaValues

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MetaValues

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MetaValues> for MetaValues

source§

fn eq(&self, other: &MetaValues) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MetaValues

source§

impl StructuralEq for MetaValues

source§

impl StructuralPartialEq for MetaValues

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.AlertData.html b/rustdocs/definitions/navigation/enum.AlertData.html new file mode 100644 index 0000000000..9ea1093556 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.AlertData.html @@ -0,0 +1,130 @@ +AlertData in definitions::navigation - Rust
pub enum AlertData {
+    Shield {
+        f: Option<ShieldAlert>,
+    },
+    ErrorData {
+        f: String,
+    },
+    Confirm,
+}

Variants§

§

Shield

§

ErrorData

Fields

§

Confirm

Trait Implementations§

source§

impl Clone for AlertData

source§

fn clone(&self) -> AlertData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AlertData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<AlertData> for AlertData

source§

fn eq(&self, other: &AlertData) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for AlertData

source§

impl StructuralEq for AlertData

source§

impl StructuralPartialEq for AlertData

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.BananaSplitRecoveryResult.html b/rustdocs/definitions/navigation/enum.BananaSplitRecoveryResult.html new file mode 100644 index 0000000000..05dff295c9 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.BananaSplitRecoveryResult.html @@ -0,0 +1,127 @@ +BananaSplitRecoveryResult in definitions::navigation - Rust
pub enum BananaSplitRecoveryResult {
+    RequestPassword,
+    RecoveredSeed {
+        s: String,
+    },
+}

Variants§

§

RequestPassword

§

RecoveredSeed

Fields

Trait Implementations§

source§

impl Clone for BananaSplitRecoveryResult

source§

fn clone(&self) -> BananaSplitRecoveryResult

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for BananaSplitRecoveryResult

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<BananaSplitRecoveryResult> for BananaSplitRecoveryResult

source§

fn eq(&self, other: &BananaSplitRecoveryResult) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for BananaSplitRecoveryResult

source§

impl StructuralEq for BananaSplitRecoveryResult

source§

impl StructuralPartialEq for BananaSplitRecoveryResult

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.Card.html b/rustdocs/definitions/navigation/enum.Card.html new file mode 100644 index 0000000000..d382e51658 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.Card.html @@ -0,0 +1,224 @@ +Card in definitions::navigation - Rust
pub enum Card {
+
Show 35 variants AuthorCard { + f: MAddressCard, + }, + AuthorPlainCard { + f: MSCId, + }, + AuthorPublicKeyCard { + f: MVerifierDetails, + }, + BalanceCard { + f: MSCCurrency, + }, + BitVecCard { + f: String, + }, + BlockHashCard { + f: String, + }, + CallCard { + f: MSCCall, + }, + DefaultCard { + f: String, + }, + DerivationsCard { + f: Vec<SeedKeysPreview>, + }, + EnumVariantNameCard { + f: MSCEnumVariantName, + }, + EraImmortalCard, + EraMortalCard { + f: MSCEraMortal, + }, + ErrorCard { + f: String, + }, + FieldNameCard { + f: MSCFieldName, + }, + FieldNumberCard { + f: MSCFieldNumber, + }, + IdCard { + f: MSCId, + }, + IdentityFieldCard { + f: String, + }, + MetaCard { + f: MMetadataRecord, + }, + NameVersionCard { + f: MSCNameVersion, + }, + NetworkGenesisHashCard { + f: String, + }, + NetworkNameCard { + f: String, + }, + NetworkInfoCard { + f: MSCNetworkInfo, + }, + NewSpecsCard { + f: NetworkSpecs, + }, + NonceCard { + f: String, + }, + NoneCard, + PalletCard { + f: String, + }, + TextCard { + f: String, + }, + TipCard { + f: MSCCurrency, + }, + TipPlainCard { + f: String, + }, + TxSpecCard { + f: String, + }, + TxSpecPlainCard { + f: MSCTxSpecPlain, + }, + TypesInfoCard { + f: MTypesInfo, + }, + VarNameCard { + f: String, + }, + VerifierCard { + f: MVerifierDetails, + }, + WarningCard { + f: String, + }, +
}

Variants§

§

AuthorCard

§

AuthorPlainCard

Fields

§

AuthorPublicKeyCard

§

BalanceCard

Fields

§

BitVecCard

Fields

§

BlockHashCard

Fields

§

CallCard

Fields

§

DefaultCard

Fields

§

DerivationsCard

§

EnumVariantNameCard

§

EraImmortalCard

§

EraMortalCard

§

ErrorCard

Fields

§

FieldNameCard

§

FieldNumberCard

§

IdCard

Fields

§

IdentityFieldCard

Fields

§

MetaCard

§

NameVersionCard

§

NetworkGenesisHashCard

Fields

§

NetworkNameCard

Fields

§

NetworkInfoCard

§

NewSpecsCard

§

NonceCard

Fields

§

NoneCard

§

PalletCard

Fields

§

TextCard

Fields

§

TipCard

Fields

§

TipPlainCard

Fields

§

TxSpecCard

Fields

§

TxSpecPlainCard

§

TypesInfoCard

Fields

§

VarNameCard

Fields

§

VerifierCard

§

WarningCard

Fields

Trait Implementations§

source§

impl Clone for Card

source§

fn clone(&self) -> Card

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Card

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<Card> for Card

source§

fn eq(&self, other: &Card) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Card

source§

impl StructuralEq for Card

source§

impl StructuralPartialEq for Card

Auto Trait Implementations§

§

impl RefUnwindSafe for Card

§

impl Send for Card

§

impl Sync for Card

§

impl Unpin for Card

§

impl UnwindSafe for Card

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.DecodeSequenceResult.html b/rustdocs/definitions/navigation/enum.DecodeSequenceResult.html new file mode 100644 index 0000000000..c9efabba46 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.DecodeSequenceResult.html @@ -0,0 +1,135 @@ +DecodeSequenceResult in definitions::navigation - Rust
pub enum DecodeSequenceResult {
+    BBananaSplitRecoveryResult {
+        b: BananaSplitRecoveryResult,
+    },
+    DynamicDerivations {
+        s: String,
+    },
+    DynamicDerivationTransaction {
+        s: Vec<String>,
+    },
+    Other {
+        s: String,
+    },
+}

Variants§

§

BBananaSplitRecoveryResult

§

DynamicDerivations

Fields

§

DynamicDerivationTransaction

Fields

§

Other

Fields

Trait Implementations§

source§

impl Clone for DecodeSequenceResult

source§

fn clone(&self) -> DecodeSequenceResult

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DecodeSequenceResult

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DecodeSequenceResult> for DecodeSequenceResult

source§

fn eq(&self, other: &DecodeSequenceResult) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DecodeSequenceResult

source§

impl StructuralEq for DecodeSequenceResult

source§

impl StructuralPartialEq for DecodeSequenceResult

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.DerivationDestination.html b/rustdocs/definitions/navigation/enum.DerivationDestination.html new file mode 100644 index 0000000000..454a0dd082 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.DerivationDestination.html @@ -0,0 +1,125 @@ +DerivationDestination in definitions::navigation - Rust
pub enum DerivationDestination {
+    Pwd,
+    Pin,
+}

Variants§

§

Pwd

§

Pin

Trait Implementations§

source§

impl Clone for DerivationDestination

source§

fn clone(&self) -> DerivationDestination

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DerivationDestination

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DerivationDestination> for DerivationDestination

source§

fn eq(&self, other: &DerivationDestination) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DerivationDestination

source§

impl StructuralEq for DerivationDestination

source§

impl StructuralPartialEq for DerivationDestination

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.ExportedSet.html b/rustdocs/definitions/navigation/enum.ExportedSet.html new file mode 100644 index 0000000000..68732827cc --- /dev/null +++ b/rustdocs/definitions/navigation/enum.ExportedSet.html @@ -0,0 +1,127 @@ +ExportedSet in definitions::navigation - Rust
pub enum ExportedSet {
+    All,
+    Selected {
+        s: Vec<PathAndNetwork>,
+    },
+}

Variants§

§

All

§

Selected

Trait Implementations§

source§

impl Clone for ExportedSet

source§

fn clone(&self) -> ExportedSet

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ExportedSet

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<ExportedSet> for ExportedSet

source§

fn eq(&self, other: &ExportedSet) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for ExportedSet

source§

impl StructuralEq for ExportedSet

source§

impl StructuralPartialEq for ExportedSet

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.FooterButton.html b/rustdocs/definitions/navigation/enum.FooterButton.html new file mode 100644 index 0000000000..4d443f3cb6 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.FooterButton.html @@ -0,0 +1,128 @@ +FooterButton in definitions::navigation - Rust
pub enum FooterButton {
+    Log,
+    Scan,
+    Keys,
+    Settings,
+    Back,
+}

Variants§

§

Log

§

Scan

§

Keys

§

Settings

§

Back

Trait Implementations§

source§

impl Clone for FooterButton

source§

fn clone(&self) -> FooterButton

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for FooterButton

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<FooterButton> for FooterButton

source§

fn eq(&self, other: &FooterButton) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for FooterButton

source§

impl StructuralEq for FooterButton

source§

impl StructuralPartialEq for FooterButton

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.Identicon.html b/rustdocs/definitions/navigation/enum.Identicon.html new file mode 100644 index 0000000000..ef0e52411b --- /dev/null +++ b/rustdocs/definitions/navigation/enum.Identicon.html @@ -0,0 +1,133 @@ +Identicon in definitions::navigation - Rust
pub enum Identicon {
+    Dots {
+        identity: Vec<u8>,
+    },
+    Blockies {
+        identity: String,
+    },
+    Jdenticon {
+        identity: String,
+    },
+}

Variants§

§

Dots

Fields

§identity: Vec<u8>
§

Blockies

Fields

§identity: String
§

Jdenticon

Fields

§identity: String

Trait Implementations§

source§

impl Clone for Identicon

source§

fn clone(&self) -> Identicon

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Identicon

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Identicon

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl PartialEq<Identicon> for Identicon

source§

fn eq(&self, other: &Identicon) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Identicon

source§

impl StructuralEq for Identicon

source§

impl StructuralPartialEq for Identicon

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.MSCContent.html b/rustdocs/definitions/navigation/enum.MSCContent.html new file mode 100644 index 0000000000..5901c9f1c7 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.MSCContent.html @@ -0,0 +1,134 @@ +MSCContent in definitions::navigation - Rust
pub enum MSCContent {
+    LoadTypes {
+        types: String,
+        pic: Identicon,
+    },
+    LoadMetadata {
+        name: String,
+        version: u32,
+    },
+    AddSpecs {
+        f: MSCNetworkInfo,
+    },
+}

Variants§

§

LoadTypes

Fields

§types: String
§

LoadMetadata

Fields

§name: String
§version: u32
§

AddSpecs

Trait Implementations§

source§

impl Clone for MSCContent

source§

fn clone(&self) -> MSCContent

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCContent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCContent> for MSCContent

source§

fn eq(&self, other: &MSCContent) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCContent

source§

impl StructuralEq for MSCContent

source§

impl StructuralPartialEq for MSCContent

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.ModalData.html b/rustdocs/definitions/navigation/enum.ModalData.html new file mode 100644 index 0000000000..38d8fd96fb --- /dev/null +++ b/rustdocs/definitions/navigation/enum.ModalData.html @@ -0,0 +1,163 @@ +ModalData in definitions::navigation - Rust
pub enum ModalData {
+
Show 16 variants SufficientCryptoReady { + f: MSufficientCryptoReady, + }, + Backup { + f: MBackup, + }, + SeedMenu { + f: MSeedMenu, + }, + NewSeedBackup { + f: MNewSeedBackup, + }, + NetworkSelector { + f: MNetworkMenu, + }, + PasswordConfirm { + f: MPasswordConfirm, + }, + SignatureReady { + f: MSignatureReady, + }, + EnterPassword { + f: MEnterPassword, + }, + LogRight { + f: MLogRight, + }, + TypesInfo { + f: MTypesInfo, + }, + NewSeedMenu, + NetworkDetailsMenu, + ManageMetadata { + f: MManageMetadata, + }, + KeyDetailsAction, + LogComment, + SelectSeed { + f: MSeeds, + }, +
}

Variants§

§

SufficientCryptoReady

§

Backup

Fields

§

SeedMenu

Fields

§

NewSeedBackup

§

NetworkSelector

§

PasswordConfirm

§

SignatureReady

§

EnterPassword

§

LogRight

Fields

§

TypesInfo

Fields

§

NewSeedMenu

§

NetworkDetailsMenu

§

ManageMetadata

§

KeyDetailsAction

§

LogComment

§

SelectSeed

Fields

Trait Implementations§

source§

impl Clone for ModalData

source§

fn clone(&self) -> ModalData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ModalData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<ModalData> for ModalData

source§

fn eq(&self, other: &ModalData) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for ModalData

source§

impl StructuralEq for ModalData

source§

impl StructuralPartialEq for ModalData

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.QrData.html b/rustdocs/definitions/navigation/enum.QrData.html new file mode 100644 index 0000000000..bd99a667bd --- /dev/null +++ b/rustdocs/definitions/navigation/enum.QrData.html @@ -0,0 +1,132 @@ +QrData in definitions::navigation - Rust
pub enum QrData {
+    Regular {
+        data: Vec<u8>,
+    },
+    Sensitive {
+        data: Vec<u8>,
+    },
+}

Variants§

§

Regular

Fields

§data: Vec<u8>
§

Sensitive

Fields

§data: Vec<u8>

Implementations§

source§

impl QrData

source

pub fn len(&self) -> usize

Get the length of the underlying data

+
source

pub fn data(&self) -> &[u8]

Get a reference to the underlying data.

+
source

pub fn is_empty(&self) -> bool

If the underlying data is empty.

+

Trait Implementations§

source§

impl Clone for QrData

source§

fn clone(&self) -> QrData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for QrData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<QrData> for QrData

source§

fn eq(&self, other: &QrData) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for QrData

source§

impl StructuralEq for QrData

source§

impl StructuralPartialEq for QrData

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.RightButton.html b/rustdocs/definitions/navigation/enum.RightButton.html new file mode 100644 index 0000000000..60340280e7 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.RightButton.html @@ -0,0 +1,130 @@ +RightButton in definitions::navigation - Rust
pub enum RightButton {
+    LogRight,
+    NewSeed,
+    Backup,
+    MultiSelect,
+    NDMenu,
+    TypesInfo,
+    KeyMenu,
+}

Variants§

§

LogRight

§

NewSeed

§

Backup

§

MultiSelect

§

NDMenu

§

TypesInfo

§

KeyMenu

Trait Implementations§

source§

impl Clone for RightButton

source§

fn clone(&self) -> RightButton

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RightButton

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<RightButton> for RightButton

source§

fn eq(&self, other: &RightButton) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for RightButton

source§

impl StructuralEq for RightButton

source§

impl StructuralPartialEq for RightButton

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.ScreenData.html b/rustdocs/definitions/navigation/enum.ScreenData.html new file mode 100644 index 0000000000..12e65b1372 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.ScreenData.html @@ -0,0 +1,176 @@ +ScreenData in definitions::navigation - Rust
pub enum ScreenData {
+
Show 19 variants Scan, + Keys { + f: String, + }, + Settings { + f: MSettings, + }, + Log { + f: MLog, + }, + LogDetails { + f: MLogDetails, + }, + Transaction { + f: Vec<MTransaction>, + }, + SeedSelector { + f: MSeeds, + }, + KeyDetails { + f: Option<MKeyDetails>, + }, + NewSeed { + f: MNewSeed, + }, + RecoverSeedName { + f: MRecoverSeedName, + }, + RecoverSeedPhrase { + f: MRecoverSeedPhrase, + }, + DeriveKey { + f: MDeriveKey, + }, + VVerifier { + f: MVerifierDetails, + }, + ManageNetworks { + f: MManageNetworks, + }, + NNetworkDetails { + f: MNetworkDetails, + }, + SignSufficientCrypto { + f: MSignSufficientCrypto, + }, + SelectSeedForBackup { + f: MSeeds, + }, + Documents, + KeyDetailsMulti { + f: MKeyDetailsMulti, + }, +
}

Variants§

§

Scan

§

Keys

Fields

§

Settings

Fields

§

Log

Fields

§

LogDetails

Fields

§

Transaction

§

SeedSelector

Fields

§

KeyDetails

§

NewSeed

Fields

§

RecoverSeedName

§

RecoverSeedPhrase

§

DeriveKey

Fields

§

VVerifier

§

ManageNetworks

§

NNetworkDetails

§

SignSufficientCrypto

§

SelectSeedForBackup

Fields

§

Documents

§

KeyDetailsMulti

Trait Implementations§

source§

impl Clone for ScreenData

source§

fn clone(&self) -> ScreenData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ScreenData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<ScreenData> for ScreenData

source§

fn eq(&self, other: &ScreenData) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for ScreenData

source§

impl StructuralEq for ScreenData

source§

impl StructuralPartialEq for ScreenData

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.ScreenNameType.html b/rustdocs/definitions/navigation/enum.ScreenNameType.html new file mode 100644 index 0000000000..545c5cd2e6 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.ScreenNameType.html @@ -0,0 +1,125 @@ +ScreenNameType in definitions::navigation - Rust
pub enum ScreenNameType {
+    H1,
+    H4,
+}

Variants§

§

H1

§

H4

Trait Implementations§

source§

impl Clone for ScreenNameType

source§

fn clone(&self) -> ScreenNameType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ScreenNameType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<ScreenNameType> for ScreenNameType

source§

fn eq(&self, other: &ScreenNameType) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for ScreenNameType

source§

impl StructuralEq for ScreenNameType

source§

impl StructuralPartialEq for ScreenNameType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.ShieldAlert.html b/rustdocs/definitions/navigation/enum.ShieldAlert.html new file mode 100644 index 0000000000..ab4e446bc8 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.ShieldAlert.html @@ -0,0 +1,124 @@ +ShieldAlert in definitions::navigation - Rust
pub enum ShieldAlert {
+    Past,
+}

Variants§

§

Past

Trait Implementations§

source§

impl Clone for ShieldAlert

source§

fn clone(&self) -> ShieldAlert

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ShieldAlert

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<ShieldAlert> for ShieldAlert

source§

fn eq(&self, other: &ShieldAlert) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for ShieldAlert

source§

impl StructuralEq for ShieldAlert

source§

impl StructuralPartialEq for ShieldAlert

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.StubNav.html b/rustdocs/definitions/navigation/enum.StubNav.html new file mode 100644 index 0000000000..44fb3c2328 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.StubNav.html @@ -0,0 +1,135 @@ +StubNav in definitions::navigation - Rust
pub enum StubNav {
+    AddSpecs {
+        n: NetworkSpecsKey,
+    },
+    LoadMeta {
+        l: NetworkSpecsKey,
+    },
+    LoadTypes,
+}
Expand description

Enum describing Stub content. +Is used for proper navigation. Variants: +AddSpecs (with associated NetworkSpecsKey), LoadMeta (with associated +NetworkSpecsKey for the first by order network using those metadata), +and LoadTypes

+

Variants§

§

AddSpecs

§

LoadMeta

§

LoadTypes

Trait Implementations§

source§

impl Clone for StubNav

source§

fn clone(&self) -> StubNav

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StubNav

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<StubNav> for StubNav

source§

fn eq(&self, other: &StubNav) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for StubNav

source§

impl StructuralEq for StubNav

source§

impl StructuralPartialEq for StubNav

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.TransactionAction.html b/rustdocs/definitions/navigation/enum.TransactionAction.html new file mode 100644 index 0000000000..a59e519508 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.TransactionAction.html @@ -0,0 +1,141 @@ +TransactionAction in definitions::navigation - Rust
pub enum TransactionAction {
+    Derivations {
+        content: Box<TransactionCardSet>,
+    },
+    Sign {
+        actions: Vec<TransactionSignAction>,
+        checksum: u32,
+    },
+    Stub {
+        s: Box<TransactionCardSet>,
+        u: u32,
+        stub: StubNav,
+    },
+    Read {
+        r: Box<TransactionCardSet>,
+    },
+}
Expand description

Enum containing card sets for four different outcomes: +importing derivations (Derivations), signing (Sign), +accepting (Stub) and reading, for example, in case of an error (Read)

+

Variants§

§

Derivations

Fields

§

Sign

Fields

§checksum: u32
§

Stub

§

Read

Trait Implementations§

source§

impl Clone for TransactionAction

source§

fn clone(&self) -> TransactionAction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TransactionAction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<TransactionAction> for TransactionAction

source§

fn eq(&self, other: &TransactionAction) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for TransactionAction

source§

impl StructuralEq for TransactionAction

source§

impl StructuralPartialEq for TransactionAction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/enum.TransactionType.html b/rustdocs/definitions/navigation/enum.TransactionType.html new file mode 100644 index 0000000000..32d5a394e9 --- /dev/null +++ b/rustdocs/definitions/navigation/enum.TransactionType.html @@ -0,0 +1,128 @@ +TransactionType in definitions::navigation - Rust
pub enum TransactionType {
+    Sign,
+    Stub,
+    Read,
+    ImportDerivations,
+    Done,
+}

Variants§

§

Sign

§

Stub

§

Read

§

ImportDerivations

§

Done

Trait Implementations§

source§

impl Clone for TransactionType

source§

fn clone(&self) -> TransactionType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TransactionType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<TransactionType> for TransactionType

source§

fn eq(&self, other: &TransactionType) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for TransactionType

source§

impl StructuralEq for TransactionType

source§

impl StructuralPartialEq for TransactionType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/index.html b/rustdocs/definitions/navigation/index.html new file mode 100644 index 0000000000..e7fce9837d --- /dev/null +++ b/rustdocs/definitions/navigation/index.html @@ -0,0 +1,7 @@ +definitions::navigation - Rust

Module definitions::navigation

source ·

Re-exports

Structs

Enums

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/sidebar-items.js b/rustdocs/definitions/navigation/sidebar-items.js new file mode 100644 index 0000000000..ed590b95b9 --- /dev/null +++ b/rustdocs/definitions/navigation/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["AlertData","BananaSplitRecoveryResult","Card","DecodeSequenceResult","DerivationDestination","ExportedSet","FooterButton","Identicon","MSCContent","ModalData","QrData","RightButton","ScreenData","ScreenNameType","ShieldAlert","StubNav","TransactionAction","TransactionType"],"struct":["ActionResult","Address","DDDetail","DDKeySet","DDPreview","DerivationCheck","DerivationEntry","DerivationPack","History","LogScreenEntry","MAddressCard","MBackup","MDeriveKey","MEnterPassword","MEventMaybeDecoded","MKeyAndNetworkCard","MKeyDetails","MKeyDetailsMulti","MKeysCard","MKeysInfoExport","MKeysNew","MLog","MLogDetails","MLogRight","MMMNetwork","MMNetwork","MManageMetadata","MManageNetworks","MMetadataRecord","MNetworkCard","MNetworkDetails","MNetworkMenu","MNewSeed","MNewSeedBackup","MPasswordConfirm","MRawKey","MRecoverSeedName","MRecoverSeedPhrase","MSCCall","MSCCurrency","MSCEnumVariantName","MSCEraMortal","MSCFieldName","MSCFieldNumber","MSCId","MSCNameVersion","MSCNetworkInfo","MSCTip","MSCTxSpecPlain","MSeedMenu","MSeeds","MSettings","MSignSufficientCrypto","MSignatureReady","MSignedTransaction","MSufficientCryptoReady","MTransaction","MTypesInfo","MVerifier","MVerifierDetails","Network","PathAndNetwork","SeedNameCard","SeedNameWithIdenticon","TransactionCard","TransactionCardSet","TransactionSignAction"]}; \ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.ActionResult.html b/rustdocs/definitions/navigation/struct.ActionResult.html new file mode 100644 index 0000000000..5629bdb77a --- /dev/null +++ b/rustdocs/definitions/navigation/struct.ActionResult.html @@ -0,0 +1,132 @@ +ActionResult in definitions::navigation - Rust
pub struct ActionResult {
+    pub screen_label: String,
+    pub back: bool,
+    pub footer: bool,
+    pub footer_button: Option<FooterButton>,
+    pub right_button: Option<RightButton>,
+    pub screen_name_type: ScreenNameType,
+    pub screen_data: ScreenData,
+    pub modal_data: Option<ModalData>,
+    pub alert_data: Option<AlertData>,
+}

Fields§

§screen_label: String§back: bool§footer: bool§footer_button: Option<FooterButton>§right_button: Option<RightButton>§screen_name_type: ScreenNameType§screen_data: ScreenData§modal_data: Option<ModalData>§alert_data: Option<AlertData>

Trait Implementations§

source§

impl Clone for ActionResult

source§

fn clone(&self) -> ActionResult

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ActionResult

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<ActionResult> for ActionResult

source§

fn eq(&self, other: &ActionResult) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for ActionResult

source§

impl StructuralEq for ActionResult

source§

impl StructuralPartialEq for ActionResult

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.Address.html b/rustdocs/definitions/navigation/struct.Address.html new file mode 100644 index 0000000000..5b287481af --- /dev/null +++ b/rustdocs/definitions/navigation/struct.Address.html @@ -0,0 +1,129 @@ +Address in definitions::navigation - Rust
pub struct Address {
+    pub path: String,
+    pub has_pwd: bool,
+    pub identicon: Identicon,
+    pub seed_name: String,
+    pub secret_exposed: bool,
+}

Fields§

§path: String§has_pwd: bool§identicon: Identicon§seed_name: String§secret_exposed: bool

Trait Implementations§

source§

impl Clone for Address

source§

fn clone(&self) -> Address

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Address

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Address

source§

fn default() -> Address

Returns the “default value” for a type. Read more
source§

impl PartialEq<Address> for Address

source§

fn eq(&self, other: &Address) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Address

source§

impl StructuralEq for Address

source§

impl StructuralPartialEq for Address

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.DDDetail.html b/rustdocs/definitions/navigation/struct.DDDetail.html new file mode 100644 index 0000000000..fb3bd06f72 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.DDDetail.html @@ -0,0 +1,128 @@ +DDDetail in definitions::navigation - Rust
pub struct DDDetail {
+    pub base58: String,
+    pub path: String,
+    pub network_logo: String,
+    pub network_specs_key: String,
+    pub identicon: Identicon,
+}

Fields§

§base58: String§path: String§network_specs_key: String§identicon: Identicon

Trait Implementations§

source§

impl Clone for DDDetail

source§

fn clone(&self) -> DDDetail

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DDDetail

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DDDetail> for DDDetail

source§

fn eq(&self, other: &DDDetail) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DDDetail

source§

impl StructuralEq for DDDetail

source§

impl StructuralPartialEq for DDDetail

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.DDKeySet.html b/rustdocs/definitions/navigation/struct.DDKeySet.html new file mode 100644 index 0000000000..c269cc59c9 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.DDKeySet.html @@ -0,0 +1,125 @@ +DDKeySet in definitions::navigation - Rust
pub struct DDKeySet {
+    pub seed_name: String,
+    pub derivations: Vec<DDDetail>,
+}

Fields§

§seed_name: String§derivations: Vec<DDDetail>

Trait Implementations§

source§

impl Clone for DDKeySet

source§

fn clone(&self) -> DDKeySet

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DDKeySet

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DDKeySet> for DDKeySet

source§

fn eq(&self, other: &DDKeySet) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DDKeySet

source§

impl StructuralEq for DDKeySet

source§

impl StructuralPartialEq for DDKeySet

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.DDPreview.html b/rustdocs/definitions/navigation/struct.DDPreview.html new file mode 100644 index 0000000000..6e78555229 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.DDPreview.html @@ -0,0 +1,128 @@ +DDPreview in definitions::navigation - Rust
pub struct DDPreview {
+    pub qr: Vec<QrData>,
+    pub key_set: DDKeySet,
+    pub is_some_already_imported: bool,
+    pub is_some_network_missing: bool,
+}
Expand description

Dynamic deprivations model

+

Fields§

§qr: Vec<QrData>§key_set: DDKeySet§is_some_already_imported: bool§is_some_network_missing: bool

Trait Implementations§

source§

impl Clone for DDPreview

source§

fn clone(&self) -> DDPreview

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DDPreview

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DDPreview> for DDPreview

source§

fn eq(&self, other: &DDPreview) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DDPreview

source§

impl StructuralEq for DDPreview

source§

impl StructuralPartialEq for DDPreview

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.DerivationCheck.html b/rustdocs/definitions/navigation/struct.DerivationCheck.html new file mode 100644 index 0000000000..198d3e8f9b --- /dev/null +++ b/rustdocs/definitions/navigation/struct.DerivationCheck.html @@ -0,0 +1,128 @@ +DerivationCheck in definitions::navigation - Rust
pub struct DerivationCheck {
+    pub button_good: bool,
+    pub where_to: Option<DerivationDestination>,
+    pub collision: Option<MAddressCard>,
+    pub error: Option<String>,
+}

Fields§

§button_good: bool§where_to: Option<DerivationDestination>§collision: Option<MAddressCard>§error: Option<String>

Trait Implementations§

source§

impl Clone for DerivationCheck

source§

fn clone(&self) -> DerivationCheck

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DerivationCheck

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for DerivationCheck

source§

fn default() -> DerivationCheck

Returns the “default value” for a type. Read more
source§

impl PartialEq<DerivationCheck> for DerivationCheck

source§

fn eq(&self, other: &DerivationCheck) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DerivationCheck

source§

impl StructuralEq for DerivationCheck

source§

impl StructuralPartialEq for DerivationCheck

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.DerivationEntry.html b/rustdocs/definitions/navigation/struct.DerivationEntry.html new file mode 100644 index 0000000000..998ad6b907 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.DerivationEntry.html @@ -0,0 +1,125 @@ +DerivationEntry in definitions::navigation - Rust
pub struct DerivationEntry {
+    pub path: String,
+    pub has_pwd: bool,
+}

Fields§

§path: String§has_pwd: bool

Trait Implementations§

source§

impl Clone for DerivationEntry

source§

fn clone(&self) -> DerivationEntry

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DerivationEntry

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DerivationEntry> for DerivationEntry

source§

fn eq(&self, other: &DerivationEntry) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DerivationEntry

source§

impl StructuralEq for DerivationEntry

source§

impl StructuralPartialEq for DerivationEntry

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.DerivationPack.html b/rustdocs/definitions/navigation/struct.DerivationPack.html new file mode 100644 index 0000000000..7d0135612c --- /dev/null +++ b/rustdocs/definitions/navigation/struct.DerivationPack.html @@ -0,0 +1,127 @@ +DerivationPack in definitions::navigation - Rust
pub struct DerivationPack {
+    pub network_title: String,
+    pub network_logo: String,
+    pub network_order: String,
+    pub id_set: Vec<DerivationEntry>,
+}

Fields§

§network_title: String§network_order: String§id_set: Vec<DerivationEntry>

Trait Implementations§

source§

impl Clone for DerivationPack

source§

fn clone(&self) -> DerivationPack

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DerivationPack

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<DerivationPack> for DerivationPack

source§

fn eq(&self, other: &DerivationPack) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for DerivationPack

source§

impl StructuralEq for DerivationPack

source§

impl StructuralPartialEq for DerivationPack

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.History.html b/rustdocs/definitions/navigation/struct.History.html new file mode 100644 index 0000000000..e08528f1e4 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.History.html @@ -0,0 +1,126 @@ +History in definitions::navigation - Rust
pub struct History {
+    pub order: u32,
+    pub timestamp: String,
+    pub events: Vec<Event>,
+}

Fields§

§order: u32§timestamp: String§events: Vec<Event>

Trait Implementations§

source§

impl Clone for History

source§

fn clone(&self) -> History

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for History

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<History> for History

source§

fn eq(&self, other: &History) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for History

source§

impl StructuralEq for History

source§

impl StructuralPartialEq for History

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.LogScreenEntry.html b/rustdocs/definitions/navigation/struct.LogScreenEntry.html new file mode 100644 index 0000000000..4571e5d379 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.LogScreenEntry.html @@ -0,0 +1,122 @@ +LogScreenEntry in definitions::navigation - Rust
pub struct LogScreenEntry {
+    pub timestamp: String,
+    pub events: Vec<Event>,
+}

Fields§

§timestamp: String§events: Vec<Event>

Trait Implementations§

source§

impl Clone for LogScreenEntry

source§

fn clone(&self) -> LogScreenEntry

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq<LogScreenEntry> for LogScreenEntry

source§

fn eq(&self, other: &LogScreenEntry) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for LogScreenEntry

source§

impl StructuralEq for LogScreenEntry

source§

impl StructuralPartialEq for LogScreenEntry

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MAddressCard.html b/rustdocs/definitions/navigation/struct.MAddressCard.html new file mode 100644 index 0000000000..d0a0e8e659 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MAddressCard.html @@ -0,0 +1,126 @@ +MAddressCard in definitions::navigation - Rust
pub struct MAddressCard {
+    pub base58: String,
+    pub address_key: String,
+    pub address: Address,
+}

Fields§

§base58: String§address_key: String§address: Address

Trait Implementations§

source§

impl Clone for MAddressCard

source§

fn clone(&self) -> MAddressCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MAddressCard

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MAddressCard> for MAddressCard

source§

fn eq(&self, other: &MAddressCard) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MAddressCard

source§

impl StructuralEq for MAddressCard

source§

impl StructuralPartialEq for MAddressCard

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MBackup.html b/rustdocs/definitions/navigation/struct.MBackup.html new file mode 100644 index 0000000000..c341e065b9 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MBackup.html @@ -0,0 +1,125 @@ +MBackup in definitions::navigation - Rust
pub struct MBackup {
+    pub seed_name: String,
+    pub derivations: Vec<DerivationPack>,
+}

Fields§

§seed_name: String§derivations: Vec<DerivationPack>

Trait Implementations§

source§

impl Clone for MBackup

source§

fn clone(&self) -> MBackup

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MBackup

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MBackup> for MBackup

source§

fn eq(&self, other: &MBackup) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MBackup

source§

impl StructuralEq for MBackup

source§

impl StructuralPartialEq for MBackup

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MDeriveKey.html b/rustdocs/definitions/navigation/struct.MDeriveKey.html new file mode 100644 index 0000000000..4443060ff3 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MDeriveKey.html @@ -0,0 +1,124 @@ +MDeriveKey in definitions::navigation - Rust
pub struct MDeriveKey {
+    pub seed_name: String,
+}

Fields§

§seed_name: String

Trait Implementations§

source§

impl Clone for MDeriveKey

source§

fn clone(&self) -> MDeriveKey

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MDeriveKey

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MDeriveKey> for MDeriveKey

source§

fn eq(&self, other: &MDeriveKey) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MDeriveKey

source§

impl StructuralEq for MDeriveKey

source§

impl StructuralPartialEq for MDeriveKey

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MEnterPassword.html b/rustdocs/definitions/navigation/struct.MEnterPassword.html new file mode 100644 index 0000000000..e702b4187f --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MEnterPassword.html @@ -0,0 +1,126 @@ +MEnterPassword in definitions::navigation - Rust
pub struct MEnterPassword {
+    pub author_info: MAddressCard,
+    pub network_info: Option<MSCNetworkInfo>,
+    pub counter: u32,
+}

Fields§

§author_info: MAddressCard§network_info: Option<MSCNetworkInfo>§counter: u32

Trait Implementations§

source§

impl Clone for MEnterPassword

source§

fn clone(&self) -> MEnterPassword

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MEnterPassword

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MEnterPassword> for MEnterPassword

source§

fn eq(&self, other: &MEnterPassword) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MEnterPassword

source§

impl StructuralEq for MEnterPassword

source§

impl StructuralPartialEq for MEnterPassword

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MEventMaybeDecoded.html b/rustdocs/definitions/navigation/struct.MEventMaybeDecoded.html new file mode 100644 index 0000000000..5a38f9ce03 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MEventMaybeDecoded.html @@ -0,0 +1,127 @@ +MEventMaybeDecoded in definitions::navigation - Rust
pub struct MEventMaybeDecoded {
+    pub event: Event,
+    pub decoded: Option<TransactionCardSet>,
+    pub signed_by: Option<MAddressCard>,
+    pub verifier_details: Option<MVerifierDetails>,
+}

Fields§

§event: Event§decoded: Option<TransactionCardSet>§signed_by: Option<MAddressCard>§verifier_details: Option<MVerifierDetails>

Trait Implementations§

source§

impl Clone for MEventMaybeDecoded

source§

fn clone(&self) -> MEventMaybeDecoded

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MEventMaybeDecoded

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MEventMaybeDecoded> for MEventMaybeDecoded

source§

fn eq(&self, other: &MEventMaybeDecoded) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MEventMaybeDecoded

source§

impl StructuralEq for MEventMaybeDecoded

source§

impl StructuralPartialEq for MEventMaybeDecoded

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MKeyAndNetworkCard.html b/rustdocs/definitions/navigation/struct.MKeyAndNetworkCard.html new file mode 100644 index 0000000000..0331ecdcd2 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MKeyAndNetworkCard.html @@ -0,0 +1,125 @@ +MKeyAndNetworkCard in definitions::navigation - Rust
pub struct MKeyAndNetworkCard {
+    pub key: MKeysCard,
+    pub network: MSCNetworkInfo,
+}

Fields§

§key: MKeysCard§network: MSCNetworkInfo

Trait Implementations§

source§

impl Clone for MKeyAndNetworkCard

source§

fn clone(&self) -> MKeyAndNetworkCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MKeyAndNetworkCard

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MKeyAndNetworkCard> for MKeyAndNetworkCard

source§

fn eq(&self, other: &MKeyAndNetworkCard) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MKeyAndNetworkCard

source§

impl StructuralEq for MKeyAndNetworkCard

source§

impl StructuralPartialEq for MKeyAndNetworkCard

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MKeyDetails.html b/rustdocs/definitions/navigation/struct.MKeyDetails.html new file mode 100644 index 0000000000..e8a733ccdd --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MKeyDetails.html @@ -0,0 +1,128 @@ +MKeyDetails in definitions::navigation - Rust
pub struct MKeyDetails {
+    pub qr: QrData,
+    pub pubkey: String,
+    pub network_info: MSCNetworkInfo,
+    pub base58: String,
+    pub address: Address,
+}

Fields§

§qr: QrData§pubkey: String§network_info: MSCNetworkInfo§base58: String§address: Address

Trait Implementations§

source§

impl Clone for MKeyDetails

source§

fn clone(&self) -> MKeyDetails

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MKeyDetails

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MKeyDetails> for MKeyDetails

source§

fn eq(&self, other: &MKeyDetails) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MKeyDetails

source§

impl StructuralEq for MKeyDetails

source§

impl StructuralPartialEq for MKeyDetails

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MKeyDetailsMulti.html b/rustdocs/definitions/navigation/struct.MKeyDetailsMulti.html new file mode 100644 index 0000000000..47fdcdc801 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MKeyDetailsMulti.html @@ -0,0 +1,126 @@ +MKeyDetailsMulti in definitions::navigation - Rust
pub struct MKeyDetailsMulti {
+    pub key_details: MKeyDetails,
+    pub current_number: String,
+    pub out_of: String,
+}

Fields§

§key_details: MKeyDetails§current_number: String§out_of: String

Trait Implementations§

source§

impl Clone for MKeyDetailsMulti

source§

fn clone(&self) -> MKeyDetailsMulti

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MKeyDetailsMulti

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MKeyDetailsMulti> for MKeyDetailsMulti

source§

fn eq(&self, other: &MKeyDetailsMulti) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MKeyDetailsMulti

source§

impl StructuralEq for MKeyDetailsMulti

source§

impl StructuralPartialEq for MKeyDetailsMulti

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MKeysCard.html b/rustdocs/definitions/navigation/struct.MKeysCard.html new file mode 100644 index 0000000000..65056033bf --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MKeysCard.html @@ -0,0 +1,128 @@ +MKeysCard in definitions::navigation - Rust
pub struct MKeysCard {
+    pub address: Address,
+    pub address_key: String,
+    pub base58: String,
+    pub swiped: bool,
+}

Fields§

§address: Address§address_key: String§base58: String§swiped: bool

Trait Implementations§

source§

impl Clone for MKeysCard

source§

fn clone(&self) -> MKeysCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MKeysCard

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MKeysCard

source§

fn default() -> MKeysCard

Returns the “default value” for a type. Read more
source§

impl PartialEq<MKeysCard> for MKeysCard

source§

fn eq(&self, other: &MKeysCard) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MKeysCard

source§

impl StructuralEq for MKeysCard

source§

impl StructuralPartialEq for MKeysCard

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MKeysInfoExport.html b/rustdocs/definitions/navigation/struct.MKeysInfoExport.html new file mode 100644 index 0000000000..a13ce676b3 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MKeysInfoExport.html @@ -0,0 +1,124 @@ +MKeysInfoExport in definitions::navigation - Rust
pub struct MKeysInfoExport {
+    pub frames: Vec<QrData>,
+}

Fields§

§frames: Vec<QrData>

Trait Implementations§

source§

impl Clone for MKeysInfoExport

source§

fn clone(&self) -> MKeysInfoExport

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MKeysInfoExport

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MKeysInfoExport> for MKeysInfoExport

source§

fn eq(&self, other: &MKeysInfoExport) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MKeysInfoExport

source§

impl StructuralEq for MKeysInfoExport

source§

impl StructuralPartialEq for MKeysInfoExport

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MKeysNew.html b/rustdocs/definitions/navigation/struct.MKeysNew.html new file mode 100644 index 0000000000..098a8e26ab --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MKeysNew.html @@ -0,0 +1,125 @@ +MKeysNew in definitions::navigation - Rust
pub struct MKeysNew {
+    pub root: Option<MAddressCard>,
+    pub set: Vec<MKeyAndNetworkCard>,
+}

Fields§

§root: Option<MAddressCard>§set: Vec<MKeyAndNetworkCard>

Trait Implementations§

source§

impl Clone for MKeysNew

source§

fn clone(&self) -> MKeysNew

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MKeysNew

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MKeysNew> for MKeysNew

source§

fn eq(&self, other: &MKeysNew) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MKeysNew

source§

impl StructuralEq for MKeysNew

source§

impl StructuralPartialEq for MKeysNew

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MLog.html b/rustdocs/definitions/navigation/struct.MLog.html new file mode 100644 index 0000000000..306cf7b446 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MLog.html @@ -0,0 +1,124 @@ +MLog in definitions::navigation - Rust
pub struct MLog {
+    pub log: Vec<History>,
+}

Fields§

§log: Vec<History>

Trait Implementations§

source§

impl Clone for MLog

source§

fn clone(&self) -> MLog

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MLog

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MLog> for MLog

source§

fn eq(&self, other: &MLog) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MLog

source§

impl StructuralEq for MLog

source§

impl StructuralPartialEq for MLog

Auto Trait Implementations§

§

impl RefUnwindSafe for MLog

§

impl Send for MLog

§

impl Sync for MLog

§

impl Unpin for MLog

§

impl UnwindSafe for MLog

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MLogDetails.html b/rustdocs/definitions/navigation/struct.MLogDetails.html new file mode 100644 index 0000000000..fa716466aa --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MLogDetails.html @@ -0,0 +1,125 @@ +MLogDetails in definitions::navigation - Rust
pub struct MLogDetails {
+    pub timestamp: String,
+    pub events: Vec<MEventMaybeDecoded>,
+}

Fields§

§timestamp: String§events: Vec<MEventMaybeDecoded>

Trait Implementations§

source§

impl Clone for MLogDetails

source§

fn clone(&self) -> MLogDetails

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MLogDetails

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MLogDetails> for MLogDetails

source§

fn eq(&self, other: &MLogDetails) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MLogDetails

source§

impl StructuralEq for MLogDetails

source§

impl StructuralPartialEq for MLogDetails

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MLogRight.html b/rustdocs/definitions/navigation/struct.MLogRight.html new file mode 100644 index 0000000000..4ceb417c08 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MLogRight.html @@ -0,0 +1,124 @@ +MLogRight in definitions::navigation - Rust
pub struct MLogRight {
+    pub checksum: String,
+}

Fields§

§checksum: String

Trait Implementations§

source§

impl Clone for MLogRight

source§

fn clone(&self) -> MLogRight

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MLogRight

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MLogRight> for MLogRight

source§

fn eq(&self, other: &MLogRight) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MLogRight

source§

impl StructuralEq for MLogRight

source§

impl StructuralPartialEq for MLogRight

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MMMNetwork.html b/rustdocs/definitions/navigation/struct.MMMNetwork.html new file mode 100644 index 0000000000..8d49229794 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MMMNetwork.html @@ -0,0 +1,127 @@ +MMMNetwork in definitions::navigation - Rust
pub struct MMMNetwork {
+    pub title: String,
+    pub logo: String,
+    pub order: u32,
+    pub current_on_screen: bool,
+}

Fields§

§title: String§order: u32§current_on_screen: bool

Trait Implementations§

source§

impl Clone for MMMNetwork

source§

fn clone(&self) -> MMMNetwork

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MMMNetwork

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MMMNetwork> for MMMNetwork

source§

fn eq(&self, other: &MMMNetwork) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MMMNetwork

source§

impl StructuralEq for MMMNetwork

source§

impl StructuralPartialEq for MMMNetwork

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MMNetwork.html b/rustdocs/definitions/navigation/struct.MMNetwork.html new file mode 100644 index 0000000000..42c5898354 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MMNetwork.html @@ -0,0 +1,128 @@ +MMNetwork in definitions::navigation - Rust
pub struct MMNetwork {
+    pub key: String,
+    pub title: String,
+    pub logo: String,
+    pub order: u8,
+    pub path_id: String,
+}

Fields§

§key: String§title: String§order: u8§path_id: String

Trait Implementations§

source§

impl Clone for MMNetwork

source§

fn clone(&self) -> MMNetwork

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MMNetwork

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MMNetwork> for MMNetwork

source§

fn eq(&self, other: &MMNetwork) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MMNetwork

source§

impl StructuralEq for MMNetwork

source§

impl StructuralPartialEq for MMNetwork

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MManageMetadata.html b/rustdocs/definitions/navigation/struct.MManageMetadata.html new file mode 100644 index 0000000000..29b20ff3f7 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MManageMetadata.html @@ -0,0 +1,128 @@ +MManageMetadata in definitions::navigation - Rust
pub struct MManageMetadata {
+    pub name: String,
+    pub version: String,
+    pub meta_hash: String,
+    pub meta_id_pic: Identicon,
+    pub networks: Vec<MMMNetwork>,
+}

Fields§

§name: String§version: String§meta_hash: String§meta_id_pic: Identicon§networks: Vec<MMMNetwork>

Trait Implementations§

source§

impl Clone for MManageMetadata

source§

fn clone(&self) -> MManageMetadata

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MManageMetadata

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MManageMetadata> for MManageMetadata

source§

fn eq(&self, other: &MManageMetadata) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MManageMetadata

source§

impl StructuralEq for MManageMetadata

source§

impl StructuralPartialEq for MManageMetadata

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MManageNetworks.html b/rustdocs/definitions/navigation/struct.MManageNetworks.html new file mode 100644 index 0000000000..95d3e0d509 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MManageNetworks.html @@ -0,0 +1,124 @@ +MManageNetworks in definitions::navigation - Rust
pub struct MManageNetworks {
+    pub networks: Vec<MMNetwork>,
+}

Fields§

§networks: Vec<MMNetwork>

Trait Implementations§

source§

impl Clone for MManageNetworks

source§

fn clone(&self) -> MManageNetworks

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MManageNetworks

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MManageNetworks> for MManageNetworks

source§

fn eq(&self, other: &MManageNetworks) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MManageNetworks

source§

impl StructuralEq for MManageNetworks

source§

impl StructuralPartialEq for MManageNetworks

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MMetadataRecord.html b/rustdocs/definitions/navigation/struct.MMetadataRecord.html new file mode 100644 index 0000000000..ea919d002a --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MMetadataRecord.html @@ -0,0 +1,127 @@ +MMetadataRecord in definitions::navigation - Rust
pub struct MMetadataRecord {
+    pub specname: String,
+    pub specs_version: String,
+    pub meta_hash: String,
+    pub meta_id_pic: Identicon,
+}

Fields§

§specname: String§specs_version: String§meta_hash: String§meta_id_pic: Identicon

Trait Implementations§

source§

impl Clone for MMetadataRecord

source§

fn clone(&self) -> MMetadataRecord

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MMetadataRecord

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MMetadataRecord> for MMetadataRecord

source§

fn eq(&self, other: &MMetadataRecord) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MMetadataRecord

source§

impl StructuralEq for MMetadataRecord

source§

impl StructuralPartialEq for MMetadataRecord

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MNetworkCard.html b/rustdocs/definitions/navigation/struct.MNetworkCard.html new file mode 100644 index 0000000000..ac374a0d14 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MNetworkCard.html @@ -0,0 +1,126 @@ +MNetworkCard in definitions::navigation - Rust
pub struct MNetworkCard {
+    pub title: String,
+    pub logo: String,
+}

Fields§

§title: String

Trait Implementations§

source§

impl Clone for MNetworkCard

source§

fn clone(&self) -> MNetworkCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MNetworkCard

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MNetworkCard

source§

fn default() -> MNetworkCard

Returns the “default value” for a type. Read more
source§

impl PartialEq<MNetworkCard> for MNetworkCard

source§

fn eq(&self, other: &MNetworkCard) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MNetworkCard

source§

impl StructuralEq for MNetworkCard

source§

impl StructuralPartialEq for MNetworkCard

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MNetworkDetails.html b/rustdocs/definitions/navigation/struct.MNetworkDetails.html new file mode 100644 index 0000000000..3ba4ed204d --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MNetworkDetails.html @@ -0,0 +1,137 @@ +MNetworkDetails in definitions::navigation - Rust
pub struct MNetworkDetails {
Show 14 fields + pub base58prefix: u16, + pub color: String, + pub decimals: u8, + pub encryption: Encryption, + pub genesis_hash: H256, + pub logo: String, + pub name: String, + pub order: String, + pub path_id: String, + pub secondary_color: String, + pub title: String, + pub unit: String, + pub current_verifier: MVerifier, + pub meta: Vec<MMetadataRecord>, +
}

Fields§

§base58prefix: u16§color: String§decimals: u8§encryption: Encryption§genesis_hash: H256§name: String§order: String§path_id: String§secondary_color: String§title: String§unit: String§current_verifier: MVerifier§meta: Vec<MMetadataRecord>

Trait Implementations§

source§

impl Clone for MNetworkDetails

source§

fn clone(&self) -> MNetworkDetails

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MNetworkDetails

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MNetworkDetails> for MNetworkDetails

source§

fn eq(&self, other: &MNetworkDetails) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MNetworkDetails

source§

impl StructuralEq for MNetworkDetails

source§

impl StructuralPartialEq for MNetworkDetails

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MNetworkMenu.html b/rustdocs/definitions/navigation/struct.MNetworkMenu.html new file mode 100644 index 0000000000..d957d7a7c9 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MNetworkMenu.html @@ -0,0 +1,124 @@ +MNetworkMenu in definitions::navigation - Rust
pub struct MNetworkMenu {
+    pub networks: Vec<Network>,
+}

Fields§

§networks: Vec<Network>

Trait Implementations§

source§

impl Clone for MNetworkMenu

source§

fn clone(&self) -> MNetworkMenu

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MNetworkMenu

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MNetworkMenu> for MNetworkMenu

source§

fn eq(&self, other: &MNetworkMenu) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MNetworkMenu

source§

impl StructuralEq for MNetworkMenu

source§

impl StructuralPartialEq for MNetworkMenu

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MNewSeed.html b/rustdocs/definitions/navigation/struct.MNewSeed.html new file mode 100644 index 0000000000..c4b3bcabb2 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MNewSeed.html @@ -0,0 +1,124 @@ +MNewSeed in definitions::navigation - Rust
pub struct MNewSeed {
+    pub keyboard: bool,
+}

Fields§

§keyboard: bool

Trait Implementations§

source§

impl Clone for MNewSeed

source§

fn clone(&self) -> MNewSeed

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MNewSeed

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MNewSeed> for MNewSeed

source§

fn eq(&self, other: &MNewSeed) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MNewSeed

source§

impl StructuralEq for MNewSeed

source§

impl StructuralPartialEq for MNewSeed

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MNewSeedBackup.html b/rustdocs/definitions/navigation/struct.MNewSeedBackup.html new file mode 100644 index 0000000000..515d891c01 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MNewSeedBackup.html @@ -0,0 +1,126 @@ +MNewSeedBackup in definitions::navigation - Rust
pub struct MNewSeedBackup {
+    pub seed: String,
+    pub seed_phrase: String,
+    pub identicon: Identicon,
+}

Fields§

§seed: String§seed_phrase: String§identicon: Identicon

Trait Implementations§

source§

impl Clone for MNewSeedBackup

source§

fn clone(&self) -> MNewSeedBackup

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MNewSeedBackup

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MNewSeedBackup> for MNewSeedBackup

source§

fn eq(&self, other: &MNewSeedBackup) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MNewSeedBackup

source§

impl StructuralEq for MNewSeedBackup

source§

impl StructuralPartialEq for MNewSeedBackup

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MPasswordConfirm.html b/rustdocs/definitions/navigation/struct.MPasswordConfirm.html new file mode 100644 index 0000000000..d680a2f98a --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MPasswordConfirm.html @@ -0,0 +1,126 @@ +MPasswordConfirm in definitions::navigation - Rust
pub struct MPasswordConfirm {
+    pub pwd: String,
+    pub seed_name: String,
+    pub cropped_path: String,
+}

Fields§

§pwd: String§seed_name: String§cropped_path: String

Trait Implementations§

source§

impl Clone for MPasswordConfirm

source§

fn clone(&self) -> MPasswordConfirm

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MPasswordConfirm

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MPasswordConfirm> for MPasswordConfirm

source§

fn eq(&self, other: &MPasswordConfirm) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MPasswordConfirm

source§

impl StructuralEq for MPasswordConfirm

source§

impl StructuralPartialEq for MPasswordConfirm

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MRawKey.html b/rustdocs/definitions/navigation/struct.MRawKey.html new file mode 100644 index 0000000000..f304655b6a --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MRawKey.html @@ -0,0 +1,127 @@ +MRawKey in definitions::navigation - Rust
pub struct MRawKey {
+    pub address: Address,
+    pub address_key: String,
+    pub public_key: String,
+    pub network_logo: String,
+}

Fields§

§address: Address§address_key: String§public_key: String

Trait Implementations§

source§

impl Clone for MRawKey

source§

fn clone(&self) -> MRawKey

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MRawKey

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MRawKey> for MRawKey

source§

fn eq(&self, other: &MRawKey) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MRawKey

source§

impl StructuralEq for MRawKey

source§

impl StructuralPartialEq for MRawKey

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MRecoverSeedName.html b/rustdocs/definitions/navigation/struct.MRecoverSeedName.html new file mode 100644 index 0000000000..9d7babb905 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MRecoverSeedName.html @@ -0,0 +1,125 @@ +MRecoverSeedName in definitions::navigation - Rust
pub struct MRecoverSeedName {
+    pub keyboard: bool,
+    pub seed_name: String,
+}

Fields§

§keyboard: bool§seed_name: String

Trait Implementations§

source§

impl Clone for MRecoverSeedName

source§

fn clone(&self) -> MRecoverSeedName

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MRecoverSeedName

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MRecoverSeedName> for MRecoverSeedName

source§

fn eq(&self, other: &MRecoverSeedName) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MRecoverSeedName

source§

impl StructuralEq for MRecoverSeedName

source§

impl StructuralPartialEq for MRecoverSeedName

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MRecoverSeedPhrase.html b/rustdocs/definitions/navigation/struct.MRecoverSeedPhrase.html new file mode 100644 index 0000000000..8f452e54d8 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MRecoverSeedPhrase.html @@ -0,0 +1,129 @@ +MRecoverSeedPhrase in definitions::navigation - Rust
pub struct MRecoverSeedPhrase {
+    pub keyboard: bool,
+    pub seed_name: String,
+    pub user_input: String,
+    pub guess_set: Vec<String>,
+    pub draft: Vec<String>,
+    pub ready_seed: Option<String>,
+}

Fields§

§keyboard: bool§seed_name: String§user_input: String§guess_set: Vec<String>§draft: Vec<String>§ready_seed: Option<String>

Trait Implementations§

source§

impl Clone for MRecoverSeedPhrase

source§

fn clone(&self) -> MRecoverSeedPhrase

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MRecoverSeedPhrase

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MRecoverSeedPhrase> for MRecoverSeedPhrase

source§

fn eq(&self, other: &MRecoverSeedPhrase) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MRecoverSeedPhrase

source§

impl StructuralEq for MRecoverSeedPhrase

source§

impl StructuralPartialEq for MRecoverSeedPhrase

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCCall.html b/rustdocs/definitions/navigation/struct.MSCCall.html new file mode 100644 index 0000000000..62c19dd0ca --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCCall.html @@ -0,0 +1,125 @@ +MSCCall in definitions::navigation - Rust
pub struct MSCCall {
+    pub method_name: String,
+    pub docs: String,
+}

Fields§

§method_name: String§docs: String

Trait Implementations§

source§

impl Clone for MSCCall

source§

fn clone(&self) -> MSCCall

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCCall

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCCall> for MSCCall

source§

fn eq(&self, other: &MSCCall) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCCall

source§

impl StructuralEq for MSCCall

source§

impl StructuralPartialEq for MSCCall

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCCurrency.html b/rustdocs/definitions/navigation/struct.MSCCurrency.html new file mode 100644 index 0000000000..f50473db0e --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCCurrency.html @@ -0,0 +1,125 @@ +MSCCurrency in definitions::navigation - Rust
pub struct MSCCurrency {
+    pub amount: String,
+    pub units: String,
+}

Fields§

§amount: String§units: String

Trait Implementations§

source§

impl Clone for MSCCurrency

source§

fn clone(&self) -> MSCCurrency

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCCurrency

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCCurrency> for MSCCurrency

source§

fn eq(&self, other: &MSCCurrency) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCCurrency

source§

impl StructuralEq for MSCCurrency

source§

impl StructuralPartialEq for MSCCurrency

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCEnumVariantName.html b/rustdocs/definitions/navigation/struct.MSCEnumVariantName.html new file mode 100644 index 0000000000..c84a6c6f33 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCEnumVariantName.html @@ -0,0 +1,125 @@ +MSCEnumVariantName in definitions::navigation - Rust
pub struct MSCEnumVariantName {
+    pub name: String,
+    pub docs_enum_variant: String,
+}

Fields§

§name: String§docs_enum_variant: String

Trait Implementations§

source§

impl Clone for MSCEnumVariantName

source§

fn clone(&self) -> MSCEnumVariantName

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCEnumVariantName

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCEnumVariantName> for MSCEnumVariantName

source§

fn eq(&self, other: &MSCEnumVariantName) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCEnumVariantName

source§

impl StructuralEq for MSCEnumVariantName

source§

impl StructuralPartialEq for MSCEnumVariantName

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCEraMortal.html b/rustdocs/definitions/navigation/struct.MSCEraMortal.html new file mode 100644 index 0000000000..5635b2bf62 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCEraMortal.html @@ -0,0 +1,126 @@ +MSCEraMortal in definitions::navigation - Rust
pub struct MSCEraMortal {
+    pub era: String,
+    pub phase: String,
+    pub period: String,
+}

Fields§

§era: String§phase: String§period: String

Trait Implementations§

source§

impl Clone for MSCEraMortal

source§

fn clone(&self) -> MSCEraMortal

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCEraMortal

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCEraMortal> for MSCEraMortal

source§

fn eq(&self, other: &MSCEraMortal) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCEraMortal

source§

impl StructuralEq for MSCEraMortal

source§

impl StructuralPartialEq for MSCEraMortal

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCFieldName.html b/rustdocs/definitions/navigation/struct.MSCFieldName.html new file mode 100644 index 0000000000..f3cc38430a --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCFieldName.html @@ -0,0 +1,127 @@ +MSCFieldName in definitions::navigation - Rust
pub struct MSCFieldName {
+    pub name: String,
+    pub docs_field_name: String,
+    pub path_type: String,
+    pub docs_type: String,
+}

Fields§

§name: String§docs_field_name: String§path_type: String§docs_type: String

Trait Implementations§

source§

impl Clone for MSCFieldName

source§

fn clone(&self) -> MSCFieldName

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCFieldName

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCFieldName> for MSCFieldName

source§

fn eq(&self, other: &MSCFieldName) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCFieldName

source§

impl StructuralEq for MSCFieldName

source§

impl StructuralPartialEq for MSCFieldName

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCFieldNumber.html b/rustdocs/definitions/navigation/struct.MSCFieldNumber.html new file mode 100644 index 0000000000..8d989b7c6d --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCFieldNumber.html @@ -0,0 +1,127 @@ +MSCFieldNumber in definitions::navigation - Rust
pub struct MSCFieldNumber {
+    pub number: String,
+    pub docs_field_number: String,
+    pub path_type: String,
+    pub docs_type: String,
+}

Fields§

§number: String§docs_field_number: String§path_type: String§docs_type: String

Trait Implementations§

source§

impl Clone for MSCFieldNumber

source§

fn clone(&self) -> MSCFieldNumber

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCFieldNumber

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCFieldNumber> for MSCFieldNumber

source§

fn eq(&self, other: &MSCFieldNumber) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCFieldNumber

source§

impl StructuralEq for MSCFieldNumber

source§

impl StructuralPartialEq for MSCFieldNumber

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCId.html b/rustdocs/definitions/navigation/struct.MSCId.html new file mode 100644 index 0000000000..d36407f197 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCId.html @@ -0,0 +1,125 @@ +MSCId in definitions::navigation - Rust
pub struct MSCId {
+    pub base58: String,
+    pub identicon: Identicon,
+}

Fields§

§base58: String§identicon: Identicon

Trait Implementations§

source§

impl Clone for MSCId

source§

fn clone(&self) -> MSCId

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCId

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCId> for MSCId

source§

fn eq(&self, other: &MSCId) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCId

source§

impl StructuralEq for MSCId

source§

impl StructuralPartialEq for MSCId

Auto Trait Implementations§

§

impl RefUnwindSafe for MSCId

§

impl Send for MSCId

§

impl Sync for MSCId

§

impl Unpin for MSCId

§

impl UnwindSafe for MSCId

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCNameVersion.html b/rustdocs/definitions/navigation/struct.MSCNameVersion.html new file mode 100644 index 0000000000..67169edcdc --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCNameVersion.html @@ -0,0 +1,125 @@ +MSCNameVersion in definitions::navigation - Rust
pub struct MSCNameVersion {
+    pub name: String,
+    pub version: String,
+}

Fields§

§name: String§version: String

Trait Implementations§

source§

impl Clone for MSCNameVersion

source§

fn clone(&self) -> MSCNameVersion

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCNameVersion

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCNameVersion> for MSCNameVersion

source§

fn eq(&self, other: &MSCNameVersion) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCNameVersion

source§

impl StructuralEq for MSCNameVersion

source§

impl StructuralPartialEq for MSCNameVersion

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCNetworkInfo.html b/rustdocs/definitions/navigation/struct.MSCNetworkInfo.html new file mode 100644 index 0000000000..9166ddb885 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCNetworkInfo.html @@ -0,0 +1,126 @@ +MSCNetworkInfo in definitions::navigation - Rust
pub struct MSCNetworkInfo {
+    pub network_title: String,
+    pub network_logo: String,
+    pub network_specs_key: String,
+}

Fields§

§network_title: String§network_specs_key: String

Trait Implementations§

source§

impl Clone for MSCNetworkInfo

source§

fn clone(&self) -> MSCNetworkInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCNetworkInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<OrderedNetworkSpecs> for MSCNetworkInfo

source§

fn from(o: OrderedNetworkSpecs) -> Self

Converts to this type from the input type.
source§

impl PartialEq<MSCNetworkInfo> for MSCNetworkInfo

source§

fn eq(&self, other: &MSCNetworkInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCNetworkInfo

source§

impl StructuralEq for MSCNetworkInfo

source§

impl StructuralPartialEq for MSCNetworkInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCTip.html b/rustdocs/definitions/navigation/struct.MSCTip.html new file mode 100644 index 0000000000..36be9eb0f2 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCTip.html @@ -0,0 +1,125 @@ +MSCTip in definitions::navigation - Rust
pub struct MSCTip {
+    pub amount: String,
+    pub units: String,
+}

Fields§

§amount: String§units: String

Trait Implementations§

source§

impl Clone for MSCTip

source§

fn clone(&self) -> MSCTip

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCTip

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCTip> for MSCTip

source§

fn eq(&self, other: &MSCTip) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCTip

source§

impl StructuralEq for MSCTip

source§

impl StructuralPartialEq for MSCTip

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSCTxSpecPlain.html b/rustdocs/definitions/navigation/struct.MSCTxSpecPlain.html new file mode 100644 index 0000000000..0e179c79ff --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSCTxSpecPlain.html @@ -0,0 +1,126 @@ +MSCTxSpecPlain in definitions::navigation - Rust
pub struct MSCTxSpecPlain {
+    pub network_genesis_hash: H256,
+    pub version: String,
+    pub tx_version: String,
+}

Fields§

§network_genesis_hash: H256§version: String§tx_version: String

Trait Implementations§

source§

impl Clone for MSCTxSpecPlain

source§

fn clone(&self) -> MSCTxSpecPlain

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSCTxSpecPlain

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSCTxSpecPlain> for MSCTxSpecPlain

source§

fn eq(&self, other: &MSCTxSpecPlain) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSCTxSpecPlain

source§

impl StructuralEq for MSCTxSpecPlain

source§

impl StructuralPartialEq for MSCTxSpecPlain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSeedMenu.html b/rustdocs/definitions/navigation/struct.MSeedMenu.html new file mode 100644 index 0000000000..df1df76ad1 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSeedMenu.html @@ -0,0 +1,124 @@ +MSeedMenu in definitions::navigation - Rust
pub struct MSeedMenu {
+    pub seed: String,
+}

Fields§

§seed: String

Trait Implementations§

source§

impl Clone for MSeedMenu

source§

fn clone(&self) -> MSeedMenu

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSeedMenu

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSeedMenu> for MSeedMenu

source§

fn eq(&self, other: &MSeedMenu) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSeedMenu

source§

impl StructuralEq for MSeedMenu

source§

impl StructuralPartialEq for MSeedMenu

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSeeds.html b/rustdocs/definitions/navigation/struct.MSeeds.html new file mode 100644 index 0000000000..6651d91a33 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSeeds.html @@ -0,0 +1,124 @@ +MSeeds in definitions::navigation - Rust
pub struct MSeeds {
+    pub seed_name_cards: Vec<SeedNameCard>,
+}

Fields§

§seed_name_cards: Vec<SeedNameCard>

Trait Implementations§

source§

impl Clone for MSeeds

source§

fn clone(&self) -> MSeeds

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSeeds

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSeeds> for MSeeds

source§

fn eq(&self, other: &MSeeds) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSeeds

source§

impl StructuralEq for MSeeds

source§

impl StructuralPartialEq for MSeeds

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSettings.html b/rustdocs/definitions/navigation/struct.MSettings.html new file mode 100644 index 0000000000..ab640cb6e4 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSettings.html @@ -0,0 +1,128 @@ +MSettings in definitions::navigation - Rust
pub struct MSettings {
+    pub public_key: Option<String>,
+    pub identicon: Option<Identicon>,
+    pub encryption: Option<String>,
+    pub error: Option<String>,
+}

Fields§

§public_key: Option<String>§identicon: Option<Identicon>§encryption: Option<String>§error: Option<String>

Trait Implementations§

source§

impl Clone for MSettings

source§

fn clone(&self) -> MSettings

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSettings

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MSettings

source§

fn default() -> MSettings

Returns the “default value” for a type. Read more
source§

impl PartialEq<MSettings> for MSettings

source§

fn eq(&self, other: &MSettings) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSettings

source§

impl StructuralEq for MSettings

source§

impl StructuralPartialEq for MSettings

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSignSufficientCrypto.html b/rustdocs/definitions/navigation/struct.MSignSufficientCrypto.html new file mode 100644 index 0000000000..57898ec4c5 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSignSufficientCrypto.html @@ -0,0 +1,124 @@ +MSignSufficientCrypto in definitions::navigation - Rust
pub struct MSignSufficientCrypto {
+    pub identities: Vec<MRawKey>,
+}

Fields§

§identities: Vec<MRawKey>

Trait Implementations§

source§

impl Clone for MSignSufficientCrypto

source§

fn clone(&self) -> MSignSufficientCrypto

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSignSufficientCrypto

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSignSufficientCrypto> for MSignSufficientCrypto

source§

fn eq(&self, other: &MSignSufficientCrypto) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSignSufficientCrypto

source§

impl StructuralEq for MSignSufficientCrypto

source§

impl StructuralPartialEq for MSignSufficientCrypto

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSignatureReady.html b/rustdocs/definitions/navigation/struct.MSignatureReady.html new file mode 100644 index 0000000000..10744c664c --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSignatureReady.html @@ -0,0 +1,126 @@ +MSignatureReady in definitions::navigation - Rust
pub struct MSignatureReady {
+    pub signatures: Vec<QrData>,
+}
Expand description

Data about signatures that are ready.

+

Fields§

§signatures: Vec<QrData>

Frames of the animated QR code that should be displayed by the UI.

+

Trait Implementations§

source§

impl Clone for MSignatureReady

source§

fn clone(&self) -> MSignatureReady

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSignatureReady

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSignatureReady> for MSignatureReady

source§

fn eq(&self, other: &MSignatureReady) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSignatureReady

source§

impl StructuralEq for MSignatureReady

source§

impl StructuralPartialEq for MSignatureReady

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSignedTransaction.html b/rustdocs/definitions/navigation/struct.MSignedTransaction.html new file mode 100644 index 0000000000..068788cf3e --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSignedTransaction.html @@ -0,0 +1,125 @@ +MSignedTransaction in definitions::navigation - Rust
pub struct MSignedTransaction {
+    pub transaction: Vec<MTransaction>,
+    pub signature: MSignatureReady,
+}

Fields§

§transaction: Vec<MTransaction>§signature: MSignatureReady

Trait Implementations§

source§

impl Clone for MSignedTransaction

source§

fn clone(&self) -> MSignedTransaction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSignedTransaction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSignedTransaction> for MSignedTransaction

source§

fn eq(&self, other: &MSignedTransaction) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSignedTransaction

source§

impl StructuralEq for MSignedTransaction

source§

impl StructuralPartialEq for MSignedTransaction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MSufficientCryptoReady.html b/rustdocs/definitions/navigation/struct.MSufficientCryptoReady.html new file mode 100644 index 0000000000..86765e5199 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MSufficientCryptoReady.html @@ -0,0 +1,127 @@ +MSufficientCryptoReady in definitions::navigation - Rust
pub struct MSufficientCryptoReady {
+    pub author_info: MAddressCard,
+    pub sufficient: Vec<u8>,
+    pub content: MSCContent,
+    pub network_logo: Option<String>,
+}

Fields§

§author_info: MAddressCard§sufficient: Vec<u8>§content: MSCContent

Trait Implementations§

source§

impl Clone for MSufficientCryptoReady

source§

fn clone(&self) -> MSufficientCryptoReady

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MSufficientCryptoReady

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MSufficientCryptoReady> for MSufficientCryptoReady

source§

fn eq(&self, other: &MSufficientCryptoReady) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MSufficientCryptoReady

source§

impl StructuralEq for MSufficientCryptoReady

source§

impl StructuralPartialEq for MSufficientCryptoReady

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MTransaction.html b/rustdocs/definitions/navigation/struct.MTransaction.html new file mode 100644 index 0000000000..9d2d4de87c --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MTransaction.html @@ -0,0 +1,127 @@ +MTransaction in definitions::navigation - Rust
pub struct MTransaction {
+    pub content: TransactionCardSet,
+    pub ttype: TransactionType,
+    pub author_info: Option<MAddressCard>,
+    pub network_info: Option<MSCNetworkInfo>,
+}

Fields§

§content: TransactionCardSet§ttype: TransactionType§author_info: Option<MAddressCard>§network_info: Option<MSCNetworkInfo>

Trait Implementations§

source§

impl Clone for MTransaction

source§

fn clone(&self) -> MTransaction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MTransaction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MTransaction> for MTransaction

source§

fn eq(&self, other: &MTransaction) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MTransaction

source§

impl StructuralEq for MTransaction

source§

impl StructuralPartialEq for MTransaction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MTypesInfo.html b/rustdocs/definitions/navigation/struct.MTypesInfo.html new file mode 100644 index 0000000000..d3ce1ed3f4 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MTypesInfo.html @@ -0,0 +1,126 @@ +MTypesInfo in definitions::navigation - Rust
pub struct MTypesInfo {
+    pub types_on_file: bool,
+    pub types_hash: Option<String>,
+    pub types_id_pic: Option<Identicon>,
+}

Fields§

§types_on_file: bool§types_hash: Option<String>§types_id_pic: Option<Identicon>

Trait Implementations§

source§

impl Clone for MTypesInfo

source§

fn clone(&self) -> MTypesInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MTypesInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MTypesInfo> for MTypesInfo

source§

fn eq(&self, other: &MTypesInfo) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MTypesInfo

source§

impl StructuralEq for MTypesInfo

source§

impl StructuralPartialEq for MTypesInfo

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MVerifier.html b/rustdocs/definitions/navigation/struct.MVerifier.html new file mode 100644 index 0000000000..b887eaa63b --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MVerifier.html @@ -0,0 +1,126 @@ +MVerifier in definitions::navigation - Rust
pub struct MVerifier {
+    pub ttype: String,
+    pub details: MVerifierDetails,
+}

Fields§

§ttype: String§details: MVerifierDetails

Trait Implementations§

source§

impl Clone for MVerifier

source§

fn clone(&self) -> MVerifier

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MVerifier

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MVerifier

source§

fn default() -> MVerifier

Returns the “default value” for a type. Read more
source§

impl PartialEq<MVerifier> for MVerifier

source§

fn eq(&self, other: &MVerifier) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MVerifier

source§

impl StructuralEq for MVerifier

source§

impl StructuralPartialEq for MVerifier

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.MVerifierDetails.html b/rustdocs/definitions/navigation/struct.MVerifierDetails.html new file mode 100644 index 0000000000..a60d862534 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.MVerifierDetails.html @@ -0,0 +1,127 @@ +MVerifierDetails in definitions::navigation - Rust
pub struct MVerifierDetails {
+    pub public_key: String,
+    pub identicon: Identicon,
+    pub encryption: String,
+}

Fields§

§public_key: String§identicon: Identicon§encryption: String

Trait Implementations§

source§

impl Clone for MVerifierDetails

source§

fn clone(&self) -> MVerifierDetails

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MVerifierDetails

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for MVerifierDetails

source§

fn default() -> MVerifierDetails

Returns the “default value” for a type. Read more
source§

impl PartialEq<MVerifierDetails> for MVerifierDetails

source§

fn eq(&self, other: &MVerifierDetails) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for MVerifierDetails

source§

impl StructuralEq for MVerifierDetails

source§

impl StructuralPartialEq for MVerifierDetails

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.Network.html b/rustdocs/definitions/navigation/struct.Network.html new file mode 100644 index 0000000000..0f969502d0 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.Network.html @@ -0,0 +1,128 @@ +Network in definitions::navigation - Rust
pub struct Network {
+    pub key: String,
+    pub logo: String,
+    pub order: u32,
+    pub selected: bool,
+    pub title: String,
+}

Fields§

§key: String§order: u32§selected: bool§title: String

Trait Implementations§

source§

impl Clone for Network

source§

fn clone(&self) -> Network

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Network

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<OrderedNetworkSpecs> for Network

source§

fn from(n: OrderedNetworkSpecs) -> Self

Converts to this type from the input type.
source§

impl PartialEq<Network> for Network

source§

fn eq(&self, other: &Network) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Network

source§

impl StructuralEq for Network

source§

impl StructuralPartialEq for Network

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.PathAndNetwork.html b/rustdocs/definitions/navigation/struct.PathAndNetwork.html new file mode 100644 index 0000000000..f1040af313 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.PathAndNetwork.html @@ -0,0 +1,125 @@ +PathAndNetwork in definitions::navigation - Rust
pub struct PathAndNetwork {
+    pub derivation: String,
+    pub network_specs_key: String,
+}

Fields§

§derivation: String§network_specs_key: String

Trait Implementations§

source§

impl Clone for PathAndNetwork

source§

fn clone(&self) -> PathAndNetwork

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PathAndNetwork

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<PathAndNetwork> for PathAndNetwork

source§

fn eq(&self, other: &PathAndNetwork) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for PathAndNetwork

source§

impl StructuralEq for PathAndNetwork

source§

impl StructuralPartialEq for PathAndNetwork

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.SeedNameCard.html b/rustdocs/definitions/navigation/struct.SeedNameCard.html new file mode 100644 index 0000000000..ede553e7dd --- /dev/null +++ b/rustdocs/definitions/navigation/struct.SeedNameCard.html @@ -0,0 +1,127 @@ +SeedNameCard in definitions::navigation - Rust
pub struct SeedNameCard {
+    pub seed_name: String,
+    pub identicon: Identicon,
+    pub used_in_networks: Vec<String>,
+    pub derived_keys_count: u32,
+}

Fields§

§seed_name: String§identicon: Identicon§used_in_networks: Vec<String>§derived_keys_count: u32

Trait Implementations§

source§

impl Clone for SeedNameCard

source§

fn clone(&self) -> SeedNameCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SeedNameCard

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<SeedNameCard> for SeedNameCard

source§

fn eq(&self, other: &SeedNameCard) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for SeedNameCard

source§

impl StructuralEq for SeedNameCard

source§

impl StructuralPartialEq for SeedNameCard

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.SeedNameWithIdenticon.html b/rustdocs/definitions/navigation/struct.SeedNameWithIdenticon.html new file mode 100644 index 0000000000..d60735cc79 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.SeedNameWithIdenticon.html @@ -0,0 +1,122 @@ +SeedNameWithIdenticon in definitions::navigation - Rust
pub struct SeedNameWithIdenticon {
+    pub seed_name: String,
+    pub identicon: Identicon,
+}

Fields§

§seed_name: String§identicon: Identicon

Trait Implementations§

source§

impl Clone for SeedNameWithIdenticon

source§

fn clone(&self) -> SeedNameWithIdenticon

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl PartialEq<SeedNameWithIdenticon> for SeedNameWithIdenticon

source§

fn eq(&self, other: &SeedNameWithIdenticon) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for SeedNameWithIdenticon

source§

impl StructuralEq for SeedNameWithIdenticon

source§

impl StructuralPartialEq for SeedNameWithIdenticon

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.TransactionCard.html b/rustdocs/definitions/navigation/struct.TransactionCard.html new file mode 100644 index 0000000000..317ad271d6 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.TransactionCard.html @@ -0,0 +1,126 @@ +TransactionCard in definitions::navigation - Rust
pub struct TransactionCard {
+    pub index: u32,
+    pub indent: u32,
+    pub card: Card,
+}

Fields§

§index: u32§indent: u32§card: Card

Trait Implementations§

source§

impl Clone for TransactionCard

source§

fn clone(&self) -> TransactionCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TransactionCard

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<TransactionCard> for TransactionCard

source§

fn eq(&self, other: &TransactionCard) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for TransactionCard

source§

impl StructuralEq for TransactionCard

source§

impl StructuralPartialEq for TransactionCard

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.TransactionCardSet.html b/rustdocs/definitions/navigation/struct.TransactionCardSet.html new file mode 100644 index 0000000000..bfe4feec2c --- /dev/null +++ b/rustdocs/definitions/navigation/struct.TransactionCardSet.html @@ -0,0 +1,135 @@ +TransactionCardSet in definitions::navigation - Rust
pub struct TransactionCardSet {
+    pub author: Option<Vec<TransactionCard>>,
+    pub error: Option<Vec<TransactionCard>>,
+    pub extensions: Option<Vec<TransactionCard>>,
+    pub importing_derivations: Option<Vec<TransactionCard>>,
+    pub message: Option<Vec<TransactionCard>>,
+    pub meta: Option<Vec<TransactionCard>>,
+    pub method: Option<Vec<TransactionCard>>,
+    pub new_specs: Option<Vec<TransactionCard>>,
+    pub verifier: Option<Vec<TransactionCard>>,
+    pub warning: Option<Vec<TransactionCard>>,
+    pub types_info: Option<Vec<TransactionCard>>,
+}

Fields§

§author: Option<Vec<TransactionCard>>§error: Option<Vec<TransactionCard>>§extensions: Option<Vec<TransactionCard>>§importing_derivations: Option<Vec<TransactionCard>>§message: Option<Vec<TransactionCard>>§meta: Option<Vec<TransactionCard>>§method: Option<Vec<TransactionCard>>§new_specs: Option<Vec<TransactionCard>>§verifier: Option<Vec<TransactionCard>>§warning: Option<Vec<TransactionCard>>§types_info: Option<Vec<TransactionCard>>

Trait Implementations§

source§

impl Clone for TransactionCardSet

source§

fn clone(&self) -> TransactionCardSet

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TransactionCardSet

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for TransactionCardSet

source§

fn default() -> TransactionCardSet

Returns the “default value” for a type. Read more
source§

impl PartialEq<TransactionCardSet> for TransactionCardSet

source§

fn eq(&self, other: &TransactionCardSet) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for TransactionCardSet

source§

impl StructuralEq for TransactionCardSet

source§

impl StructuralPartialEq for TransactionCardSet

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Clear for Twhere + T: Default + Eq + PartialEq<T>,

§

fn is_clear(&self) -> bool

True iff no bits are set.
§

fn clear() -> T

Return the value of Self that is clear.
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/navigation/struct.TransactionSignAction.html b/rustdocs/definitions/navigation/struct.TransactionSignAction.html new file mode 100644 index 0000000000..fadc8cf919 --- /dev/null +++ b/rustdocs/definitions/navigation/struct.TransactionSignAction.html @@ -0,0 +1,132 @@ +TransactionSignAction in definitions::navigation - Rust
pub struct TransactionSignAction {
+    pub content: TransactionCardSet,
+    pub has_pwd: bool,
+    pub author_info: MAddressCard,
+    pub network_info: OrderedNetworkSpecs,
+}
Expand description

A single transaction signing action.

+

Fields§

§content: TransactionCardSet

Parsed contents of the transaction.

+
§has_pwd: bool

If this transaction should be signed with a passworded key.

+
§author_info: MAddressCard

Information about the signing key of this transaction.

+
§network_info: OrderedNetworkSpecs

Info about the network this tx happens on.

+

Trait Implementations§

source§

impl Clone for TransactionSignAction

source§

fn clone(&self) -> TransactionSignAction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TransactionSignAction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<TransactionSignAction> for TransactionSignAction

source§

fn eq(&self, other: &TransactionSignAction) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for TransactionSignAction

source§

impl StructuralEq for TransactionSignAction

source§

impl StructuralPartialEq for TransactionSignAction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/enum.CurrentVerifier.html b/rustdocs/definitions/network_specs/enum.CurrentVerifier.html new file mode 100644 index 0000000000..b788dafe8e --- /dev/null +++ b/rustdocs/definitions/network_specs/enum.CurrentVerifier.html @@ -0,0 +1,155 @@ +CurrentVerifier in definitions::network_specs - Rust
pub enum CurrentVerifier {
+    Valid(ValidCurrentVerifier),
+}
Expand description

Current network verifier

+

Variants§

§

Valid(ValidCurrentVerifier)

Verifier is valid, Vault can use the network

+

Trait Implementations§

source§

impl Clone for CurrentVerifier

source§

fn clone(&self) -> CurrentVerifier

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for CurrentVerifier

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for CurrentVerifier

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for CurrentVerifier

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<CurrentVerifier> for CurrentVerifier

source§

fn eq(&self, other: &CurrentVerifier) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<CurrentVerifier> for CurrentVerifier

source§

impl Eq for CurrentVerifier

source§

impl StructuralEq for CurrentVerifier

source§

impl StructuralPartialEq for CurrentVerifier

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/enum.ValidCurrentVerifier.html b/rustdocs/definitions/network_specs/enum.ValidCurrentVerifier.html new file mode 100644 index 0000000000..b4295f4227 --- /dev/null +++ b/rustdocs/definitions/network_specs/enum.ValidCurrentVerifier.html @@ -0,0 +1,161 @@ +ValidCurrentVerifier in definitions::network_specs - Rust
pub enum ValidCurrentVerifier {
+    General,
+    Custom {
+        v: Verifier,
+    },
+}
Expand description

Possible variants of valid current network verifier

+

Could be general verifier (by default for networks Polkadot, Kusama, Westend), +or custom verifier.

+

Variants§

§

General

Network has general verifier

+
§

Custom

Fields

Network has some other verifier, different from the general one

+

Trait Implementations§

source§

impl Clone for ValidCurrentVerifier

source§

fn clone(&self) -> ValidCurrentVerifier

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ValidCurrentVerifier

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for ValidCurrentVerifier

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for ValidCurrentVerifier

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<ValidCurrentVerifier> for ValidCurrentVerifier

source§

fn eq(&self, other: &ValidCurrentVerifier) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<ValidCurrentVerifier> for ValidCurrentVerifier

source§

impl Eq for ValidCurrentVerifier

source§

impl StructuralEq for ValidCurrentVerifier

source§

impl StructuralPartialEq for ValidCurrentVerifier

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/enum.VerifierValue.html b/rustdocs/definitions/network_specs/enum.VerifierValue.html new file mode 100644 index 0000000000..e7c5f5ea4d --- /dev/null +++ b/rustdocs/definitions/network_specs/enum.VerifierValue.html @@ -0,0 +1,160 @@ +VerifierValue in definitions::network_specs - Rust
pub enum VerifierValue {
+    Standard {
+        m: MultiSigner,
+    },
+}
Expand description

Information on known and existing verifier

+

Verifier public key with associated encryption algorithm.

+

Variants§

§

Standard

Fields

§m: MultiSigner

public key for standard substrate-compatible encryption algorithms

+

Implementations§

source§

impl VerifierValue

source

pub fn show_card(&self) -> MVerifierDetails

Get the MVerifierDetails for UI to show.

+
source

pub fn show_error(&self) -> String

Display VerifierValue in human-readable format, for errors

+

Trait Implementations§

source§

impl Clone for VerifierValue

source§

fn clone(&self) -> VerifierValue

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for VerifierValue

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for VerifierValue

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for VerifierValue

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<VerifierValue> for VerifierValue

source§

fn eq(&self, other: &VerifierValue) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<VerifierValue> for VerifierValue

source§

impl Eq for VerifierValue

source§

impl StructuralEq for VerifierValue

source§

impl StructuralPartialEq for VerifierValue

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/index.html b/rustdocs/definitions/network_specs/index.html new file mode 100644 index 0000000000..83ce34cdda --- /dev/null +++ b/rustdocs/definitions/network_specs/index.html @@ -0,0 +1,225 @@ +definitions::network_specs - Rust
Expand description

Network specs, verifiers, and related types

+

Vault could be used only for networks introduced to the database.

+

Each network has associated set of parameters called here network specs. +Cold database stores OrderedNetworkSpecs. +Hot database stores NetworkSpecs. Air-gap transfers with +add_specs payload also contain NetworkSpecs. +Network specs rarely change and are generally are introduced into +Vault only once for each network.

+

Vault has verifier system storing public keys that Vault trusts are providing +correct updates to the information.

+

Cold database stores CurrentVerifier for each network and general verifier.

+

Verifiers in cold database

+

Vault is expected to be safe to use as long as the information uploaded +into it through air-gap is the correct one.

+

Damaged network specs or network metadata could result in transactions +being parsed incorrectly.

+

Verifier system is introduced to have important transferable data signed +by a trusted party to exclude accidental or intentional errors. It is +especially important in keeping fast-changing network metadata updated.

+

Verifiers of data entering the Vault

+

The data scanned into Vault has an associated Verifier.

+

If the information is verified, Verifier is Some(VerifierValue).

+

If the information is not verified, Verifier is None.

+

Payloads with verified data contain trusted party public key and signature +for the data transferred, that are checked when the data is processed in +Vault. Unverified data gets processed as is, without any verification. +Unverified data should be used cautiously, and avoided unless absolutely +necessary.

+

VerifierValue is public key of the trusted party using a certain +encryption algorithm. At this moment, only Standard variant supporting +MultiSigner +is available.

+

Verifiers of data already in the Vault

+

There is CurrentVerifier for each network known to Vault, and +general verifier Verifier for some selected networks and for types.

+

Network verifiers

+

Each network in Vault has an associated CurrentVerifier, having two +variants: Valid and Dead. Networks could be used by the Vault only if +their verifier is CurrentVerifier::Valid with associated +ValidCurrentVerifier value. Networks having CurrentVerifier::Dead no +longer could be used or updated, unless the Vault is completely wiped and +reset.

+

Network verifier information is stored in VERIFIERS tree of the cold +database, with VerifierKey in key form as +a key and encoded CurrentVerifier as a value. VerifierKey is derived +from network genesis hash. If the network supports more than one encryption +algorithm, network specs for all encryption algorithms and network metadata +would have the same CurrentVerifier.

+

ValidCurrentVerifier has two variants: General and Custom.

+

ValidCurrentVerifier::General means that the network is verified by the +general verifier known to Vault. As installed or freshly wiped Vault +has default networks Polkadot, Kusama, and Westend having +ValidCurrentVerifier::General.

+

ValidCurrentVerifier::Custom means that the network is verified by +some Verifier other than the general verifier.

+

Updating network metadata could be done only if the metadata is signed by +exactly same CurrentVerifier as already recorded in the database for +this network.

+

The messages for updating network specs or loading network specs for same +network, but with different encryption algorithm, could be signed with +same CurrentVerifier or an upgraded one.

+

General verifier

+

General verifier is the default Verifier known to the Vault. It is the +data source the Vault relies upon the most.

+

General verifier is set up during Vault initialization, and is by +default Parity-associated key.

+

General verifier value is stored in SETTREE tree of the cold database +under key GENERALVERIFIER.

+

General verifier is used for verification of network specs and metadata +for some networks (ideally, the ones most used on particular Vault +device), and types information. Data previously verified by any +general verifier other than None could be updated only if the update +is signed by the same verifier. When general verifier is None, it gets +updated to Verifier of the first user-accepted verified updating payload +(i.e. with trust on first use).

+

Users can remove existing general verifier, this will re-initialize Vault +with general verifier set to None and reset the Vault data to defaults.

+

It is not recommended to use Vault without any general verifier, so it is +best to set up the user-trusted party as the general verifier right after +removing the old general verifier, by downloading and accepting some +trusted data with network specs or types information.

+

Note that setting general verifier from None to Some(VerifierValue) +will remove all previously known data (i.e. network specs, network metadata, +types information) associated with previous general verifier value None. +This is done to avoid false trust to data that appeared before the +verification began.

+

Note that if the network specs get removed due to general verifier change, +the addresses within this network are not deleted from the database, just +never displayed in the user interface. Vault will recall them if the +network specs get re-loaded verified with correct general verifier.

+

Let’s consider a case when user has removed the default general verifier. +After the reset, general verifier value becomes None, however, the Vault +still has the network specs and metadata for default networks, and types +information. User plans to operate the Vault with Parity-unrelated network, +and loads verified network specs for it. The received data verifier becomes +the new general verifier, and the data for default networks and default +types gets removed.

+

Upgrading verifiers

+

Once ValidCurrentVerifier::Custom is set to Some(VerifierValue), it +could not be changed to any other value except general verifier. Note that +in this case general verifier is also already set to Some(VerifierValue), +since general verifier could not be None if there is not-None custom +verifier.

+

General verifier could not be changed once set up with Some(VerifierValue), +unless the Vault is wiped and reset.

+

At the moment there is no mechanism allowing users to set up the verifiers +except by loading and accepting the updates signed by these verifiers.

+

In some cases network verifiers and general verifier could be changed +by accepting updating payloads:

+
    +
  • +

    ValidCurrentVerifier::General with general verifier None could be +upgraded to ValidCurrentVerifier::General with general verifier +(Some(VerifierValue)). Happens when Vault with no value set up for +the general verifier receives and accepts a verified update with any +network specs or types.

    +
  • +
  • +

    Network ValidCurrentVerifier::Custom(Some(VerifierValue)) could be +upgraded to ValidCurrentVerifier::General with general verifier set to +(Some(VerifierValue)). +Happens when Vault receives and accepts network specs update verified +by general verifier for this network. Note: metadata update with +verifier upgrade would be rejected.

    +
  • +
  • +

    Network ValidCurrentVerifier::Custom(None) could be upgraded to +ValidCurrentVerifier::General with general verifier set to +(Some(VerifierValue)). +Happens when Vault receives and accepts network specs update verified +by general verifier for this network. Note: metadata update with +verifier upgrade would be rejected.

    +
  • +
+

If CurrentVerifier upgrade occurs, all pre-upgrade network information +is wiped (Vault warns about that).

+

If general verifier upgrade occurs, all pre-upgrade information verified +by the general verifier is wiped (Vault warns about that).

+

Deleting network specs

+

User can remove any network from Vault. “Remove network” means removing:

+
    +
  • all network specs associated with network genesis hash,
  • +
  • all metadata associated with network specs name,
  • +
  • all addresses within this network with any encryption,
  • +
  • (possibly) modifying CurrentVerifier.
  • +
+

If the network was verified by CurrentVerifier::Valid with value +ValidCurrentVerifier::General, verifier information in CurrentVerifier +will not change. Restoring the network will require updates signed by the +same general verifier as before.

+

If the network was verified by CurrentVerifier::Valid with value +ValidCurrentVerifier::Custom and the custom Verifier was None, no +changes will happen, network verifier will stay +CurrentVerifier::Valid(ValidCurrentVerifier::Custom(None)). Otherwise, +the network verifier will be changed to CurrentVerifier::Dead, and it +would be impossible to use the network again unless the Vault is wiped. +This is a part of security policy.

+

Network specs in cold database

+

OrderedNetworkSpecs are stored in SPECSTREE tree of the cold database, +with NetworkSpecsKey in key form as a key and SCALE-encoded OrderedNetworkSpecs +as a value.

+

OrderedNetworkSpecs include both the encryption (Encryption) and network +genesis hash ([u8; 32]), that are used for NetworkSpecsKey generation.
+OrderedNetworkSpecs retrieved for given NetworkSpecsKey always get checked +for consistency.

+

If the network supports more than one encryption algorithm, each encryption +corresponds to different NetworkSpecsKey, and any or all of them could be +coexisting in Vault simultaneously.

+

OrderedNetworkSpecs are generally expected to remain unchanged over time.

+

Adding new network specs

+

New networks could be added to Vault through scanning add_specs QR code +for the network.

+

Updating network specs (replacing old ones with new ones without deleting

+

old ones)

+

Vault will not allow to update network specs if critical parameters +have changed.
+These critical parameters are:

+
    +
  • base58prefix, network-associated base58 prefix
  • +
  • decimals
  • +
  • name, network name, as it appears in the network metadata
  • +
  • unit
  • +
+

However, if non-critical parameters have changes, Vault will permit the +network specs updating.
+These non-critical parameters are:

+
    +
  • color
  • +
  • logo, network-associated logo picture
  • +
  • path_id, default address derivation path for the network
  • +
  • secondary_color
  • +
  • title, network title, as it is displayed in Vault
  • +
+

Some quickly updating experimental networks are changing the genesis hash +often. Network genesis hash participates in NetworkSpecsKey +generation. This way, if the genesis hash got updated, the network would +appear “unknown” to Vault, and to use it, network specs with new genesis hash +would have to be added. Adding network specs with new genesis hash does not +require deleting network specs with old genesis hash.

+

Deleting network specs

+

Any network could be removed, however sometimes there are associated changes +in corresponding verifier. See above.

+

Balance representation: decimals and units

+

To represent the balance-related values properly, each network has associated +decimals and units. The balance-related values in, for example, transactions +are integer numbers, and are formatted properly only during the transactions +decoding. For this decimals and unit values from OrderedNetworkSpecs are used. +decimals indicate the order of magnitude, by which the token unit +exceeds the integer representing unit (see examples below). +Both decimals and unit values could be queried through RPC calls for each +Vault-compatible network. +Sometimes the networks have several available decimals and units, or none at all.
+This cases should be dealt with on case-by-case basis.

+

Examples: balance representation

+

Balance (u64) from transaction is decoded as 1. +Network decimals value is 12, network unit is WND. +The balance should be therefore represented as 1 pWND.

+

Balance (u64) from transaction is decoded as 10000000. +Network decimals value is 12, network unit is WND. +The balance should be therefore represented as 10 uWND.

+

Structs

  • Network properties that must be fetched with RPC call for properties +in each compatible network
  • Network parameters stored SCALE-encoded in the hot database +SPECSTREEPREP tree under NetworkSpecsKey and sent as QR code +in add_specs messages
  • Network parameters stored SCALE-encoded in the cold database +SPECSTREE tree under NetworkSpecsKey
  • Network parameters needed to decode and display transaction
  • Verifier information

Enums

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/sidebar-items.js b/rustdocs/definitions/network_specs/sidebar-items.js new file mode 100644 index 0000000000..37f7b67a5c --- /dev/null +++ b/rustdocs/definitions/network_specs/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["CurrentVerifier","ValidCurrentVerifier","VerifierValue"],"struct":["NetworkProperties","NetworkSpecs","OrderedNetworkSpecs","ShortSpecs","Verifier"]}; \ No newline at end of file diff --git a/rustdocs/definitions/network_specs/struct.NetworkProperties.html b/rustdocs/definitions/network_specs/struct.NetworkProperties.html new file mode 100644 index 0000000000..68a847cf0d --- /dev/null +++ b/rustdocs/definitions/network_specs/struct.NetworkProperties.html @@ -0,0 +1,153 @@ +NetworkProperties in definitions::network_specs - Rust
pub struct NetworkProperties {
+    pub base58prefix: u16,
+    pub decimals: u8,
+    pub unit: String,
+}
Expand description

Network properties that must be fetched with RPC call for properties +in each compatible network

+

Fields§

§base58prefix: u16§decimals: u8§unit: String

Trait Implementations§

source§

impl Debug for NetworkProperties

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for NetworkProperties

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for NetworkProperties

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<NetworkProperties> for NetworkProperties

source§

fn eq(&self, other: &NetworkProperties) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<NetworkProperties> for NetworkProperties

source§

impl Eq for NetworkProperties

source§

impl StructuralEq for NetworkProperties

source§

impl StructuralPartialEq for NetworkProperties

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/struct.NetworkSpecs.html b/rustdocs/definitions/network_specs/struct.NetworkSpecs.html new file mode 100644 index 0000000000..550d4e0ee4 --- /dev/null +++ b/rustdocs/definitions/network_specs/struct.NetworkSpecs.html @@ -0,0 +1,200 @@ +NetworkSpecs in definitions::network_specs - Rust
pub struct NetworkSpecs {
+    pub base58prefix: u16,
+    pub color: String,
+    pub decimals: u8,
+    pub encryption: Encryption,
+    pub genesis_hash: H256,
+    pub logo: String,
+    pub name: String,
+    pub path_id: String,
+    pub secondary_color: String,
+    pub title: String,
+    pub unit: String,
+}
Expand description

Network parameters stored SCALE-encoded in the hot database +SPECSTREEPREP tree under NetworkSpecsKey and sent as QR code +in add_specs messages

+

These network parameters are sufficient to add network into Vault database.

+

Fields§

§base58prefix: u16

Network-specific prefix for address representation in +base58 format

+
§color: String

Network-associated color.
+Historically is there, not doing much at the moment.

+
§decimals: u8

Order of magnitude, by which the token unit exceeds the balance integer unit.
+Is used to display balance-related values properly.

+
§encryption: Encryption

Encryption algorithm the network uses

+
§genesis_hash: H256

Network genesis hash

+

Network associated logo

+
§name: String

Network name, as it appears in network metadata

+
§path_id: String

Default derivation path for addresses in this network

+
§secondary_color: String

Network-associated secondary color.
+Historically is there, not doing much at the moment.

+
§title: String

Network title, as it appears in Vault menus.

+
§unit: String

Token name, to display balance-related values properly.

+

Implementations§

source§

impl NetworkSpecs

source

pub fn to_store(&self, order: u8) -> OrderedNetworkSpecs

Makes OrderedNetworkSpecs from NetworkSpecs, +needs order input

+

order is network number on the list of networks in Vault.

+

This happens when Vault receives new network specs through QR update.

+
source

pub fn short(&self) -> ShortSpecs

source

pub fn from_entry_with_key_checked( + network_specs_key: &NetworkSpecsKey, + network_specs_to_send_encoded: IVec +) -> Result<Self>

Gets NetworkSpecs from NetworkSpecsKey and associated +value from hot database tree SPECSTREEPREP

+

Checks that there is no genesis hash or encryption mismatch between +key and specs content.

+
source

pub fn from_entry_checked( + (network_specs_key_vec, network_specs_to_send_encoded): (IVec, IVec) +) -> Result<Self>

Gets NetworkSpecs from hot database tree SPECSTREEPREP +(key, value) entry

+

Checks that there is no genesis hash or encryption mismatch between +key and specs content.

+

Trait Implementations§

source§

impl Clone for NetworkSpecs

source§

fn clone(&self) -> NetworkSpecs

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for NetworkSpecs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for NetworkSpecs

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for NetworkSpecs

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<NetworkSpecs> for NetworkSpecs

source§

fn eq(&self, other: &NetworkSpecs) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<NetworkSpecs> for NetworkSpecs

source§

impl Eq for NetworkSpecs

source§

impl StructuralEq for NetworkSpecs

source§

impl StructuralPartialEq for NetworkSpecs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/struct.OrderedNetworkSpecs.html b/rustdocs/definitions/network_specs/struct.OrderedNetworkSpecs.html new file mode 100644 index 0000000000..9a10b00d7e --- /dev/null +++ b/rustdocs/definitions/network_specs/struct.OrderedNetworkSpecs.html @@ -0,0 +1,172 @@ +OrderedNetworkSpecs in definitions::network_specs - Rust
pub struct OrderedNetworkSpecs {
+    pub specs: NetworkSpecs,
+    pub order: u8,
+}
Expand description

Network parameters stored SCALE-encoded in the cold database +SPECSTREE tree under NetworkSpecsKey

+

These network parameters must be in Vault database for the Vault to be +able to operate with this network.

+

Fields§

§specs: NetworkSpecs§order: u8

Order in which the network is displayed by Vault

+

Implementations§

source§

impl OrderedNetworkSpecs

source

pub fn from_entry_with_key_checked( + network_specs_key: &NetworkSpecsKey, + network_specs_encoded: IVec +) -> Result<Self>

Gets OrderedNetworkSpecs from NetworkSpecsKey and associated value +from cold database tree SPECSTREE

+

Checks that there is no genesis hash or encryption mismatch between +key and specs content.

+
source

pub fn from_entry_checked( + (network_specs_key_vec, network_specs_encoded): (IVec, IVec) +) -> Result<Self>

Gets OrderedNetworkSpecs from cold database tree SPECSTREE (key, value) +entry

+

Checks that there is no genesis hash or encryption mismatch between +key and specs content.

+

Trait Implementations§

source§

impl Clone for OrderedNetworkSpecs

source§

fn clone(&self) -> OrderedNetworkSpecs

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for OrderedNetworkSpecs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for OrderedNetworkSpecs

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for OrderedNetworkSpecs

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl From<OrderedNetworkSpecs> for MSCNetworkInfo

source§

fn from(o: OrderedNetworkSpecs) -> Self

Converts to this type from the input type.
source§

impl From<OrderedNetworkSpecs> for Network

source§

fn from(n: OrderedNetworkSpecs) -> Self

Converts to this type from the input type.
source§

impl PartialEq<OrderedNetworkSpecs> for OrderedNetworkSpecs

source§

fn eq(&self, other: &OrderedNetworkSpecs) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<OrderedNetworkSpecs> for OrderedNetworkSpecs

source§

impl Eq for OrderedNetworkSpecs

source§

impl StructuralEq for OrderedNetworkSpecs

source§

impl StructuralPartialEq for OrderedNetworkSpecs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/struct.ShortSpecs.html b/rustdocs/definitions/network_specs/struct.ShortSpecs.html new file mode 100644 index 0000000000..820d954c80 --- /dev/null +++ b/rustdocs/definitions/network_specs/struct.ShortSpecs.html @@ -0,0 +1,165 @@ +ShortSpecs in definitions::network_specs - Rust
pub struct ShortSpecs {
+    pub base58prefix: u16,
+    pub decimals: u8,
+    pub genesis_hash: H256,
+    pub name: String,
+    pub unit: String,
+}
Expand description

Network parameters needed to decode and display transaction

+

Fields§

§base58prefix: u16

Network-specific prefix for address representation in +base58 format

+
§decimals: u8

Order of magnitude, by which the token unit exceeds the balance integer unit.
+Is used to display balance-related values properly.

+
§genesis_hash: H256

Network genesis hash

+
§name: String

Network name, as it appears in network metadata

+
§unit: String

Token name, to display balance-related values properly.

+

Trait Implementations§

source§

impl Clone for ShortSpecs

source§

fn clone(&self) -> ShortSpecs

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ShortSpecs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for ShortSpecs

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for ShortSpecs

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<ShortSpecs> for ShortSpecs

source§

fn eq(&self, other: &ShortSpecs) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<ShortSpecs> for ShortSpecs

source§

impl Eq for ShortSpecs

source§

impl StructuralEq for ShortSpecs

source§

impl StructuralPartialEq for ShortSpecs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/network_specs/struct.Verifier.html b/rustdocs/definitions/network_specs/struct.Verifier.html new file mode 100644 index 0000000000..859d78e0ae --- /dev/null +++ b/rustdocs/definitions/network_specs/struct.Verifier.html @@ -0,0 +1,159 @@ +Verifier in definitions::network_specs - Rust
pub struct Verifier {
+    pub v: Option<VerifierValue>,
+}
Expand description

Verifier information

+

Either real verifier or information that there is no verifier.

+

Fields§

§v: Option<VerifierValue>

Implementations§

source§

impl Verifier

source

pub fn show_card(&self) -> MVerifierDetails

Get the MVerifierDetails for UI to show.

+
source

pub fn show_error(&self) -> String

Display Verifier in human-readable format, for errors

+

Trait Implementations§

source§

impl Clone for Verifier

source§

fn clone(&self) -> Verifier

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Verifier

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for Verifier

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for Verifier

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<Verifier> for Verifier

source§

fn eq(&self, other: &Verifier) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<Verifier> for Verifier

source§

impl Eq for Verifier

source§

impl StructuralEq for Verifier

source§

impl StructuralPartialEq for Verifier

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/definitions/qr_transfers/index.html b/rustdocs/definitions/qr_transfers/index.html new file mode 100644 index 0000000000..edbafc2f4e --- /dev/null +++ b/rustdocs/definitions/qr_transfers/index.html @@ -0,0 +1,25 @@ +definitions::qr_transfers - Rust
Expand description

Information that could be send and received through air-gap as QR codes content

+

All information that Vault could get without a complete wipe must arrive +through the QR codes maintaining the air-gap. In addition to transactions +that could be parsed and signed, this includes:

+
    +
  • adding new networks,
  • +
  • updating the metadata of existing networks,
  • +
  • updating the types information,
  • +
  • bulk-importing the derivations
  • +
+

QR codes for adding networks, loading metadata and updating types information +all have similar structure:

+
    +
  • prelude 53xxyy where xx is the encryption type, and yy is the message type
  • +
  • verifier public key (if the QR code is signed by verifier)
  • +
  • content
  • +
  • verifier signature (if the QR code is signed by verifier)
  • +
+

QR codes for importing derivations are never signed and have structure:

+
    +
  • prelude 53ffde
  • +
  • content
  • +
+

This module deals with content part of QR codes.

+

Structs

\ No newline at end of file diff --git a/rustdocs/definitions/qr_transfers/sidebar-items.js b/rustdocs/definitions/qr_transfers/sidebar-items.js new file mode 100644 index 0000000000..f5ea4568af --- /dev/null +++ b/rustdocs/definitions/qr_transfers/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["ContentAddSpecs","ContentLoadMeta","ContentLoadTypes"]}; \ No newline at end of file diff --git a/rustdocs/definitions/qr_transfers/struct.ContentAddSpecs.html b/rustdocs/definitions/qr_transfers/struct.ContentAddSpecs.html new file mode 100644 index 0000000000..9457ac415c --- /dev/null +++ b/rustdocs/definitions/qr_transfers/struct.ContentAddSpecs.html @@ -0,0 +1,159 @@ +ContentAddSpecs in definitions::qr_transfers - Rust
pub struct ContentAddSpecs(_);
Expand description

add_specs QR code content

+

Messages add_specs are used to add new networks to the Vault.

+

Implementations§

source§

impl ContentAddSpecs

source

pub fn generate(specs: &NetworkSpecs) -> Self

Generate ContentAddSpecs from network specs NetworkSpecs.

+
source

pub fn from_slice(slice: &[u8]) -> Self

Transform &[u8] slice into ContentAddSpecs.

+
source

pub fn specs(&self) -> Result<NetworkSpecs>

Get network specs NetworkSpecs from ContentAddSpecs.

+
source

pub fn write<P>(&self, file_path: P) -> Result<()>where + P: AsRef<Path>,

Write ContentAddSpecs into file that could be signed by the verifier.

+
source

pub fn to_sign(&self) -> Vec<u8>

Transform ContentAddSpecs into Vec<u8> that could be signed by the verifier.

+
source

pub fn to_transfer(&self) -> Vec<u8>

Transform ContentAddSpecs into Vec<u8> that is concatenated with +other parts of the QR code.

+

Note that it is different from .to_sign() function. Effectively, already +SCALE-encoded NetworkSpecs are encoded second time as an opaque +Vec<u8>. This is done to have encoded piece length announced at the +beginning of the u8 set, to simplify cutting the received message in Vault.

+

Trait Implementations§

source§

impl Decode for ContentAddSpecs

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for ContentAddSpecs

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<ContentAddSpecs> for ContentAddSpecs

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/qr_transfers/struct.ContentLoadMeta.html b/rustdocs/definitions/qr_transfers/struct.ContentLoadMeta.html new file mode 100644 index 0000000000..09ecf7334b --- /dev/null +++ b/rustdocs/definitions/qr_transfers/struct.ContentLoadMeta.html @@ -0,0 +1,129 @@ +ContentLoadMeta in definitions::qr_transfers - Rust
pub struct ContentLoadMeta(_);
Expand description

load_metadata QR code content

+

Messages load_metadata are used to update through air-gap the network +metadata for networks already known to the Vault.

+

Implementations§

source§

impl ContentLoadMeta

source

pub fn generate(meta: &[u8], genesis_hash: &H256) -> Self

Generate ContentLoadMeta from metadata &[u8] slice and network genesis hash.

+
source

pub fn from_slice(slice: &[u8]) -> Self

Transform &[u8] slice into ContentLoadMeta.

+
source

pub fn meta(&self) -> Result<Vec<u8>>

Get metadata Vec<u8> from ContentLoadMeta.

+
source

pub fn genesis_hash(&self) -> Result<H256>

Get genesis hash [u8; 32] from ContentLoadMeta.

+
source

pub fn meta_genhash(&self) -> Result<(Vec<u8>, H256)>

Get metadata Vec<u8> and genesis hash [u8; 32] from ContentLoadMeta as a tuple.

+
source

pub fn write<P>(&self, filename: P) -> Result<()>where + P: AsRef<Path>,

Write ContentLoadMeta into file that could be signed by the verifier.

+
source

pub fn to_sign(&self) -> Vec<u8>

Transform ContentLoadMeta into Vec<u8> that could be signed by the verifier.

+
source

pub fn to_transfer(&self) -> Vec<u8>

Transform ContentLoadMeta into Vec<u8> that is concatenated with +other parts of the QR code.

+

Currently similar to .to_sign() function.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/qr_transfers/struct.ContentLoadTypes.html b/rustdocs/definitions/qr_transfers/struct.ContentLoadTypes.html new file mode 100644 index 0000000000..21bdf6cad8 --- /dev/null +++ b/rustdocs/definitions/qr_transfers/struct.ContentLoadTypes.html @@ -0,0 +1,167 @@ +ContentLoadTypes in definitions::qr_transfers - Rust
pub struct ContentLoadTypes(_);
Expand description

load_types QR code content

+

Messages load_types are used to add or update Vault types information.

+

Externally acquired types information is needed only for +RuntimeMetadata +V13 and below. After V14 all types information is contained within the metadata.

+

This kind of messages is expected to be used seldom, if ever.

+

Implementations§

source§

impl ContentLoadTypes

source

pub fn generate(types: &[TypeEntry]) -> Self

Generate ContentLoadTypes from types information &[TypeEntry].

+
source

pub fn from_slice(slice: &[u8]) -> Self

Transform &[u8] slice into ContentLoadTypes.

+
source

pub fn types(&self) -> Result<Vec<TypeEntry>>

Get types information Vec<TypeEntry> from ContentLoadTypes.

+
source

pub fn write<P>(&self, path: P) -> Result<()>where + P: AsRef<Path>,

Write ContentLoadTypes into file that could be signed by the verifier.

+
source

pub fn store(&self) -> Vec<u8>

Transform ContentLoadTypes into Vec<u8> to be put in the database.

+
source

pub fn to_sign(&self) -> Vec<u8>

Transform ContentLoadTypes into Vec<u8> that could be signed by the verifier.

+
source

pub fn to_transfer(&self) -> Vec<u8>

Transform ContentLoadTypes into Vec<u8> that is concatenated with +other parts of the QR code.

+

Note that it is different from .to_sign() function. Effectively, already +SCALE-encoded Vec<TypeEntry> is encoded second time as an opaque +Vec<u8>. This is done to have encoded piece length announced at the +beginning of the u8 set, to simplify cutting the received message in Vault.

+
source

pub fn show(&self) -> (String, Identicon)

Generate types information hash and corresponding id pic

+

Types information hash is calculated for Vec<u8> of encoded types information, +as it would be stored in the database

+

Trait Implementations§

source§

impl Decode for ContentLoadTypes

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for ContentLoadTypes

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<ContentLoadTypes> for ContentLoadTypes

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/schema_version/index.html b/rustdocs/definitions/schema_version/index.html new file mode 100644 index 0000000000..e18d210509 --- /dev/null +++ b/rustdocs/definitions/schema_version/index.html @@ -0,0 +1,2 @@ +definitions::schema_version - Rust
Expand description

Record of the Vault database schema version

+

Structs

\ No newline at end of file diff --git a/rustdocs/definitions/schema_version/sidebar-items.js b/rustdocs/definitions/schema_version/sidebar-items.js new file mode 100644 index 0000000000..bc57f2797f --- /dev/null +++ b/rustdocs/definitions/schema_version/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["SchemaVersion"]}; \ No newline at end of file diff --git a/rustdocs/definitions/schema_version/struct.SchemaVersion.html b/rustdocs/definitions/schema_version/struct.SchemaVersion.html new file mode 100644 index 0000000000..bde9837fd0 --- /dev/null +++ b/rustdocs/definitions/schema_version/struct.SchemaVersion.html @@ -0,0 +1,148 @@ +SchemaVersion in definitions::schema_version - Rust
pub struct SchemaVersion(_);

Implementations§

source§

impl SchemaVersion

source

pub fn current() -> Self

Get the current schema version

+
source

pub fn from_ivec(ivec: &IVec) -> Result<Self>

Get SchemaVersion with content from the encoded value, +as it is stored in the database.

+
source

pub fn store_current() -> Vec<u8>

Methods from Deref<Target = u32>§

1.43.0 · source

pub const MIN: u32 = 0u32

1.43.0 · source

pub const MAX: u32 = 4_294_967_295u32

1.53.0 · source

pub const BITS: u32 = 32u32

Trait Implementations§

source§

impl Decode for SchemaVersion

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Deref for SchemaVersion

§

type Target = u32

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl Encode for SchemaVersion

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
source§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
source§

fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( + &self, + f: __CodecUsingEncodedCallback +) -> __CodecOutputReturn

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl EncodeLike<SchemaVersion> for SchemaVersion

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/sidebar-items.js b/rustdocs/definitions/sidebar-items.js new file mode 100644 index 0000000000..ce02c439cb --- /dev/null +++ b/rustdocs/definitions/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":["crypto","danger","derivations","dynamic_derivations","error","error_active","error_signer","helpers","history","keyring","metadata","navigation","network_specs","qr_transfers","schema_version","types","users"]}; \ No newline at end of file diff --git a/rustdocs/definitions/types/enum.Description.html b/rustdocs/definitions/types/enum.Description.html new file mode 100644 index 0000000000..4727e299e7 --- /dev/null +++ b/rustdocs/definitions/types/enum.Description.html @@ -0,0 +1,157 @@ +Description in definitions::types - Rust
pub enum Description {
+    Type(String),
+    Enum(Vec<EnumVariant>),
+    Struct(Vec<StructField>),
+}
Expand description

Type description

+

Must be available for all types

+

Variants§

§

Type(String)

type is a type alias

+
§

Enum(Vec<EnumVariant>)

type is an enum

+
§

Struct(Vec<StructField>)

type is a struct

+

Trait Implementations§

source§

impl Clone for Description

source§

fn clone(&self) -> Description

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for Description

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for Description

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<Description> for Description

source§

fn eq(&self, other: &Description) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<Description> for Description

source§

impl Eq for Description

source§

impl StructuralEq for Description

source§

impl StructuralPartialEq for Description

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/types/enum.EnumVariantType.html b/rustdocs/definitions/types/enum.EnumVariantType.html new file mode 100644 index 0000000000..1be5b43cab --- /dev/null +++ b/rustdocs/definitions/types/enum.EnumVariantType.html @@ -0,0 +1,153 @@ +EnumVariantType in definitions::types - Rust
pub enum EnumVariantType {
+    None,
+    Type(String),
+    Struct(Vec<StructField>),
+}
Expand description

Types of enum variants

+

Variants§

§

None

§

Type(String)

§

Struct(Vec<StructField>)

Trait Implementations§

source§

impl Clone for EnumVariantType

source§

fn clone(&self) -> EnumVariantType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for EnumVariantType

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for EnumVariantType

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<EnumVariantType> for EnumVariantType

source§

fn eq(&self, other: &EnumVariantType) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<EnumVariantType> for EnumVariantType

source§

impl Eq for EnumVariantType

source§

impl StructuralEq for EnumVariantType

source§

impl StructuralPartialEq for EnumVariantType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/types/index.html b/rustdocs/definitions/types/index.html new file mode 100644 index 0000000000..8e73ee7daf --- /dev/null +++ b/rustdocs/definitions/types/index.html @@ -0,0 +1,17 @@ +definitions::types - Rust

Module definitions::types

source ·
Expand description

Types description needed to decode transactions generated with +RuntimeMetadata +V12 and V13

+

Prior to V14, metadata did not contain information on what the type used +in the transaction actually is, it had only the type name. +For common types (i.e the ones encountered in network Westend, Polkadot, +Kusama, and Rococo) the type information was found elsewhere, and is a part of +existing Vault defaults.

+

TypeEntry is used to store the type information. Default types set contains TypeEntry +data for common types, and is stored in SETTREE tree of both hot and cold databases +with key TYPES.

+

For transaction with runtime metadata V12 or V13 to be decoded each of the +encountered types must have a corresponding TypeEntry or be transformable into a type +having TypeEntry.

+

With V14 release this module became obsolete, however, since not all networks are yet on V14 +metadata, it remains here.

+

Structs

Enums

\ No newline at end of file diff --git a/rustdocs/definitions/types/sidebar-items.js b/rustdocs/definitions/types/sidebar-items.js new file mode 100644 index 0000000000..dc5fba80b5 --- /dev/null +++ b/rustdocs/definitions/types/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Description","EnumVariantType"],"struct":["EnumVariant","StructField","TypeEntry"]}; \ No newline at end of file diff --git a/rustdocs/definitions/types/struct.EnumVariant.html b/rustdocs/definitions/types/struct.EnumVariant.html new file mode 100644 index 0000000000..3025e97ff0 --- /dev/null +++ b/rustdocs/definitions/types/struct.EnumVariant.html @@ -0,0 +1,155 @@ +EnumVariant in definitions::types - Rust
pub struct EnumVariant {
+    pub variant_name: String,
+    pub variant_type: EnumVariantType,
+}
Expand description

Enum variant description

+

Must be available for each variant of the enum.

+

Fields§

§variant_name: String

enum variant name, will be displayed during the parsing if the variant is encountered

+
§variant_type: EnumVariantType

variant type

+

Trait Implementations§

source§

impl Clone for EnumVariant

source§

fn clone(&self) -> EnumVariant

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for EnumVariant

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for EnumVariant

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<EnumVariant> for EnumVariant

source§

fn eq(&self, other: &EnumVariant) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<EnumVariant> for EnumVariant

source§

impl Eq for EnumVariant

source§

impl StructuralEq for EnumVariant

source§

impl StructuralPartialEq for EnumVariant

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/types/struct.StructField.html b/rustdocs/definitions/types/struct.StructField.html new file mode 100644 index 0000000000..b0a9b2fc86 --- /dev/null +++ b/rustdocs/definitions/types/struct.StructField.html @@ -0,0 +1,155 @@ +StructField in definitions::types - Rust
pub struct StructField {
+    pub field_name: Option<String>,
+    pub field_type: String,
+}
Expand description

Struct field description

+

Must be available for each field if the struct.

+

Fields§

§field_name: Option<String>

struct field name, if it exists, it will be displayed during the parsing if the struct is encountered

+
§field_type: String

field type

+

Trait Implementations§

source§

impl Clone for StructField

source§

fn clone(&self) -> StructField

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for StructField

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for StructField

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<StructField> for StructField

source§

fn eq(&self, other: &StructField) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<StructField> for StructField

source§

impl Eq for StructField

source§

impl StructuralEq for StructField

source§

impl StructuralPartialEq for StructField

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/types/struct.TypeEntry.html b/rustdocs/definitions/types/struct.TypeEntry.html new file mode 100644 index 0000000000..dd6143300d --- /dev/null +++ b/rustdocs/definitions/types/struct.TypeEntry.html @@ -0,0 +1,154 @@ +TypeEntry in definitions::types - Rust
pub struct TypeEntry {
+    pub name: String,
+    pub description: Description,
+}
Expand description

Information each type has to have: type name and description

+

Fields§

§name: String

type name, as it appears in the metadata

+
§description: Description

type description

+

Trait Implementations§

source§

impl Clone for TypeEntry

source§

fn clone(&self) -> TypeEntry

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Decode for TypeEntry

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for TypeEntry

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<TypeEntry> for TypeEntry

source§

fn eq(&self, other: &TypeEntry) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<TypeEntry> for TypeEntry

source§

impl Eq for TypeEntry

source§

impl StructuralEq for TypeEntry

source§

impl StructuralPartialEq for TypeEntry

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/definitions/users/index.html b/rustdocs/definitions/users/index.html new file mode 100644 index 0000000000..d3504d5037 --- /dev/null +++ b/rustdocs/definitions/users/index.html @@ -0,0 +1,7 @@ +definitions::users - Rust

Module definitions::users

source ·
Expand description

Address key associated non-secret information stored in Vault database

+

Vault database has a tree ADDRTREE with AddressKey in key form +as a key and encoded AddressDetails as a value. +AddressDetails contains non-secret information associated with address key.

+

ADDRTREE is operated mainly from within the Vault.

+

Release and test versions of the cold database are generated on the Active side.

+

Structs

  • Address key associated non-secret information stored in Vault database
\ No newline at end of file diff --git a/rustdocs/definitions/users/sidebar-items.js b/rustdocs/definitions/users/sidebar-items.js new file mode 100644 index 0000000000..c9876bc8cc --- /dev/null +++ b/rustdocs/definitions/users/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"struct":["AddressDetails"]}; \ No newline at end of file diff --git a/rustdocs/definitions/users/struct.AddressDetails.html b/rustdocs/definitions/users/struct.AddressDetails.html new file mode 100644 index 0000000000..8f65e4270b --- /dev/null +++ b/rustdocs/definitions/users/struct.AddressDetails.html @@ -0,0 +1,192 @@ +AddressDetails in definitions::users - Rust
pub struct AddressDetails {
+    pub seed_name: String,
+    pub path: String,
+    pub has_pwd: bool,
+    pub network_id: Option<NetworkSpecsKey>,
+    pub encryption: Encryption,
+    pub secret_exposed: bool,
+}
Expand description

Address key associated non-secret information stored in Vault database

+

Info that should be available for any address key. +No secrets are stored there.

+

Fields§

§seed_name: String

seed name (as it is known to the Vault device)

+
§path: String

derivation path, only with soft (/) and hard (//) junctions (i.e. no password)

+
§has_pwd: bool

whether the address key has an associated password

+
§network_id: Option<NetworkSpecsKey>

set of networks, identified through NetworkSpecsKey, that are available +to work with this address key

+
§encryption: Encryption

encryption algorithm associated with the address key and all its associated networks

+
§secret_exposed: bool

address, or its parent address, had or could have secret exposed

+

Implementations§

source§

impl AddressDetails

source

pub fn process_entry_with_key_checked( + address_key: &AddressKey, + address_details_encoded: IVec +) -> Result<(MultiSigner, Self)>

Gets (MultiSigner, +AddressDetails) tuple from AddressKey and associated value from +database tree ADDRTREE.

+

Checks that there is no encryption mismatch.

+
source

pub fn process_entry_checked( + (address_key_vec, address_details_encoded): (IVec, IVec) +) -> Result<(MultiSigner, Self)>

Gets (MultiSigner, +AddressDetails) tuple from database tree ADDRTREE (key, value) entry.

+

Checks that there is no encryption mismatch.

+
source

pub fn from_entry_with_key_checked( + address_key: &AddressKey, + address_details_encoded: IVec +) -> Result<Self>

Gets AddressDetails from AddressKey and associated value from +database tree ADDRTREE.

+

Checks that there is no encryption mismatch.

+
source

pub fn is_root(&self) -> bool

Checks if the AddressDetails have empty derivation path (i.e. +derivation path is empty and there is no password).

+

Address key in this case is called root key or seed key.

+
source

pub fn identicon_style(&self) -> IdenticonStyle

The style to use for identicons.

+

Jdenticon for root key. +Otherwise, the style is taken from the encryption algorithm.

+

Trait Implementations§

source§

impl Clone for AddressDetails

source§

fn clone(&self) -> AddressDetails

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AddressDetails

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Decode for AddressDetails

source§

fn decode<__CodecInputEdqy: Input>( + __codec_input_edqy: &mut __CodecInputEdqy +) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( + input: &mut I, + dst: &mut MaybeUninit<Self> +) -> Result<DecodeFinished, Error>where + I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>where + I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
source§

impl Encode for AddressDetails

source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( + &self, + __codec_dest_edqy: &mut __CodecOutputEdqy +)

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8, Global>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> Rwhere + F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
source§

impl PartialEq<AddressDetails> for AddressDetails

source§

fn eq(&self, other: &AddressDetails) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl EncodeLike<AddressDetails> for AddressDetails

source§

impl Eq for AddressDetails

source§

impl StructuralEq for AddressDetails

source§

impl StructuralPartialEq for AddressDetails

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> DecodeAll for Twhere + T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for Twhere + T: Decode,

§

fn decode_all_with_depth_limit( + limit: u32, + input: &mut &[u8] +) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where + I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of +bytes consumed. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> KeyedVec for Twhere + T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>

Return an encoding of Self prepended by given slice.
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<S> Codec for Swhere + S: Decode + Encode,

§

impl<T> EncodeLike<&&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&T> for Twhere + T: Encode,

§

impl<T> EncodeLike<&mut T> for Twhere + T: Encode,

§

impl<T> EncodeLike<Arc<T, Global>> for Twhere + T: Encode,

§

impl<T> EncodeLike<Box<T, Global>> for Twhere + T: Encode,

§

impl<'a, T> EncodeLike<Cow<'a, T>> for Twhere + T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T, Global>> for Twhere + T: Encode,

§

impl<S> FullCodec for Swhere + S: Decode + FullEncode,

§

impl<S> FullEncode for Swhere + S: Encode + EncodeLike<S>,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/generate_message/all.html b/rustdocs/generate_message/all.html new file mode 100644 index 0000000000..7d4e0f2fb2 --- /dev/null +++ b/rustdocs/generate_message/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Structs

Enums

Functions

Type Definitions

\ No newline at end of file diff --git a/rustdocs/generate_message/enum.Error.html b/rustdocs/generate_message/enum.Error.html new file mode 100644 index 0000000000..1754fc4ce4 --- /dev/null +++ b/rustdocs/generate_message/enum.Error.html @@ -0,0 +1,302 @@ +Error in generate_message - Rust
pub enum Error {
+
Show 40 variants Database(Error), + Io(Error), + Definitions(Error), + Sled(Error), + JsonRPC(Error), + Codec(Error), + Specs(SpecsError), + Metadata(MetadataError), + Qr(Box<dyn Error>), + SignatureWrongLength(usize, usize), + PublicKeyWrongLength(usize, usize), + SpecsInDb { + name: String, + encryption: Encryption, + }, + NotFound(String), + NotSupported, + TwoGenesisHashVariantsForName { + name: String, + }, + TwoUrlVariantsForName { + name: String, + }, + TwoBase58ForName { + name: String, + }, + AddressBookEmpty, + UKeyUrlInDb { + title: String, + url: String, + }, + UKeyHashInDb { + address_book_entry: AddressBookEntry, + url: String, + }, + UnexpectedMetadataFormat, + UnexpectedGenesisHashFormat, + UnexpectedSystemPropertiesFormat, + UnexpectedBlockHashFormat, + AddressBookSpecsName { + address_book_name: String, + specs_name: String, + }, + NetworkSpecs(NetworkSpecsKey), + TwoNamesForUrl { + url: String, + }, + HotDatabaseMetadataOverTwoEntries { + name: String, + }, + HotDatabaseMetadataSameVersionTwice { + name: String, + version: u32, + }, + EarlierVersion { + name: String, + old_version: u32, + new_version: u32, + }, + SameVersionDifferentMetadata { + name: String, + version: u32, + block_hash_in_db: Option<H256>, + block_hash_in_fetch: Option<H256>, + }, + ValuesChanged { + url: String, + what: Changed, + }, + FaultySpecs { + url: String, + error: SpecsError, + }, + UnexpectedFetchedGenesisHashFormat { + value: String, + }, + UnexpectedFetchedBlockHashFormat { + value: String, + }, + BlockHashLength, + AddressBookEntryWithName { + name: String, + }, + BadSignature, + UnexpectedPubKeyLength, + UnexpectedSignatureLength, +
}
Expand description

Generate Message error.

+

Variants§

§

Database(Error)

§

Io(Error)

§

Definitions(Error)

§

Sled(Error)

§

JsonRPC(Error)

§

Codec(Error)

§

Specs(SpecsError)

§

Metadata(MetadataError)

§

Qr(Box<dyn Error>)

§

SignatureWrongLength(usize, usize)

§

PublicKeyWrongLength(usize, usize)

§

SpecsInDb

Fields

§name: String

network name

+
§encryption: Encryption

network supported encryption

+

Network specs are already in the database

+
§

NotFound(String)

§

NotSupported

§

TwoGenesisHashVariantsForName

Fields

§name: String

network name

+

ADDRESS_BOOK tree of the hot database contains +AddressBookEntry entries with same +name field and different genesis_hash values.

+

This is not allowed, as it would cause uncertainty in load_metadata +message generation, which is build using metadata and genesis hash.

+
§

TwoUrlVariantsForName

Fields

§name: String

network name

+

ADDRESS_BOOK tree of the hot database contains +AddressBookEntry entries with same +name field and different address values.

+

Hot database does not allow to store more than one trusted URL address +for RPC calls for same network.

+

Alternative URL address could be used if the database is not updated +(-d key is used).

+

To update the address in the database in case the old one is no longer +acceptable, one should remove old entry, and only then add the new one.

+
§

TwoBase58ForName

Fields

§name: String

network name

+

SPECSTREEPREP tree of the hot database contains +NetworkSpecs entries +with same network name, but different base58 prefix.

+
§

AddressBookEmpty

ADDRESS_BOOK tree of the hot database has no entries to process.

+
§

UKeyUrlInDb

Fields

§title: String

network address book title

+
§url: String

URL address

+

Tried to fetch with -u key using address already known to the database

+
§

UKeyHashInDb

Fields

§address_book_entry: AddressBookEntry

address book entry with exactly matching genesis hash

+
§url: String

URL address used for fetch

+

Tried to fetch with -u key using address not known to the database, +but got genesis hash that is already known.

+

Likely tried to fetch with different address when one already is in the +database.

+

Hot database does not allow to store more than one trusted URL address +for RPC calls for same network.

+

Alternative URL address could be used if the database is not updated +(-d key is used).

+

To update the address in the database in case the old one is no longer +acceptable, one should remove old entry, and only then add the new one.

+
§

UnexpectedMetadataFormat

§

UnexpectedGenesisHashFormat

§

UnexpectedSystemPropertiesFormat

§

UnexpectedBlockHashFormat

§

AddressBookSpecsName

Fields

§address_book_name: String
§specs_name: String

name in NetworkSpecs

+

AddressBookEntry in hot database +contains encryption and genesis_hash fields, from which the +corresponding NetworkSpecsKey could be built.

+

NetworkSpecsKey has an associated +NetworkSpecs value +stored in SPECSTREEPREP tree of the hot database. NetworkSpecs +has field name with network name.

+

This error appears if the name from NetworkSpecs differs from +the name in AddressBookEntry.

+
§

NetworkSpecs(NetworkSpecsKey)

§

TwoNamesForUrl

Fields

§url: String

URL address, for which two condlicting names were found

+

ADDRESS_BOOK tree of the hot database contains +AddressBookEntry entries with same +address field and different name fields.

+

Name in address book is taken from the metadata, metadata is fetched +using RPC call, so one URL address can correspond to only one network +name.

+
§

HotDatabaseMetadataOverTwoEntries

Fields

§name: String

network name

+

METATREE of the hot database should contain at most two latest +metadata versions for each network, with the older entries being +deleted as the new ones appear.

+

This error appears if during the processing more than two metadata +entries for the network are found.

+
§

HotDatabaseMetadataSameVersionTwice

Fields

§name: String

network name

+
§version: u32

network version

+

METATREE of the hot database has two entries for a network with the +same metadata version.

+

Note: at this moment should be unreachable, since the entries are +getting checked for consistency with MetaKey.

+
§

EarlierVersion

Fields

§name: String

network name

+
§old_version: u32

network version in hot database, higher than the one just fetched

+
§new_version: u32

network version just fetched

+

Fetched network metadata version is lower than the one already in the +hot database.

+
§

SameVersionDifferentMetadata

Fields

§name: String

network name

+
§version: u32

network version

+
§block_hash_in_db: Option<H256>

optionally recorded block hash for which the metadata was fetched +when recorded in the database

+
§block_hash_in_fetch: Option<H256>

block hash for which the metadata is fetched now

+

Fetched network metadata is different from the one already in the hot +database, with the same network name and network version.

+
§

ValuesChanged

Fields

§url: String

URL address used for RPC call

+
§what: Changed

what exactly has changed

+

Fetched data is different from the one already in the hot database.

+
§

FaultySpecs

Fields

§url: String

URL address used for RPC cal

+
§error: SpecsError

what exactly is wrong with the network specs

+

Fetched network specs are not suitable for use in Vault.

+
§

UnexpectedFetchedGenesisHashFormat

Fields

§value: String

genesis hash value as received through RPC call

+

Fetched genesis hash could not be transformed in expected [u8; 32] value.

+
§

UnexpectedFetchedBlockHashFormat

Fields

§value: String

block hash value as received through RPC call

+

Fetched block hash could not be transformed in expected [u8; 32] value.

+
§

BlockHashLength

User-entered block hash has invalid length

+
§

AddressBookEntryWithName

Fields

§name: String

AddressBookEntry searched in +ADDRESS_BOOK tree of the hot database by matching the name field.

+

Associated data is the network name used for searching.

+
§

BadSignature

Provided data signature (entered separately or as a part of +SufficientCrypto input) is invalid +for given public key and data.

+
§

UnexpectedPubKeyLength

§

UnexpectedSignatureLength

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<MetadataError> for Error

source§

fn from(source: MetadataError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl !Send for Error

§

impl !Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/generate_message/error/enum.Error.html b/rustdocs/generate_message/error/enum.Error.html new file mode 100644 index 0000000000..a664dd9a1b --- /dev/null +++ b/rustdocs/generate_message/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../generate_message/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/generate_message/error/type.Result.html b/rustdocs/generate_message/error/type.Result.html new file mode 100644 index 0000000000..7cb9a15510 --- /dev/null +++ b/rustdocs/generate_message/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../generate_message/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/generate_message/fetch_metadata/fn.fetch_info.html b/rustdocs/generate_message/fetch_metadata/fn.fetch_info.html new file mode 100644 index 0000000000..a7fe63d44a --- /dev/null +++ b/rustdocs/generate_message/fetch_metadata/fn.fetch_info.html @@ -0,0 +1,9 @@ +fetch_info in generate_message::fetch_metadata - Rust
pub fn fetch_info(str_address: &str) -> Result<FetchedInfo>
Expand description

Fetch data for load_metadata update payload through RPC calls.

+

Function inputs address at which RPC calls are made.

+

Data fetched:

+
    +
  1. current block hash
  2. +
  3. metadata at this block hash
  4. +
  5. network genesis hash
  6. +
+
\ No newline at end of file diff --git a/rustdocs/generate_message/fetch_metadata/fn.fetch_info_with_network_specs.html b/rustdocs/generate_message/fetch_metadata/fn.fetch_info_with_network_specs.html new file mode 100644 index 0000000000..f852643f9d --- /dev/null +++ b/rustdocs/generate_message/fetch_metadata/fn.fetch_info_with_network_specs.html @@ -0,0 +1,11 @@ +fetch_info_with_network_specs in generate_message::fetch_metadata - Rust
pub fn fetch_info_with_network_specs(
+    str_address: &str
+) -> Result<FetchedInfoWithNetworkSpecs>
Expand description

Fetch data for add_specs update payload through RPC calls.

+

Function inputs address at which RPC calls are made.

+

Data fetched:

+
    +
  1. current network metadata
  2. +
  3. network genesis hash
  4. +
  5. network system properties (could contain base58 prefix, decimals, unit)
  6. +
+
\ No newline at end of file diff --git a/rustdocs/generate_message/fetch_metadata/fn.fetch_meta_at_block.html b/rustdocs/generate_message/fetch_metadata/fn.fetch_meta_at_block.html new file mode 100644 index 0000000000..e3733c0476 --- /dev/null +++ b/rustdocs/generate_message/fetch_metadata/fn.fetch_meta_at_block.html @@ -0,0 +1,8 @@ +fetch_meta_at_block in generate_message::fetch_metadata - Rust
pub fn fetch_meta_at_block(
+    str_address: &str,
+    block_hash: H256
+) -> Result<String>
Expand description

Fetch network metadata from given URL address at given block through RPC +call.

+

Function inputs address at which RPC call is made and block hash in [H256] +format. Outputs hexadecimal metadata.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/fetch_metadata/index.html b/rustdocs/generate_message/fetch_metadata/index.html new file mode 100644 index 0000000000..664294bdc6 --- /dev/null +++ b/rustdocs/generate_message/fetch_metadata/index.html @@ -0,0 +1,57 @@ +generate_message::fetch_metadata - Rust
Expand description

Fetch network information from a node using RPC calls

+

Preparing add_specs and load_metadata update payload may require +gathering network information from a node.

+

For add_specs update payload:

+ + + + + + + + + + + + + + + + + +
callfetched information
state_getMetadata, for current blockcurrent block network metadata, that will be used to get:
+ - network name
+ - base58 prefix from metadata +
chain_getBlockHash, for 0th blocknetwork genesis hash
system_properties- base58 prefix
+ - decimals
+ - unit
+
+

Network name expected to remain the same for the network over time. The only +way to get network name is from the network metadata Version constant.

+

For load_metadata update:

+ + + + + + + + + + + + + + + + + +
callfetched information
chain_getBlockHash, for current blockcurrent block hash
state_getMetadata, for just fetched block hashlatest network metadata
chain_getBlockHash, for 0th blocknetwork genesis hash
+

Block hash is fetched first to always have network metadata matching the +block hash, even if the two RPC calls were done during block switching.

+

Addresses for RPC calls in different networks could be found +here

+

This module deals only with the RPC calls part and does no processing +of the fetched data.

+

Structs

Functions

\ No newline at end of file diff --git a/rustdocs/generate_message/fetch_metadata/sidebar-items.js b/rustdocs/generate_message/fetch_metadata/sidebar-items.js new file mode 100644 index 0000000000..2d64d26de3 --- /dev/null +++ b/rustdocs/generate_message/fetch_metadata/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["fetch_info","fetch_info_with_network_specs","fetch_meta_at_block"],"struct":["FetchedInfo","FetchedInfoWithNetworkSpecs"]}; \ No newline at end of file diff --git a/rustdocs/generate_message/fetch_metadata/struct.FetchedInfo.html b/rustdocs/generate_message/fetch_metadata/struct.FetchedInfo.html new file mode 100644 index 0000000000..230e6e3146 --- /dev/null +++ b/rustdocs/generate_message/fetch_metadata/struct.FetchedInfo.html @@ -0,0 +1,127 @@ +FetchedInfo in generate_message::fetch_metadata - Rust
pub struct FetchedInfo {
+    pub meta: String,
+    pub block_hash: String,
+    pub genesis_hash: String,
+}
Expand description

Data from RPC calls for load_metadata update payload.

+

This data is sufficient for load_metadata update payload generation, +i.e. nothing else has to be known about the network beforehand to produce an +update payload.

+

Fields§

§meta: String

Fetched metadata, as a hexadecimal string

+
§block_hash: String

Block hash, at which the metadata was fetched, as a hexadecimal string

+
§genesis_hash: String

Fetched genesis hash, as a hexadecimal string

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/fetch_metadata/struct.FetchedInfoWithNetworkSpecs.html b/rustdocs/generate_message/fetch_metadata/struct.FetchedInfoWithNetworkSpecs.html new file mode 100644 index 0000000000..0be8f5df1f --- /dev/null +++ b/rustdocs/generate_message/fetch_metadata/struct.FetchedInfoWithNetworkSpecs.html @@ -0,0 +1,128 @@ +FetchedInfoWithNetworkSpecs in generate_message::fetch_metadata - Rust
pub struct FetchedInfoWithNetworkSpecs {
+    pub meta: String,
+    pub genesis_hash: String,
+    pub properties: Map<String, Value>,
+}
Expand description

Data from RPC calls for add_specs update payload.

+

Note that this data is not sufficient for add_specs update payload +generation. At least network encryption is needed additionally.

+

Fields§

§meta: String

Fetched metadata, as a hexadecimal string

+
§genesis_hash: String

Fetched genesis hash, as a hexadecimal string

+
§properties: Map<String, Value>

Fetched network properties, as a Map

+

Properties are expected to contain base58 prefix, decimals, and units, +but in some cases some data may be missing.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/fn.full_run.html b/rustdocs/generate_message/fn.full_run.html new file mode 100644 index 0000000000..6cdbb8b2a9 --- /dev/null +++ b/rustdocs/generate_message/fn.full_run.html @@ -0,0 +1,2 @@ +full_run in generate_message - Rust

Function generate_message::full_run

source ·
pub fn full_run(command: Command) -> Result<()>
Expand description

Process incoming command as interpreted by parser.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/enum.Write.html b/rustdocs/generate_message/helpers/enum.Write.html new file mode 100644 index 0000000000..9ea090306f --- /dev/null +++ b/rustdocs/generate_message/helpers/enum.Write.html @@ -0,0 +1,124 @@ +Write in generate_message::helpers - Rust
pub enum Write {
+    All,
+    OnlyNew,
+    None,
+}
Expand description

Content to print during load-metadata<-k/-p/-t> processing.

+

Variants§

§

All

all payloads, -t key or no setting key was used

+
§

OnlyNew

only new payloads, -k setting key was used

+
§

None

no payloads, -p setting key was used

+

Auto Trait Implementations§

§

impl RefUnwindSafe for Write

§

impl Send for Write

§

impl Sync for Write

§

impl Unpin for Write

§

impl UnwindSafe for Write

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.add_new_metadata.html b/rustdocs/generate_message/helpers/fn.add_new_metadata.html new file mode 100644 index 0000000000..fb1653f6b0 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.add_new_metadata.html @@ -0,0 +1,12 @@ +add_new_metadata in generate_message::helpers - Rust
pub fn add_new_metadata(
+    new: &MetaValuesStamped,
+    sorted: &mut SortedMetaValues
+) -> Result<bool>
Expand description

Try updating SortedMetaValues with new MetaValuesStamped.

+

Outputs flag to indicate that the SortedMetaValues got updated.

+

If the fetched metadata is good and has later version than the ones in +SortedMetaValues, it is added to newer set, any previous value from +newer is moved to older. If there was any value in older, it gets +kicked out.

+

If there was no block hash in hot database and the metadata did not change, +a new block hash could be added if it is known.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.add_specs_print.html b/rustdocs/generate_message/helpers/fn.add_specs_print.html new file mode 100644 index 0000000000..9d878596c1 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.add_specs_print.html @@ -0,0 +1,8 @@ +add_specs_print in generate_message::helpers - Rust
pub fn add_specs_print<P>(
+    network_specs: &NetworkSpecs,
+    files_dir: P
+) -> Result<()>where
+    P: AsRef<Path>,
Expand description

Write to file add_specs update payload as raw bytes.

+

Resulting file, located in dedicated directory (by default, FOLDER), could be +used to generate data signature and to produce updates.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.address_book_content.html b/rustdocs/generate_message/helpers/fn.address_book_content.html new file mode 100644 index 0000000000..a9f0c360c5 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.address_book_content.html @@ -0,0 +1,4 @@ +address_book_content in generate_message::helpers - Rust
pub fn address_book_content(
+    database: &Db
+) -> Result<Vec<(String, AddressBookEntry)>>
Expand description

Get all ADDRESS_BOOK entries with address book titles.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.db_upd_metadata.html b/rustdocs/generate_message/helpers/fn.db_upd_metadata.html new file mode 100644 index 0000000000..483ff989aa --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.db_upd_metadata.html @@ -0,0 +1,8 @@ +db_upd_metadata in generate_message::helpers - Rust
pub fn db_upd_metadata(
+    database: &Db,
+    sorted_meta_values: SortedMetaValues
+) -> Result<()>
Expand description

Update the database after load-metadata run.

+

Clear METATREE tree of the hot database and write new metadata set in +it.

+

Update META_HISTORY tree.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.db_upd_network.html b/rustdocs/generate_message/helpers/fn.db_upd_network.html new file mode 100644 index 0000000000..a4131bbb3e --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.db_upd_network.html @@ -0,0 +1,12 @@ +db_upd_network in generate_message::helpers - Rust
pub fn db_upd_network(
+    database: &Db,
+    address: &str,
+    network_specs: &NetworkSpecs
+) -> Result<()>
Expand description

Update the database after add-specs run.

+

Inputs &str URL address that was used for RPC calls and already completed +NetworkSpecs.

+

Adds simultaneously AddressBookEntry to ADDRESS_BOOK and +NetworkSpecs to SPECSTREEPREP.

+

Key for AddressBookEntry is the network address book title. It always +has format <network_name>-<network_encryption>.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.debug_meta_at_block.html b/rustdocs/generate_message/helpers/fn.debug_meta_at_block.html new file mode 100644 index 0000000000..3caeb196cd --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.debug_meta_at_block.html @@ -0,0 +1,14 @@ +debug_meta_at_block in generate_message::helpers - Rust
pub fn debug_meta_at_block<P>(
+    address: &str,
+    hex_block_hash: &str,
+    export_dir: P
+) -> Result<()>where
+    P: AsRef<Path>,
Expand description

Get network metadata file from given URL address at specified block.

+

For investigating silent metadata update cases.

+

Inputs &str address and hexadecimal &str block hash.

+

Fetched network metadata, processes it, and outputs file +<network_name><metadata_version>_<block_hash> with hexadecimal +metadata in EXPORT_FOLDER.

+

Command line to get metadata at block:

+

meta_at_block -u <network_url_address> -block <block_hash>

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.error_occured.html b/rustdocs/generate_message/helpers/fn.error_occured.html new file mode 100644 index 0000000000..68e11ee4e5 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.error_occured.html @@ -0,0 +1,2 @@ +error_occured in generate_message::helpers - Rust
pub fn error_occured(e: Error, pass_errors: bool) -> Result<()>
Expand description

Process error depending on pass errors flag -s.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.filter_address_book_by_url.html b/rustdocs/generate_message/helpers/fn.filter_address_book_by_url.html new file mode 100644 index 0000000000..2fc64f75f1 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.filter_address_book_by_url.html @@ -0,0 +1,6 @@ +filter_address_book_by_url in generate_message::helpers - Rust
pub fn filter_address_book_by_url(
+    database: &Db,
+    address: &str
+) -> Result<Vec<(String, AddressBookEntry)>>
Expand description

Get all ADDRESS_BOOK entries with address book titles, for given URL +address.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.generate_bulk_transaction_qr.html b/rustdocs/generate_message/helpers/fn.generate_bulk_transaction_qr.html new file mode 100644 index 0000000000..2d8e9e6c20 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.generate_bulk_transaction_qr.html @@ -0,0 +1,8 @@ +generate_bulk_transaction_qr in generate_message::helpers - Rust
pub fn generate_bulk_transaction_qr<P: AsRef<Path>>(
+    dst_file: P,
+    tx_count: usize,
+    chunk_size: u16,
+    from: String,
+    output_format: Goal
+) -> Result<()>
Expand description

Generate Bulk Transaction Signing payload for testing

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.generate_key_info_export_to_qr.html b/rustdocs/generate_message/helpers/fn.generate_key_info_export_to_qr.html new file mode 100644 index 0000000000..944ff868c4 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.generate_key_info_export_to_qr.html @@ -0,0 +1,6 @@ +generate_key_info_export_to_qr in generate_message::helpers - Rust
pub fn generate_key_info_export_to_qr<P: AsRef<Path>>(
+    output_name: P,
+    chunk_size: u16,
+    fps: u16,
+    keys_num: usize
+) -> Result<()>
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.generate_qr_code.html b/rustdocs/generate_message/helpers/fn.generate_qr_code.html new file mode 100644 index 0000000000..5000d7ddca --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.generate_qr_code.html @@ -0,0 +1,7 @@ +generate_qr_code in generate_message::helpers - Rust
pub fn generate_qr_code<P: AsRef<Path>>(
+    input: &[u8],
+    chunk_size: u16,
+    fps: u16,
+    output_name: P
+) -> Result<()>
Expand description

Generate with data into a specified file.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.genesis_hash_in_hot_db.html b/rustdocs/generate_message/helpers/fn.genesis_hash_in_hot_db.html new file mode 100644 index 0000000000..8b6c657a9a --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.genesis_hash_in_hot_db.html @@ -0,0 +1,5 @@ +genesis_hash_in_hot_db in generate_message::helpers - Rust
pub fn genesis_hash_in_hot_db(
+    database: &Db,
+    genesis_hash: H256
+) -> Result<Option<AddressBookEntry>>
Expand description

Search for any ADDRESS_BOOK entry with given genesis hash.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.get_address_book_entry.html b/rustdocs/generate_message/helpers/fn.get_address_book_entry.html new file mode 100644 index 0000000000..37f238c200 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.get_address_book_entry.html @@ -0,0 +1,5 @@ +get_address_book_entry in generate_message::helpers - Rust
pub fn get_address_book_entry(
+    database: &Db,
+    title: &str
+) -> Result<AddressBookEntry>
Expand description

Get AddressBookEntry from the database for given address book title.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.get_network_specs_to_send.html b/rustdocs/generate_message/helpers/fn.get_network_specs_to_send.html new file mode 100644 index 0000000000..00c3cf2864 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.get_network_specs_to_send.html @@ -0,0 +1,7 @@ +get_network_specs_to_send in generate_message::helpers - Rust
pub fn get_network_specs_to_send(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<NetworkSpecs>
Expand description

Get network specs NetworkSpecs from the hot database.

+

Network specs here are expected to be found, not finding them results in an +error.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.is_specname_in_db.html b/rustdocs/generate_message/helpers/fn.is_specname_in_db.html new file mode 100644 index 0000000000..0597966623 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.is_specname_in_db.html @@ -0,0 +1,7 @@ +is_specname_in_db in generate_message::helpers - Rust
pub fn is_specname_in_db(
+    database: &Db,
+    name: &str,
+    except_title: &str
+) -> Result<bool>
Expand description

Check if ADDRESS_BOOK has entries with given name and title other than +except_title.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.load_metadata_print.html b/rustdocs/generate_message/helpers/fn.load_metadata_print.html new file mode 100644 index 0000000000..f481ce2a46 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.load_metadata_print.html @@ -0,0 +1,8 @@ +load_metadata_print in generate_message::helpers - Rust
pub fn load_metadata_print<P>(
+    shortcut: &MetaShortCut,
+    files_dir: P
+) -> Result<()>where
+    P: AsRef<Path>,
Expand description

Write to file load_metadata update payload as raw bytes.

+

Resulting file, located in dedicated FOLDER, could be +used to generate data signature and to produce updates.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.meta_fetch.html b/rustdocs/generate_message/helpers/fn.meta_fetch.html new file mode 100644 index 0000000000..0b1eb3cb98 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.meta_fetch.html @@ -0,0 +1,3 @@ +meta_fetch in generate_message::helpers - Rust
pub fn meta_fetch(address: &str) -> Result<MetaFetched>
Expand description

Get network information through RPC calls at address and interpret it into +MetaFetched.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.meta_history_content.html b/rustdocs/generate_message/helpers/fn.meta_history_content.html new file mode 100644 index 0000000000..2edcd7ab5d --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.meta_history_content.html @@ -0,0 +1,2 @@ +meta_history_content in generate_message::helpers - Rust
pub fn meta_history_content(database: &Db) -> Result<Vec<MetaHistoryEntry>>
Expand description

Get all entries from META_HISTORY.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.network_specs_from_entry.html b/rustdocs/generate_message/helpers/fn.network_specs_from_entry.html new file mode 100644 index 0000000000..0c2ec20eb5 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.network_specs_from_entry.html @@ -0,0 +1,7 @@ +network_specs_from_entry in generate_message::helpers - Rust
pub fn network_specs_from_entry(
+    database: &Db,
+    address_book_entry: &AddressBookEntry
+) -> Result<NetworkSpecs>
Expand description

Get NetworkSpecs corresponding to the given AddressBookEntry.

+

Entries in ADDRESS_BOOK and SPECSTREEPREP trees for any network can +be added and removed only simultaneously.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.network_specs_from_title.html b/rustdocs/generate_message/helpers/fn.network_specs_from_title.html new file mode 100644 index 0000000000..9f3f3f3cb8 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.network_specs_from_title.html @@ -0,0 +1,5 @@ +network_specs_from_title in generate_message::helpers - Rust
pub fn network_specs_from_title(
+    database: &Db,
+    title: &str
+) -> Result<NetworkSpecs>
Expand description

Get NetworkSpecs from the database for given address book title.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.prepare_metadata.html b/rustdocs/generate_message/helpers/fn.prepare_metadata.html new file mode 100644 index 0000000000..e9cdb6a94e --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.prepare_metadata.html @@ -0,0 +1,2 @@ +prepare_metadata in generate_message::helpers - Rust
pub fn prepare_metadata(database: &Db) -> Result<SortedMetaValues>
Expand description

Collect and sort MetaValuesStamped from the hot database

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.read_metadata_database.html b/rustdocs/generate_message/helpers/fn.read_metadata_database.html new file mode 100644 index 0000000000..5e584885e2 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.read_metadata_database.html @@ -0,0 +1,2 @@ +read_metadata_database in generate_message::helpers - Rust
pub fn read_metadata_database(database: &Db) -> Result<Vec<MetaValuesStamped>>
Expand description

Collect all MetaValuesStamped from the hot database.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.specs_agnostic.html b/rustdocs/generate_message/helpers/fn.specs_agnostic.html new file mode 100644 index 0000000000..de1477b96f --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.specs_agnostic.html @@ -0,0 +1,9 @@ +specs_agnostic in generate_message::helpers - Rust
pub fn specs_agnostic(
+    address: &str,
+    encryption: Encryption,
+    optional_token_override: Option<Token>,
+    optional_signer_title_override: Option<String>
+) -> Result<NetworkSpecs>
Expand description

Fetch data and assemble NetworkSpecs with only URL address and +user-entered data.

+

Database is not addressed. For -d content key.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.try_get_network_specs_to_send.html b/rustdocs/generate_message/helpers/fn.try_get_network_specs_to_send.html new file mode 100644 index 0000000000..1ef75bd17f --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.try_get_network_specs_to_send.html @@ -0,0 +1,7 @@ +try_get_network_specs_to_send in generate_message::helpers - Rust
pub fn try_get_network_specs_to_send(
+    database: &Db,
+    network_specs_key: &NetworkSpecsKey
+) -> Result<Option<NetworkSpecs>>
Expand description

Try to get network specs NetworkSpecs from the hot database.

+

If the NetworkSpecsKey and associated NetworkSpecs are not +found in the SPECSTREEPREP, the result is Ok(None).

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.update_known_specs.html b/rustdocs/generate_message/helpers/fn.update_known_specs.html new file mode 100644 index 0000000000..6b1390b503 --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.update_known_specs.html @@ -0,0 +1,12 @@ +update_known_specs in generate_message::helpers - Rust
pub fn update_known_specs(
+    address: &str,
+    specs: &mut NetworkSpecs,
+    optional_signer_title_override: Option<String>,
+    optional_token_override: Option<Token>
+) -> Result<bool>
Expand description

Update NetworkSpecs already existing in the database with +exactly same encryption.

+

Could be used to overwrite token (if possible for the network) or the Vault +display title. If no title override is used, the title remains as it was.

+

Output flag indicates if the value has changed, and the database entry +should be updated.

+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/fn.update_modify_encryption_specs.html b/rustdocs/generate_message/helpers/fn.update_modify_encryption_specs.html new file mode 100644 index 0000000000..fb67c1de9a --- /dev/null +++ b/rustdocs/generate_message/helpers/fn.update_modify_encryption_specs.html @@ -0,0 +1,20 @@ +update_modify_encryption_specs in generate_message::helpers - Rust
pub fn update_modify_encryption_specs(
+    address: &str,
+    specs: &mut NetworkSpecs,
+    encryption: &Encryption,
+    optional_signer_title_override: Option<String>,
+    optional_token_override: Option<Token>
+) -> Result<()>
Expand description

Modify NetworkSpecs existing in the database only with +different encryption.

+

New data always will be added to the database unless errors occur.

+

Function inputs:

+
    +
  • &str address to make RPC calls
  • +
  • NetworkSpecs as they were found in the database, to be modified +here
  • +
  • new Encryption to apply to encryption and title (if no title +override was entered) fields of the NetworkSpecs
  • +
  • optional title override
  • +
  • optional token override
  • +
+
\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/index.html b/rustdocs/generate_message/helpers/index.html new file mode 100644 index 0000000000..ff9eaff6e4 --- /dev/null +++ b/rustdocs/generate_message/helpers/index.html @@ -0,0 +1,11 @@ +generate_message::helpers - Rust
Expand description

Helpers

+

Structs

Enums

  • Content to print during load-metadata<-k/-p/-t> processing.

Functions

\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/sidebar-items.js b/rustdocs/generate_message/helpers/sidebar-items.js new file mode 100644 index 0000000000..0c22c15c68 --- /dev/null +++ b/rustdocs/generate_message/helpers/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Write"],"fn":["add_new_metadata","add_specs_print","address_book_content","db_upd_metadata","db_upd_network","debug_meta_at_block","error_occured","filter_address_book_by_url","generate_bulk_transaction_qr","generate_key_info_export_to_qr","generate_qr_code","genesis_hash_in_hot_db","get_address_book_entry","get_network_specs_to_send","is_specname_in_db","load_metadata_print","meta_fetch","meta_history_content","network_specs_from_entry","network_specs_from_title","prepare_metadata","read_metadata_database","specs_agnostic","try_get_network_specs_to_send","update_known_specs","update_modify_encryption_specs"],"struct":["MetaFetched","MetaShortCut","MetaValuesStamped","SortedMetaValues"]}; \ No newline at end of file diff --git a/rustdocs/generate_message/helpers/struct.MetaFetched.html b/rustdocs/generate_message/helpers/struct.MetaFetched.html new file mode 100644 index 0000000000..0a5ca1a6b3 --- /dev/null +++ b/rustdocs/generate_message/helpers/struct.MetaFetched.html @@ -0,0 +1,122 @@ +MetaFetched in generate_message::helpers - Rust
pub struct MetaFetched {
+    pub meta_values: MetaValues,
+    pub block_hash: H256,
+    pub genesis_hash: H256,
+}
Expand description

Fetched and interpreted data for load_metadata payload and database +update.

+

Fields§

§meta_values: MetaValues§block_hash: H256§genesis_hash: H256

Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/struct.MetaShortCut.html b/rustdocs/generate_message/helpers/struct.MetaShortCut.html new file mode 100644 index 0000000000..b5c9844b01 --- /dev/null +++ b/rustdocs/generate_message/helpers/struct.MetaShortCut.html @@ -0,0 +1,120 @@ +MetaShortCut in generate_message::helpers - Rust
pub struct MetaShortCut {
+    pub meta_values: MetaValues,
+    pub genesis_hash: H256,
+}
Expand description

Data needed to output load_metadata update payload file.

+

Fields§

§meta_values: MetaValues§genesis_hash: H256

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/struct.MetaValuesStamped.html b/rustdocs/generate_message/helpers/struct.MetaValuesStamped.html new file mode 100644 index 0000000000..459a7ea6cc --- /dev/null +++ b/rustdocs/generate_message/helpers/struct.MetaValuesStamped.html @@ -0,0 +1,124 @@ +MetaValuesStamped in generate_message::helpers - Rust
pub struct MetaValuesStamped {
+    pub meta_values: MetaValues,
+    pub at_block_hash: Option<H256>,
+}
Expand description

MetaValues with corresponding block hash at the time of fetch, if +available.

+

Block hash may be missing if the metadata was extracted from .wasm file.

+

Fields§

§meta_values: MetaValues§at_block_hash: Option<H256>

Trait Implementations§

source§

impl Clone for MetaValuesStamped

source§

fn clone(&self) -> MetaValuesStamped

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/helpers/struct.SortedMetaValues.html b/rustdocs/generate_message/helpers/struct.SortedMetaValues.html new file mode 100644 index 0000000000..2bb4ed6ee4 --- /dev/null +++ b/rustdocs/generate_message/helpers/struct.SortedMetaValues.html @@ -0,0 +1,124 @@ +SortedMetaValues in generate_message::helpers - Rust
pub struct SortedMetaValues {
+    pub newer: Vec<MetaValuesStamped>,
+    pub older: Vec<MetaValuesStamped>,
+}
Expand description

MetaValuesStamped sorted into sets of newer and older, by metadata +version.

+

Fields§

§newer: Vec<MetaValuesStamped>

Set of the metadata entries with latest version known to the database.

+
§older: Vec<MetaValuesStamped>

Other metadata entries. Since there are maximum two entries allowed, +this set contains at most one entry for each network.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/index.html b/rustdocs/generate_message/index.html new file mode 100644 index 0000000000..a15be9a383 --- /dev/null +++ b/rustdocs/generate_message/index.html @@ -0,0 +1,889 @@ +generate_message - Rust

Crate generate_message

source ·
Expand description

This crate is intended to support the +Vault from the active +(non air-gapped) side.

+

This crate is mainly used to:

+
    +
  • fetch network data through RPC calls
  • +
  • prepare Vault update and derivation import payloads
  • +
  • generate Vault update QR codes, either signed or unsigned, and +derivations import QR codes, to be scanned into Vault
  • +
  • maintain the hot database on the network-connected device, to store and +manage the data that went into update QR codes
  • +
  • maintain Vault default network metadata set in defaults crate and +prepare the cold database for the Vault release
  • +
+

Supported Vault updates

+

Crate generate_message can generate and the Vault can accept following +updates:

+
    +
  • add-specs, to add a new network (i.e. the network specs) into the Vault
  • +
  • load-metadata, to load into the Vault the network metadata, for +networks that already have corresponding network specs entry in the Vault +database
  • +
  • load-types, to load types information (it is used to support the +transactions parsing in networks with legacy metadata, RuntimeMetadata +version below V14)
  • +
+

Updates are assembled as Vec<u8> and could be transformed into:

+
    +
  • PNG QR codes, static or dynamic multiframe depending on the data size
  • +
  • hex-encoded string (for tests)
  • +
+

Information in add-specs, load-metadata and load-types could be either +signed or unsigned. Using signed updates is strongly encouraged.

+

Update has following general structure:

+ + + + + + + + +
prelude [0x53, 0x, 0x]verifier public key (if signed)update payloadsignature (if signed)reserved tail, currently empty
+

<encryption code> indicates encryption algorithm that was used +to sign the update:

+ + + + + + + + + + + + + + + + + +
0x00Ed25519
0x01Sr25519
0x02Ecdsa
0xffunsigned
+

Update payloads content is described in definitions::qr_transfers.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
update payloadupdate content typedata signed, to_sign formdata in payload, to_transfer form
add_specsContentAddSpecsSCALE encoded NetworkSpecsdouble SCALE encoded NetworkSpecs
load_metadataContentLoadMetaconcatenated SCALE encoded metadata vector and network genesis hashconcatenated SCALE encoded metadata vector and network genesis hash
load_typesContentLoadTypesSCALE encoded Vec<TypeEntry>double SCALE encoded Vec<TypeEntry>
+

Note that the update payloads are build in such a way that the length of +the payload always could be easily found, thus allowing to separate update +payload, signature and reserved tail in Vault when accepting the update. +The tail is reserved to future-proof the updates if the multi-signing is +ever implemented for them. Currently the tail is empty.

+

Updates generation

+

Updates are generated in following stages:

+
    +
  1. make update payload
  2. +
  3. (optional) make signature for update payload
  4. +
  5. make update QR code (optionally signed), that could be scanned into +Vault
  6. +
+

Steps (1) and (3) are done in generate_message, the signature is produced +in other tools, except the test “signed” updates with Alice as a verifier, +when the signature is produced while making QR code during step (3).

+

Signature could be produced with Subkey or with Vault. For update signing +it is recommended to use a dedicated key, not used for transactions. This +way, if the signed data was not really the update data, but something else +posing as the update data, the signature produced could not do any damage.

+

If the Vault is used to produce the signature, it should be a dedicated +Vault with no verifier or weak key verifier for the network: before the +signature is produced, an unsigned or easily signed update must be loaded +into Vault.

+

Available commands

Display content of the metadata METATREE tree of the hot database

+

$ cargo run show metadata

+

Prints for each entry in hot database METATREE +tree:

+
    +
  • network name
  • +
  • network metadata version
  • +
  • hexadecimal metadata hash
  • +
  • hexadecimal block hash for the block at which the metadata was fetched
  • +
+

Note that for each network a maximum of 2 metadata entries is stored in the +hot database at any time.

+

Display content of the address book ADDRESS_BOOK tree of the hot database

+

$ cargo run show networks

+

Prints for each entry in hot database +ADDRESS_BOOK tree:

+
    +
  • address book title for the network <network_name>-<network_encryption>, +used only to distinguish between address book entries
  • +
  • URL address at which RPC calls are made for the network
  • +
  • network encryption
  • +
  • additional marker that the network is a default one, i.e. entry has not +changed since the database generation
  • +
  • network title as it will be displayed in Vault, from +NetworkSpecs
  • +
+

Show network specs for a network, as recorded in the hot database

+

$ cargo run show specs <ADDRESS BOOK TITLE>

+

Prints network address book title and corresponding +NetworkSpecs +from SPECSTREEPREP tree of the hot +database.

+

Example

+

$ cargo run show specs westend-sr25519

+

Check external file with hex-encoded metadata

+

$ cargo run show check-file <METADATA FILE>

+

Asserts that:

+
    +
  • the file contains valid metadata, with retrievable network name and +version
  • +
  • if the metadata for same network name and version is in the hot +database, it completely matches the one from the file
  • +
+

Example

+

$ cargo run show check-file "../defaults/release_metadata/kusama9230"

+

Show metadata fetch block history from META_HISTORY tree of the hot database

+

$ cargo run show block-history

+

Prints block hashes at which the network metadata was fetched as it first +got in the database. If the metadata is from .wasm file, there is no entry +until a proper metadata fetch from a node is done with some associated block +hash.

+

META_HISTORY tree stores all block hashes that +were ever encountered on successful new metadata fetch, and clears only on +the database reset.

+

Block hashes could be useful should silent metadata updates (metadata change +with no version bump) happen again.

+

Prepare add_specs update payload

+

$ cargo run add-specs [OPTIONS] <-d|-f|-k|-p|-t> <--all|--name <NAME>|--url <ADDRESS>>

+

A file is generated in dedicated FOLDER to +(optionally) be signed and later be transformed into add_specs update +QR. Output file name is sign_me_add_specs_<network_name>_<encryption>.

+

Setting keys that could be used in command line (maximum one):

+
    +
  • -d: do not update the database, make RPC calls, and produce +output files
  • +
  • -f: do not run RPC calls, produce output files using data already in +the database
  • +
  • -p: update or check database through RPC calls, do not produce any +output files
  • +
  • -t (no setting key defaults here): update or check database through RPC +calls, produce output files
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
setting keyhot database updateRPC callsoutput update payload
-d-++
-f--+
-p++-
-t+++
+

Reference keys (exactly only one has to be used):

+
    +
  • --all: all networks with entries in the +ADDRESS_BOOK tree of the hot database
  • +
  • --name followed by single network address book title: for a network with +existing record in the ADDRESS_BOOK
  • +
  • --url followed by single URL address: reserved for networks with no +record yet in the ADDRESS_BOOK
  • +
+

--all key could be used with --pass-errors key, to stop processing after first +error.

+

--encryption key to override specifying encryption algorithm supported by the +network is optional for --name reference key (since there is already an entry in +the database with specified encryption) and mandatory for --url reference key. +Supported variants are:

+
    +
  • ed25519
  • +
  • sr25519
  • +
  • ecdsa
  • +
+

Sequence invoking token override could be used when processing an +individual network that has multiple allowed decimals and unit values +retrieved as arrays of equal size. To override token, key --token-decimals +followed by u8 decimals value and key --token-unit String unit value is used. +By default, if no token override in provided, such networks have 0u8 decimals +and UNIT unit set up.

+

Title override could be used when processing an individual network, to set +the title under which the network will be displayed in Vault, should the +add-specs payload be accepted. Non-default networks, if the title override +is not specified, have title <network_name>-<network_encryption>.

+

Not all setting and reference key combinations are compatible, and not all +overrides are supported. Users are encouraged to comment if they need some +other than current key combinations available.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
setting keyreference keyreference argumentencryption overridetoken overridetitle overrideaction
-d-uurl_addressmandatorypossible, if token array fetchedpossible- make RPC calls
+ - apply overrides
+ - make payload file
+ Note: database is not used +
-f-ablocked- get all network specs entries from the database
+ - make payload file(s)
+ Note: only the data from the database is used +
-f-naddress_book_titlepossibleblocked, no way to check that the token override is reasonablepossible- get address book entry for address_book_title
+ - get corresponding network specs entry
+ - apply overrides
+ - make payload file
+ Note: only the data from the database and override(s) are used +
-p-naddress_book_titlepossiblepossible, if token array fetchedpossible- get address book entry for address_book_title
+ - get corresponding network specs entry
+ - make RPC calls, check that the entry remains correct
+ - apply overrides
+ - update database +
-p-uurl_addressmandatorypossible, if token array fetchedpossible- make RPC calls
+ - apply overrides
+ - update database
+ Note: reserved for networks with no entries in the database +
-t or none declared-naddress_book_titlepossiblepossible, if token array fetchedpossible- get address book entry for address_book_title
+ - get corresponding network specs entry
+ - make RPC calls, check that the entry remains correct
+ - apply overrides
+ - update database if needed
+ - make payload file +
-t or none declared-uurl_addressmandatorypossible, if token array fetchedpossible- make RPC calls
+ - apply overrides
+ - update database if needed
+ - make payload file
+ Note: reserved for networks with no entries in the database +
+

Examples

+

Make add_specs update payload for a known network from the hot database:

+

$ cargo run add-specs --name westend-sr25519

+

Make add-specs update payload for a new network:

+

$ cargo run add-specs -d -u wss://rococo-rpc.polkadot.io --encryption sr25519 --title Rococo

+

Make add-specs update payload for a new network with token set:

+

$ cargo run add-specs -d -u wss://acala.polkawallet.io --encryption sr25519 --token-decimals 12 --token-unit ACA --title Acala

+

Prepare load_metadata update payload

+

$ cargo run load-metadata [OPTIONS] <-d|-f|-k|-p|-t>

+

A file is generated in dedicated FOLDER to +(optionally) be signed and later be transformed into load_metadata +update QR. Output file name is +sign_me_load_metadata_<network_name>V<version>.

+

Setting keys that could be used in command line (maximum one):

+
    +
  • -d: do not update the database, make RPC calls, and produce +output files
  • +
  • -f: do not run RPC calls, produce output files from database as +it is
  • +
  • -k: update database through RPC calls, produce output files only for +new database entries
  • +
  • -p: update database through RPC calls, do not produce any output +files
  • +
  • -t (no setting key defaults here): update database through RPC +calls, produce output files
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
setting keyhot database updateRPC callsoutput update payload
-d-++
-f--+
-k++only new entries
-p++-
-t+++
+

Network metadata updates quite often, compared to add-specs command there +is also setting key -k to print only the data that was not in the hot +database before the fetch.

+

Reference keys (exactly only one has to be used):

+
    +
  • -a,--all: all networks with entries in the +ADDRESS_BOOK tree of the hot database
  • +
  • -n,--name followed by single network name: for a network with existing +record in the ADDRESS_BOOK
  • +
  • -u,--url followed by single URL address: reserved for networks with no +record yet in the ADDRESS_BOOK
  • +
+

-a key could be used with --pass-errors key, to stop processing after first +error.

+

load-metadata has no overrides available. Not all setting and reference +key combinations are compatible, and not all overrides are supported. Users +are encouraged to comment if they need some other than current key +combinations available.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
setting keyreference keyreference argumentaction
-d-a- get all URL addresses from the database
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - make payload file(s)
+ Note: database is needed to get URL addresses +
-d-nnetwork_name- get URL address from the database for the network_name
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - make payload file
+ Note: database is needed to get URL address +
-d-uurl_address- make RPC calls
+ - make payload file
+ Note: database is not used +
-f-a- get all metadata entries from the database
+ - make payload file(s) +
-f-nnetwork_name- get all metadata entries for the network_name from the database
+ - make payload file(s) +
-k-a- get all URL addresses from the database
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - update the database if needed
+ - make payload file for each new entry +
-k-nnetwork_name- get URL address from the database for the network_name
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - update the database if needed
+ - make payload file if the entry is new +
-p-a- get all URL addresses from the database
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - update the database if needed +
-p-nnetwork_name- get URL address from the database for the network_name
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - update the database if needed +
-t or none declared-a- get all URL addresses from the database
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - update the database if needed
+ - make payload file(s) +
-t or none declared-nnetwork_name- get URL address from the database for the network_name
+ - make RPC calls
+ - verify name, genesis hash, base58 prefix
+ - update the database if needed
+ - make payload file +
+

Examples

+

Check metadata updates and make load_metadata update payloads for latest +metadata for all known networks:

+

$ cargo run load-metadata -a

+

Make load_metadata update payload for a network not in the database:

+

$ cargo run load-metadata -d -u wss://rococo-rpc.polkadot.io

+

Prepare load_types update payload

+

$ cargo run load-types

+

A file is generated in dedicated FOLDER to +(optionally) be signed and later be transformed into load_types update QR. +Output file name is sign_me_load_types.

+

Generate update QR and/or hexadecimal string file

+

Raw [u8] update payloads, as prepared by add_specs, load_metadata or +load_types commands get transformed into update QR codes (to be scanned +into the Vault) or textfiles with hexadecimal data (for tests).

+

There are two commands for generating updates: make and sign.

+

Command make is used to generate:

+
    +
  • signed updates with a valid signature, associated public key and +encryption algorithm
  • +
  • test signed updates, i.e. updates signed by a key with +Alice seed phrase and derivation //Alice, +with encryption algorithm chosen by user, for tests
  • +
  • unsigned updates
  • +
+

Signature for make command is generated for contents of raw [u8] update +payload file using, for example, Subkey.

+

Command sign is used to generate signed updates with a valid +SufficientCrypto produced by +Vault. Vault exports SufficientCrypto produced for one of its keys +as a static QR code, this QR code content goes into command line.

+

Update QR and/or hexadecimal string file are produced in +EXPORT_FOLDER.

+

Keys and most arguments (except file paths) are not case-sensitive.

+

The validity of the signature or SufficientCrypto, if provided, is checked +before assembling update.

+

The payload is checked to be valid, with decodeable content. If default +output file name is used, it is generated based on the payload content.

+ + + + + + + + + + + + + + + + + +
msgdefault update file name
add-specsadd_specs_<network_name>-<network_encryption>
load-metadataload_metadata_<network_name>V<metadata_version>
load-typesload_types
+

Names for Alice-signed updates have additional tail +_Alice-<alice_signature_encryption>.

+

Names for unsigned updates have additional tail _unsigned.

+

make command

+

$ cargo run make <keys> <arguments>

+

Keys to be used in command line:

+
    +
  • +

    Key --goal followed by the type to to generate

    +
      +
    • qr will generate only a png QR code
    • +
    • text will generate only text file with hex-encoded update.
    • +
    • default, i.e. if goal is not provided, both QR code and text file are generated.
    • +
    +
  • +
  • +

    Key --crypto followed by encryption used to make update signature:

    +
      +
    • ed25519
    • +
    • sr25519
    • +
    • ecdsa
    • +
    • none if the message is not verified
    • +
    +
  • +
  • +

    Key --msg followed by update type:

    +
      +
    • load-types
    • +
    • load-metadata
    • +
    • add-specs
    • +
    +
  • +
  • +

    Key --verifier (can be entered only if the --crypto argument was +ed25519, sr25519, or ecdsa), followed by:

    +
      +
    • Alice to generate messages “verified” by +Alice seed phrase with derivation //Alice
    • +
    • -hex followed by hex public key
    • +
    • -file followed by the path in dedicated FOLDER +for file with public key as raw bytes
    • +
    +
  • +
  • +

    Key --payload followed by file path in dedicated +FOLDER containing already generated payload as +raw bytes

    +
  • +
  • +

    Key --signature (can be entered only if the --crypto argument was +ed25519, sr25519, or ecdsa and --verifier is not Alice), +followed by:

    +
      +
    • -hex followed by hex signature
    • +
    • -file followed by the path in dedicated FOLDER +for file with signature as raw bytes
    • +
    +
  • +
  • +

    Optional key -name followed by path override for export file in +dedicated EXPORT_FOLDER

    +
  • +
+

sign command

+

$ cargo run make <keys> <arguments>

+

Keys to be used in command line:

+
    +
  • +

    Key --goal followed by the type to to generate

    +
      +
    • qr will generate only a png QR code
    • +
    • text will generate only text file with hex-encoded update.
    • +
    • default, i.e. if goal is not provided, both QR code and text file are generated.
    • +
    +
  • +
  • +

    Key -sufficient followed by:

    +
      +
    • -hex followed by hexadecimal string with contents of Vault-produced +SufficientCrypto QR code
    • +
    • -file followed by file path in dedicated +FOLDER for raw bytes file with contents of +Vault-produced SufficientCrypto QR code
    • +
    +
  • +
  • +

    Key -msg followed by message type:

    +
      +
    • load-types
    • +
    • load-metadata
    • +
    • add-specs
    • +
    +
  • +
  • +

    Key --payload followed by file path in dedicated +FOLDER containing already generated payload as +raw bytes

    +
  • +
  • +

    Optional key -name followed by path override for export file in +dedicated EXPORT_FOLDER

    +
  • +
+

Generating SufficientCrypto in Vault is suggested mainly for update +distribution purposes. A dedicated (i.e. used only for updates signing), +kept physically safe Vault is strongly suggested, with a dedicated key +for updates signing. As the Vault can accept only payloads with +verifier not weaker than the one used before, and the whole purpose of +the process is to generate a signature for payload, it is expected that +this isolated Vault will receive unsigned or weakly signed updates, +thoroughly check them and export SufficientCrypto, so that a signed +update could be made for other, routinely used Vault devices.

+

Examples: generate load_metadata QR code for westend metadata version 9200.

+

Update payload sign_me_load_metadata_westendV9200 is already in dedicated +FOLDER.

+
make for external signature
+

$ cargo run make --goal qr --crypto <encryption> --msg load-metadata --verifier-hex <public key> --payload sign_me_load_metadata_westendV9200 --signature-hex <signature>

+

Here <signature> is hexadecimal signature generated for the contents of +the payload file for <public_key> using <encryption> algorithm.

+

Output file is load_metadata_westendV9200 in +EXPORT_FOLDER.

+

Example:

+

$ cargo run make --goal qr --crypto sr25519 --msg load-metadata --verifier-hex 46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a --payload sign_me_load_metadata_westendV9200 --signature-hex 125717599cd057bfe6db7b111274cbda796d2543467400110552fa1c62dc087a7acefb53b68716f1e34f8af6bf13ab45d70d50655fd39483c64f3f057418748a

+
make for test verifier Alice
+

Payloads signed by Alice are used for testing in Vault. The signature +in this case is generated automatically and is not supplied in command +line.

+

$ cargo run make --goal qr --crypto <encryption> --msg load-metadata --verifier Alice --payload sign_me_load_metadata_westendV9200.

+

Output file is load_metadata_westendV9200_Alice-<encryption> in +EXPORT_FOLDER.

+

Example:

+

$ cargo run make --goal qr --crypto sr25519 --msg load-metadata --verifier Alice --payload sign_me_load_metadata_westendV9200

+
make with no signature
+

$ cargo run make --goal qr --crypto none --msg load-metadata --payload sign_me_load_metadata_westendV9200

+

Output file is load_metadata_westendV9200_unverified in +EXPORT_FOLDER.

+

Example:

+

$ cargo run make --goal qr --crypto none --msg load-metadata --payload sign_me_load_metadata_westendV9200

+
sign
+

Here <hex_sufficient> is hex-encoded data from +SufficientCrypto QR code produced +by the Vault.

+

$ cargo run sign --goal qr --sufficient-hex <hex_sufficient> --msg load-metadata --payload sign_me_load_metadata_westendV9200

+

Output file is load_metadata_westendV9200 in +EXPORT_FOLDER.

+

Example:

+

$ cargo run sign --goal qr --sufficient-hex 0146ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47aceef7c58b5f952b6233b8aba5beb6f0000c8ca7f7cc16b7ada7cd45026fc3f3ec2289dd90dab0dfac38dfe3be843231443ddd30a3f3bbabb5cefcd2bbcef908c --msg load-metadata --payload sign_me_load_metadata_westendV9200

+

Remove a single metadata entry from the METATREE

+

$ cargo run remove --name <network_name> --version <metadata_version>

+

Removes only the specified entry from the METATREE.

+

The entry in META_HISTORY remains. Should the +same metadata version be retrieved afterwards, the META_HISTORY entry will +be updated to a block hash from more recent fetch, as the metadata from +old block saved in the database would not be necessarily the same as the one +being recorded in the database now.

+

Remove all data associated with a network

+

$ cargo run remove --title <address_book_title>

+

This will remove:

+
    +
  • address book entry +AddressBookEntry from +ADDRESS_BOOK tree
  • +
  • network specs +NetworkSpecs +from SPECSTREEPREP tree
  • +
  • all associated metadata entries from METATREE +if there are no other address book entries this metadata is associated +with
  • +
  • all associated meta block history entries from +META_HISTORY if there are no other address book +entries this block history entries are associated with
  • +
+

Restore hot database to default state

+

$ cargo run restore-defaults

+

Removes old hot database and generates new one with default values at +default path HOT_DB_NAME.

+

By default, hot database contains:

+ +

Default networks are Polkadot, Kusama, and Westend.

+

Generate default cold release database

+

$ cargo run make-cold-release <optional path>

+

Removes old cold release database and generates new one with default values +(unitiniated) at user-provided path or, if no valid path is given, at +default path COLD_DB_NAME_RELEASE.

+

By default, the uninitiated cold release database contains:

+
    +
  • SPECSTREE entries for default networks
  • +
  • VERIFIERS entries for default networks, with +verifiers set to the general one
  • +
  • two latest metadata versions for default networks in +METATREE
  • +
  • default types information and clean danger status in +SETTREE
  • +
+

Note that the general verifier is not specified and history is not +started. This will be done only in Vault itself. Before initialization, +the cold release database could not be used by Vault.

+

Transfer metadata from hot database to cold release database

+

$ cargo run transfer_meta_to_cold_release <optional path>

+

Metadata from hot database is transferred to cold release database at +user-provided path or, if no valid path is given, at default path +COLD_DB_NAME_RELEASE.

+

Metadata is transferred only for the networks that are known to the cold +database, i.e. the ones having +OrderedNetworkSpecs entry in +SPECSTREE.

+

Make derivations import QR and/or hexadecimal string file

+

$ cargo run derivations --goal <GOAL> --title <TITLE> --derivations <DERIVATIONS>

+

Keys to be used in command line:

+
    +
  • +

    <GOAL>: qr will generate only apng QR code, text +will generate only text file with hex-encoded update. By default, i.e. if +content key is not provided, both QR code and text file are generated. +<optional_target_key> is expected immediately after derivations command, +if at all; keys to follow could go in any order, but with argument +immediately following the key.

    +
  • +
  • +

    Key --derivations followed by file path in /generate_message/ folder. +File with derivations contains valid derivations, each on its own line. Only +suitable derivations will be processed. Processed derivations are also +printed for user to check.

    +
  • +
  • +

    Key --title followed by network address book title, to indicate to +which network the derivations belong.

    +
  • +
+

Output file is in /generate_message/ folder, file name would be +derivations-<address_book_title>.

+

Prepare payload for load_metadata update from .wasm file

+

$ cargo run unwasm [OPTIONS] --filename <FILENAME>

+

This command extracts metadata from .wasm file and uses this metadata to +produce load_metadata update payload. Only networks with network specs +entries in the hot database could be processed with unwasm command, since +the load_metadata update payload in addition to metadata requires also +network genesis hash. unwasm command could be used to generate update QR +codes before the metadata becomes accessible from the node.

+

Network name found in the metadata is used to find +NetworkSpecs for +the network. NetworkSpecs are used to get genesis hash and to check +base58 prefix, it the network metadata has base58 prefix inside.

+

A raw bytes update payload file is generated in dedicated +FOLDER to (optionally) be signed and later be +transformed into load_metadata update QR. Update payload file name is +sign_me_load_metadata_<network_name>V<version>.

+

By default, metadata extracted from .wasm file is added to the database. +Optional -d key could be used is database should not be updated. +If the metadata gets entered in the database (i.e. no -d key used), +META_HISTORY gets no entry. Block hash will be +added if the same metadata is later fetched from a node.

+

Make metadata file for defaults release metadata set

+

$ cargo run meta-default-file --name <NETWORK NAME> --version <NETWORK VERSION>

+

Produces file with hex-encoded network metadata from the hot database +METATREE entry.

+

Output file named <network_name><metadata_version> is generated in +dedicated EXPORT_FOLDER. It contains +hexadecimal network metadata.

+

Example

+

$ cargo run meta-default-file --name westend --version 9230

+

Make file with hexadecimal network metadata fetched for specific block hash from provided address

+

$ cargo run meta-at-block --url <RPC URL> --block-hash <BLOCK HASH>

+

Output file named <network_name><metadata_version>_<block_hash> is +generated in dedicated EXPORT_FOLDER. +It contains hexadecimal network metadata.

+

This command does not address or update the hot database.

+

Example

+

$ cargo run meta-at-block --url wss://westend-rpc.polkadot.io --block 780812df50c4006d1865742269fe4ca339c097e61d6279cce91ebc58f5aebada

+

Modules

Enums

  • Generate Message error.

Functions

  • Process incoming command as interpreted by parser.

Type Definitions

  • Generate Message result.
\ No newline at end of file diff --git a/rustdocs/generate_message/interpret_specs/enum.TokenFetch.html b/rustdocs/generate_message/interpret_specs/enum.TokenFetch.html new file mode 100644 index 0000000000..6f848e1f1e --- /dev/null +++ b/rustdocs/generate_message/interpret_specs/enum.TokenFetch.html @@ -0,0 +1,128 @@ +TokenFetch in generate_message::interpret_specs - Rust
pub enum TokenFetch {
+    Single(Token),
+    Array {
+        decimals: String,
+        unit: String,
+    },
+    None,
+}
Expand description

Accepted token from system_properties RPC call

+

Variants§

§

Single(Token)

Single decimals parameter and single unit.

+
§

Array

Fields

§decimals: String
§unit: String

Equal size arrays for decimals and units.

+

Token override could be applied.

+
§

None

No decimals and no unit.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/interpret_specs/fn.check_specs.html b/rustdocs/generate_message/interpret_specs/fn.check_specs.html new file mode 100644 index 0000000000..0b3ba4f6a3 --- /dev/null +++ b/rustdocs/generate_message/interpret_specs/fn.check_specs.html @@ -0,0 +1,18 @@ +check_specs in generate_message::interpret_specs - Rust
pub fn check_specs(
+    x: &Map<String, Value>,
+    optional_prefix_from_meta: Option<u16>
+) -> Result<(u16, TokenFetch)>
Expand description

Get from system_properties RPC call results the network data to be +compared with already known data.

+

This function is used if the fetch results are used to check already +existing database entry.

+

Function inputs:

+
    +
  • &Map<String, Value> received via system_properties RPC call,
  • +
  • optional base58 prefix from the network metadata
  • +
+

Function outputs:

+ +
\ No newline at end of file diff --git a/rustdocs/generate_message/interpret_specs/fn.interpret_properties.html b/rustdocs/generate_message/interpret_specs/fn.interpret_properties.html new file mode 100644 index 0000000000..ad4e6a63e2 --- /dev/null +++ b/rustdocs/generate_message/interpret_specs/fn.interpret_properties.html @@ -0,0 +1,14 @@ +interpret_properties in generate_message::interpret_specs - Rust
pub fn interpret_properties(
+    x: &Map<String, Value>,
+    optional_prefix_from_meta: Option<u16>,
+    optional_token_override: Option<Token>
+) -> Result<NetworkProperties>
Expand description

Transform system_properties RPC call results into NetworkProperties.

+

This function is only used if the network properties are used as is, i.e. +without checking with existing database entries.

+

Function inputs:

+
    +
  • &Map<String, Value> received via system_properties RPC call,
  • +
  • optional base58 prefix from the network metadata
  • +
  • optional token override to be applied if allowed
  • +
+
\ No newline at end of file diff --git a/rustdocs/generate_message/interpret_specs/index.html b/rustdocs/generate_message/interpret_specs/index.html new file mode 100644 index 0000000000..71bee38128 --- /dev/null +++ b/rustdocs/generate_message/interpret_specs/index.html @@ -0,0 +1,30 @@ +generate_message::interpret_specs - Rust
Expand description

Fit network properties fetched via RPC call into data in expected format

+

Fetched network properties contain data needed to make +NetworkSpecs, used +in ContentAddSpecs payload.

+

Network properties may contain:

+
    +
  • base58 prefix for the network (to be fit into u16)
  • +
  • decimals to display balance-related values with correct order of magnitude +(to be fit into u8)
  • +
  • unit to display balance-related values with correct units (to be fit into +String)
  • +
+

There could be base58 prefix information in network metadata. If base58 +prefix is fetched via system_properties RPC call and the metadata contains +SS58Prefix constant, they must be matching for the network to be +suitable for use in the Vault. If no base58 prefix is encountered at all, +network is not suitable for use in Vault either.

+

Some networks support more than one token, in this case RPC returns an array +of decimals and an array of units, that must have equal length. No mechanism +to automatically choose a token from the fetched set is currently present.

+

Some other networks have no token at all.

+

For networks with token set or no token, decimals default to 0 and units +default to UNIT. For networks with token set there could be a token +override applied by user in command line sequence, to set the decimals and +units manually. Token override is not supported for networks that have a +single token or no token.

+

Command line with token override:

+

$ cargo run add-specs -d -u <url_address> --encryption sr25519 --token-decimals <decimals> --token-unit <unit>

+

Enums

  • Accepted token from system_properties RPC call

Functions

\ No newline at end of file diff --git a/rustdocs/generate_message/interpret_specs/sidebar-items.js b/rustdocs/generate_message/interpret_specs/sidebar-items.js new file mode 100644 index 0000000000..228e5af795 --- /dev/null +++ b/rustdocs/generate_message/interpret_specs/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["TokenFetch"],"fn":["check_specs","interpret_properties"]}; \ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Command.html b/rustdocs/generate_message/parser/enum.Command.html new file mode 100644 index 0000000000..30d57a59b9 --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Command.html @@ -0,0 +1,330 @@ +Command in generate_message::parser - Rust
pub enum Command {
+
Show 16 variants Show { + s: Show, + db_path: PathBuf, + }, + Specs { + s: InstructionSpecs, + }, + Load(InstructionMeta), + Types { + db_path: PathBuf, + files_dir: PathBuf, + }, + Make(Make), + Sign(Make), + Remove { + r: Remove, + db_path: PathBuf, + }, + RestoreDefaults { + db_path: PathBuf, + }, + MakeColdRelease { + path: Option<PathBuf>, + }, + TransferMetaToColdRelease { + cold_db: PathBuf, + hot_db: PathBuf, + }, + Unwasm { + filename: String, + update_db: bool, + db_path: PathBuf, + files_dir: PathBuf, + }, + MetaDefaultFile { + name: String, + version: u32, + db_path: PathBuf, + export_dir: PathBuf, + }, + MetaAtBlock { + url: String, + block_hash: String, + export_dir: PathBuf, + }, + EncodeToQr { + path: Option<PathBuf>, + hex: Option<String>, + chunk_size: u16, + dst_file: PathBuf, + }, + KeyInfoExportToQr { + dst_file: PathBuf, + chunk_size: u16, + fps: u16, + keys_num: usize, + }, + BulkTransactionTestPayload { + dst_file: PathBuf, + tx_count: usize, + chunk_size: u16, + from: String, + output_format: Goal, + }, +
}

Variants§

§

Show

Fields

§db_path: PathBuf

Path to the hot database

+

Display content of the a given tree of the hot database

+
§

Specs

Prepare payload for add-specs update

+

This will remove:

+
    +
  • address book entry +AddressBookEntry from +ADDRESS_BOOK tree
  • +
  • network specs +NetworkSpecs +from SPECSTREEPREP tree
  • +
  • all associated metadata entries from METATREE +if there are no other address book entries this metadata is associated +with
  • +
  • all associated meta block history entries from +META_HISTORY if there are no other address book +entries this block history entries are associated with
  • +
+
§

Load(InstructionMeta)

Prepare payload for load-metadata update

+
§

Types

Fields

§db_path: PathBuf

Path to hot db

+
§files_dir: PathBuf

Folder to save payloads ready for signing

+

Prepare payload for load-types update

+
§

Make(Make)

Complete update generation according

+
§

Sign(Make)

Sign

+
§

Remove

Fields

§db_path: PathBuf

Path to the hot database

+

Remove all data associated with a network

+

This will remove:

+
    +
  • address book entry +AddressBookEntry from +ADDRESS_BOOK tree
  • +
  • network specs +NetworkSpecs +from SPECSTREEPREP tree
  • +
  • all associated metadata entries from METATREE +if there are no other address book entries this metadata is associated +with
  • +
  • all associated meta block history entries from +META_HISTORY if there are no other address book +entries this block history entries are associated with
  • +
+
§

RestoreDefaults

Fields

§db_path: PathBuf

Path to hot db

+

Restore hot database to default state

+

Removes old hot database and generates new one with default values at +default path HOT_DB_NAME.

+

By default, hot database contains:

+ +

Default networks are Polkadot, Kusama, and Westend.

+
§

MakeColdRelease

Fields

§path: Option<PathBuf>

Path to release db

+

Generate release cold database at optionally provided path

+

Removes old cold release database and generates new one with default values +(uninitiated) at user-provided path or, if no valid path is given, at +default path COLD_DB_NAME_RELEASE.

+

By default, the uninitiated cold release database contains:

+
    +
  • SPECSTREE entries for default networks
  • +
  • VERIFIERS entries for default networks, with +verifiers set to the general one
  • +
  • two latest metadata versions for default networks in +METATREE
  • +
  • default types information and clean danger status in +SETTREE
  • +
+

Note that the general verifier is not specified and history is not +started. This will be done only in Vault itself. Before initialization, +the cold release database could not be used by Vault.

+
§

TransferMetaToColdRelease

Fields

§cold_db: PathBuf

Path to release db

+
§hot_db: PathBuf

Path to hot db

+

Transfer metadata from hot database to release cold database

+

Metadata from hot database is transferred to cold release database at +user-provided path or, if no valid path is given, at default path +COLD_DB_NAME_RELEASE.

+

Metadata is transferred only for the networks that are known to the cold +database, i.e. the ones having +OrderedNetworkSpecs entry in +SPECSTREE.

+
§

Unwasm

Fields

§filename: String

WASM file

+
§update_db: bool

update the DB.

+
§db_path: PathBuf

Hot database path

+
§files_dir: PathBuf

Folder to save payloads ready for signing

+

Prepare payload for load_metadata update from .wasm file

+

This command extracts metadata from .wasm file and uses this metadata to +produce load_metadata update payload. Only networks with network specs +entries in the hot database could be processed with unwasm command, since +the load_metadata update payload in addition to metadata requires also +network genesis hash. unwasm command could be used to generate update QR +codes before the metadata becomes accessible from the node.

+

Network name found in the metadata is used to find +NetworkSpecs for +the network. NetworkSpecs are used to get genesis hash and to check +base58 prefix, it the network metadata has base58 prefix inside.

+

A raw bytes update payload file is generated in dedicated +FOLDER to (optionally) be signed and later be +transformed into load_metadata update QR. Update payload file name is +sign_me_load_metadata_<network_name>V<version>.

+

By default, metadata extracted from .wasm file is added to the database. +Optional -d key could be used is database should not be updated. +If the metadata gets entered in the database (i.e. no -d key used), +META_HISTORY gets no entry. Block hash will be +added if the same metadata is later fetched from a node.

+
§

MetaDefaultFile

Fields

§name: String

File name

+
§version: u32

Version

+
§db_path: PathBuf

Hot database path

+
§export_dir: PathBuf

Folder to save completed update messages

+

Make file with hexadecimal metadata for defaults release metadata set

+

Produces file with hex-encoded network metadata from the hot database +METATREE entry.

+

Output file named <network_name><metadata_version> is generated in +dedicated EXPORT_FOLDER. It contains +hexadecimal network metadata.

+
§

MetaAtBlock

Fields

§url: String

URL of the chain RPC point

+
§block_hash: String

Hash of the block at which meta is asked

+
§export_dir: PathBuf

Folder to save completed update messages

+

Create file with network metadata at block hash

+

Output file named <network_name><metadata_version>_<block_hash> is +generated in dedicated folder. +It contains hexadecimal network metadata. +This command does not address or update the hot database.

+
§

EncodeToQr

Fields

§path: Option<PathBuf>

Path to a file to encode

+
§hex: Option<String>

Hex-encoded payload to encode

+
§chunk_size: u16

Size of a chunk in a multiframe RaptorQ encoding

+
§dst_file: PathBuf

Destination file to write qr code to

+

Encode payload to multiframe QR

+
§

KeyInfoExportToQr

Fields

§dst_file: PathBuf
§chunk_size: u16

Size of a chunk in a multiframe RaptorQ encoding.

+
§fps: u16

FPS of a multiframe RaptorQ encoding

+
§keys_num: usize

Number of keys to generate and export

+

Produce a test key info export QR

+
§

BulkTransactionTestPayload

Fields

§dst_file: PathBuf
§tx_count: usize

Number of transactions in a bulk.

+
§chunk_size: u16

Size of a chunk in a multiframe RaptorQ encoding.

+
§from: String

AccountId of transaction in hex form.

+
§output_format: Goal

Qr or File

+

Produce a bulk tx signing QR

+

Trait Implementations§

source§

impl Debug for Command

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Command

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut<'b>( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Subcommand for Command

source§

fn augment_subcommands<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

fn has_subcommand(__clap_name: &str) -> bool

Test whether Self can parse a specific subcommand

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Content.html b/rustdocs/generate_message/parser/enum.Content.html new file mode 100644 index 0000000000..9379643154 --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Content.html @@ -0,0 +1,143 @@ +Content in generate_message::parser - Rust
pub enum Content {
+    All {
+        pass_errors: bool,
+    },
+    Name {
+        s: String,
+    },
+    Address {
+        s: String,
+    },
+}
Expand description

Reference key for load-metadata and add-specs commands.

+

Variants§

§

All

Fields

§pass_errors: bool

Skip errors

+

Deal with all relevant database entries

+
§

Name

Fields

§s: String

network name or network address book title

+

Process only a specified network

+
§

Address

Fields

§s: String

Network address

+

Process only the network referred to by URL address

+

Trait Implementations§

source§

impl Debug for Content

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<ContentArgs> for Content

source§

fn from(args: ContentArgs) -> Self

Converts to this type from the input type.
source§

impl FromArgMatches for Content

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut<'b>( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Subcommand for Content

source§

fn augment_subcommands<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

fn has_subcommand(__clap_name: &str) -> bool

Test whether Self can parse a specific subcommand

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Crypto.html b/rustdocs/generate_message/parser/enum.Crypto.html new file mode 100644 index 0000000000..5ab7152cc5 --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Crypto.html @@ -0,0 +1,130 @@ +Crypto in generate_message::parser - Rust
pub enum Crypto {
+    Alice {
+        e: Encryption,
+    },
+    None,
+    Sufficient {
+        s: SufficientCrypto,
+    },
+}
Expand description

Verifier-to-be, for make and sign commands.

+

Variants§

§

Alice

Fields

§e: Encryption

Encryption scheme to use

+

Alice key

+
§

None

No verifier, to make unsigned updates.

+
§

Sufficient

Real verifier, SufficientCrypto is either assembled from make +command input parts or from sign command input directly.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Goal.html b/rustdocs/generate_message/parser/enum.Goal.html new file mode 100644 index 0000000000..dd2d922b98 --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Goal.html @@ -0,0 +1,131 @@ +Goal in generate_message::parser - Rust
pub enum Goal {
+    Qr,
+    Text,
+    Both,
+}
Expand description

Target output format for derivations, make and sign commands.

+

Variants§

§

Qr

Only QR code

+
§

Text

Only text file with hexadecimal string (used for tests)

+
§

Both

Both QR code and text file, default

+

Trait Implementations§

source§

impl Clone for Goal

source§

fn clone(&self) -> Goal

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Goal

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Goal

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl ValueEnum for Goal

source§

fn value_variants<'a>() -> &'a [Self]

All possible argument values, in display order.
source§

fn to_possible_value<'a>(&self) -> Option<PossibleValue>

The canonical argument value. Read more
§

fn from_str(input: &str, ignore_case: bool) -> Result<Self, String>

Parse an argument into Self.

Auto Trait Implementations§

§

impl RefUnwindSafe for Goal

§

impl Send for Goal

§

impl Sync for Goal

§

impl Unpin for Goal

§

impl UnwindSafe for Goal

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Msg.html b/rustdocs/generate_message/parser/enum.Msg.html new file mode 100644 index 0000000000..0eefba73f3 --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Msg.html @@ -0,0 +1,130 @@ +Msg in generate_message::parser - Rust
pub enum Msg {
+    LoadTypes,
+    LoadMetadata,
+    AddSpecs,
+}
Expand description

Payload for make and sign commands.

+

Associated data is Vec<u8> blob that becomes part of the update.

+

Payload content details are described in definitions::qr_transfers.

+

Variants§

§

LoadTypes

load-types payload

+
§

LoadMetadata

load-metadata payload

+
§

AddSpecs

add-specs payload

+

Trait Implementations§

source§

impl Clone for Msg

source§

fn clone(&self) -> Msg

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Msg

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl ValueEnum for Msg

source§

fn value_variants<'a>() -> &'a [Self]

All possible argument values, in display order.
source§

fn to_possible_value<'a>(&self) -> Option<PossibleValue>

The canonical argument value. Read more
§

fn from_str(input: &str, ignore_case: bool) -> Result<Self, String>

Parse an argument into Self.

Auto Trait Implementations§

§

impl RefUnwindSafe for Msg

§

impl Send for Msg

§

impl Sync for Msg

§

impl Unpin for Msg

§

impl UnwindSafe for Msg

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Remove.html b/rustdocs/generate_message/parser/enum.Remove.html new file mode 100644 index 0000000000..3aca40e54d --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Remove.html @@ -0,0 +1,141 @@ +Remove in generate_message::parser - Rust
pub enum Remove {
+    Title {
+        t: String,
+    },
+    SpecNameVersion {
+        name: String,
+        version: u32,
+    },
+}
Expand description

Data to process remove command.

+

Variants§

§

Title

Fields

Removing all network data by network address book title.

+

Associated data is user-entered network address book title.

+
§

SpecNameVersion

Fields

§name: String
§version: u32

Remove specified network metadata entry.

+

Associated data is network name and version.

+

Trait Implementations§

source§

impl Clone for Remove

source§

fn clone(&self) -> Remove

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Remove

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Remove

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut<'b>( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Subcommand for Remove

source§

fn augment_subcommands<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

fn has_subcommand(__clap_name: &str) -> bool

Test whether Self can parse a specific subcommand

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Set.html b/rustdocs/generate_message/parser/enum.Set.html new file mode 100644 index 0000000000..30baeaa325 --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Set.html @@ -0,0 +1,140 @@ +Set in generate_message::parser - Rust
pub enum Set {
+    D,
+    F,
+    K,
+    P,
+    T,
+}
Expand description

Setting key for load-metadata and add-specs commands.

+

Variants§

§

D

Key -d: do not update the database, make RPC calls, and produce +output files

+
§

F

Key -f: do not run RPC calls, produce output files from database +as it is

+
§

K

Key -k: update database through RPC calls, produce output files only +for updated database entries

+
§

P

Key -p: update database through RPC calls, do not produce any +output files

+
§

T

Key -t (no setting key defaults here): update database through RPC +calls, produce output files

+

Trait Implementations§

source§

impl Clone for Set

source§

fn clone(&self) -> Set

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Set

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Set

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<SetFlags> for Set

source§

fn from(set: SetFlags) -> Self

Converts to this type from the input type.
source§

impl ValueEnum for Set

source§

fn value_variants<'a>() -> &'a [Self]

All possible argument values, in display order.
source§

fn to_possible_value<'a>(&self) -> Option<PossibleValue>

The canonical argument value. Read more
§

fn from_str(input: &str, ignore_case: bool) -> Result<Self, String>

Parse an argument into Self.

Auto Trait Implementations§

§

impl RefUnwindSafe for Set

§

impl Send for Set

§

impl Sync for Set

§

impl Unpin for Set

§

impl UnwindSafe for Set

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/enum.Show.html b/rustdocs/generate_message/parser/enum.Show.html new file mode 100644 index 0000000000..8c293e36c9 --- /dev/null +++ b/rustdocs/generate_message/parser/enum.Show.html @@ -0,0 +1,147 @@ +Show in generate_message::parser - Rust
pub enum Show {
+    Metadata,
+    Networks,
+    Specs {
+        s: String,
+    },
+    CheckFile {
+        s: String,
+    },
+    BlockHistory,
+}
Expand description

Display data commands.

+

Variants§

§

Metadata

Show all hot database entries

+
§

Networks

Show all hot database entries

+
§

Specs

Fields

§s: String

Address book title

+

Show network specs from entry.

+
§

CheckFile

Fields

§s: String

Path to metadata file

+

Check that external file is valid network metadata and search for +similar entry in hot database

+
§

BlockHistory

Show all entries from META_HISTORY tree

+

Trait Implementations§

source§

impl Clone for Show

source§

fn clone(&self) -> Show

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Show

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Show

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut<'b>( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Subcommand for Show

source§

fn augment_subcommands<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

fn has_subcommand(__clap_name: &str) -> bool

Test whether Self can parse a specific subcommand

Auto Trait Implementations§

§

impl RefUnwindSafe for Show

§

impl Send for Show

§

impl Sync for Show

§

impl Unpin for Show

§

impl UnwindSafe for Show

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/index.html b/rustdocs/generate_message/parser/index.html new file mode 100644 index 0000000000..0a1c527c76 --- /dev/null +++ b/rustdocs/generate_message/parser/index.html @@ -0,0 +1,2 @@ +generate_message::parser - Rust
Expand description

Command line parser for the client

+

Structs

Enums

  • Reference key for load-metadata and add-specs commands.
  • Verifier-to-be, for make and sign commands.
  • Target output format for derivations, make and sign commands.
  • Payload for make and sign commands.
  • Data to process remove command.
  • Setting key for load-metadata and add-specs commands.
  • Display data commands.
\ No newline at end of file diff --git a/rustdocs/generate_message/parser/sidebar-items.js b/rustdocs/generate_message/parser/sidebar-items.js new file mode 100644 index 0000000000..b7dc68a92b --- /dev/null +++ b/rustdocs/generate_message/parser/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Command","Content","Crypto","Goal","Msg","Remove","Set","Show"],"struct":["Cli","ContentArgs","Derivations","InstructionMeta","InstructionSpecs","Make","Override","SetFlags","Signature","Sufficient","Token","Verifier"]}; \ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Cli.html b/rustdocs/generate_message/parser/struct.Cli.html new file mode 100644 index 0000000000..f938d13cb7 --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Cli.html @@ -0,0 +1,137 @@ +Cli in generate_message::parser - Rust
pub struct Cli {
+    pub command: Command,
+}
Expand description

Polkadot Vault data manipulation tool.

+

Fields§

§command: Command

Trait Implementations§

source§

impl Args for Cli

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl CommandFactory for Cli

source§

fn command<'b>() -> Command

Build a [Command] that can instantiate Self. Read more
source§

fn command_for_update<'b>() -> Command

Build a [Command] that can update self. Read more
source§

impl Debug for Cli

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Cli

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

impl Parser for Cli

§

fn parse() -> Self

Parse from std::env::args_os(), exit on error
§

fn try_parse() -> Result<Self, Error<RichFormatter>>

Parse from std::env::args_os(), return Err on error.
§

fn parse_from<I, T>(itr: I) -> Selfwhere + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Parse from iterator, exit on error
§

fn try_parse_from<I, T>(itr: I) -> Result<Self, Error<RichFormatter>>where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Parse from iterator, return Err on error.
§

fn update_from<I, T>(&mut self, itr: I)where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Update from iterator, exit on error
§

fn try_update_from<I, T>(&mut self, itr: I) -> Result<(), Error<RichFormatter>>where + I: IntoIterator<Item = T>, + T: Into<OsString> + Clone,

Update from iterator, return Err on error.

Auto Trait Implementations§

§

impl RefUnwindSafe for Cli

§

impl Send for Cli

§

impl Sync for Cli

§

impl Unpin for Cli

§

impl UnwindSafe for Cli

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.ContentArgs.html b/rustdocs/generate_message/parser/struct.ContentArgs.html new file mode 100644 index 0000000000..0b8c10da59 --- /dev/null +++ b/rustdocs/generate_message/parser/struct.ContentArgs.html @@ -0,0 +1,137 @@ +ContentArgs in generate_message::parser - Rust
pub struct ContentArgs {
+    pub all: bool,
+    pub name: Option<String>,
+    pub address: Option<String>,
+    pub pass_errors: bool,
+}

Fields§

§all: bool

Deal with all relevant database entries

+
§name: Option<String>

Process only a specified network

+
§address: Option<String>

Process only the network referred to by URL address

+
§pass_errors: bool

Skip errors

+

Trait Implementations§

source§

impl Args for ContentArgs

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Clone for ContentArgs

source§

fn clone(&self) -> ContentArgs

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ContentArgs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for ContentArgs

source§

fn default() -> ContentArgs

Returns the “default value” for a type. Read more
source§

impl From<ContentArgs> for Content

source§

fn from(args: ContentArgs) -> Self

Converts to this type from the input type.
source§

impl FromArgMatches for ContentArgs

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Derivations.html b/rustdocs/generate_message/parser/struct.Derivations.html new file mode 100644 index 0000000000..3fbc6dec51 --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Derivations.html @@ -0,0 +1,139 @@ +Derivations in generate_message::parser - Rust
pub struct Derivations {
+    pub goal: Goal,
+    pub title: String,
+    pub derivations: String,
+    pub db: PathBuf,
+}
Expand description

Data to process derivations command.

+

Fields§

§goal: Goal

Target output format

+
§title: String

Address book title for network in which addresses with imported +derivations will be made in Vault

+
§derivations: String

Contents of the payload file

+
§db: PathBuf

Path to the hot database

+

Trait Implementations§

source§

impl Args for Derivations

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Clone for Derivations

source§

fn clone(&self) -> Derivations

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Derivations

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Derivations

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.InstructionMeta.html b/rustdocs/generate_message/parser/struct.InstructionMeta.html new file mode 100644 index 0000000000..b8368e9506 --- /dev/null +++ b/rustdocs/generate_message/parser/struct.InstructionMeta.html @@ -0,0 +1,136 @@ +InstructionMeta in generate_message::parser - Rust
pub struct InstructionMeta {
+    pub set: SetFlags,
+    pub content: ContentArgs,
+    pub db: PathBuf,
+    pub files_dir: PathBuf,
+}
Expand description

Command details for load-metadata.

+

Fields§

§set: SetFlags

Setting key, as read from command line

+
§content: ContentArgs

Reference key, as read from command line

+
§db: PathBuf

Path to the hot database

+
§files_dir: PathBuf

Folder to save payloads ready for signing

+

Trait Implementations§

source§

impl Args for InstructionMeta

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Debug for InstructionMeta

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for InstructionMeta

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.InstructionSpecs.html b/rustdocs/generate_message/parser/struct.InstructionSpecs.html new file mode 100644 index 0000000000..77b6138c3b --- /dev/null +++ b/rustdocs/generate_message/parser/struct.InstructionSpecs.html @@ -0,0 +1,136 @@ +InstructionSpecs in generate_message::parser - Rust
pub struct InstructionSpecs {
+    pub set: SetFlags,
+    pub over: Override,
+    pub content: ContentArgs,
+    pub db: PathBuf,
+    pub files_dir: PathBuf,
+}
Expand description

Command details for add-specs.

+

Fields§

§set: SetFlags§over: Override

Overrides, relevant only for add-specs command

+
§content: ContentArgs§db: PathBuf

Path to the hot database

+
§files_dir: PathBuf

Folder to save payloads ready for signing

+

Trait Implementations§

source§

impl Args for InstructionSpecs

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Debug for InstructionSpecs

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for InstructionSpecs

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Make.html b/rustdocs/generate_message/parser/struct.Make.html new file mode 100644 index 0000000000..40a5bd66b2 --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Make.html @@ -0,0 +1,144 @@ +Make in generate_message::parser - Rust
pub struct Make {
+    pub msg: Msg,
+    pub payload: PathBuf,
+    pub goal: Goal,
+    pub verifier: Verifier,
+    pub signature: Signature,
+    pub sufficient: Sufficient,
+    pub crypto: Option<Encryption>,
+    pub name: Option<PathBuf>,
+    pub files_dir: PathBuf,
+    pub export_dir: PathBuf,
+}
Expand description

Data to process make and sign commands.

+

Fields§

§msg: Msg

payload

+
§payload: PathBuf§goal: Goal

target output format

+
§verifier: Verifier§signature: Signature§sufficient: Sufficient§crypto: Option<Encryption>

who is signing the payload

+
§name: Option<PathBuf>

output name override

+
§files_dir: PathBuf

Folder to save payloads ready for signing

+
§export_dir: PathBuf

Folder to save completed update messages

+

Implementations§

source§

impl Make

source

pub fn payload(&self) -> Result<Vec<u8>>

source

pub fn crypto(&self) -> Result<Crypto>

Trait Implementations§

source§

impl Args for Make

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Debug for Make

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Make

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

§

impl RefUnwindSafe for Make

§

impl Send for Make

§

impl Sync for Make

§

impl Unpin for Make

§

impl UnwindSafe for Make

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Override.html b/rustdocs/generate_message/parser/struct.Override.html new file mode 100644 index 0000000000..4b97a7dc3e --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Override.html @@ -0,0 +1,154 @@ +Override in generate_message::parser - Rust
pub struct Override {
+    pub encryption: Option<Encryption>,
+    pub title: Option<String>,
+    pub token_decimals: Option<u8>,
+    pub token_unit: Option<String>,
+}
Expand description

Overrides for add-specs command.

+

Fields§

§encryption: Option<Encryption>

Encryption override to specify encryption algorithm used by a new +network or to add another encryption algorithm in known network.

+
§title: Option<String>

Network title override, so that user can specify the network title in +NetworkSpecs +that determines under what title the network is displayed in the Vault

+
§token_decimals: Option<u8>

Token override to specify decimals used to display balance in +network transactions.

+

Token override could be invoked only if:

+
    +
  • network has no database record yet
  • +
  • network has multiple decimals and unit values, those were retrieved as +arrays of equal size.
  • +
+
§token_unit: Option<String>

Token override to specify units used to display balance in +network transactions.

+

Token override could be invoked only if:

+
    +
  • network has no database record yet
  • +
  • network has multiple decimals and unit values, those were retrieved as +arrays of equal size.
  • +
+

Implementations§

source§

impl Override

source

pub fn token(&self) -> Option<Token>

source§

impl Override

source

pub fn all_empty(&self) -> bool

Flag to indicate that no overrides were invoked.

+

Trait Implementations§

source§

impl Args for Override

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Debug for Override

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Override

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.SetFlags.html b/rustdocs/generate_message/parser/struct.SetFlags.html new file mode 100644 index 0000000000..437e491aa3 --- /dev/null +++ b/rustdocs/generate_message/parser/struct.SetFlags.html @@ -0,0 +1,141 @@ +SetFlags in generate_message::parser - Rust
pub struct SetFlags {
+    pub d: bool,
+    pub f: bool,
+    pub k: bool,
+    pub p: bool,
+    pub t: bool,
+}

Fields§

§d: bool

do not update the database, make RPC calls, and produce output files

+
§f: bool

do not run RPC calls, produce output files from database as it is

+
§k: bool

update database through RPC calls, produce output files only +for updated database entries

+
§p: bool

update database through RPC calls, do not produce any output files

+
§t: bool

(no setting key defaults here): update database through RPC +calls, produce output files

+

Trait Implementations§

source§

impl Args for SetFlags

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Clone for SetFlags

source§

fn clone(&self) -> SetFlags

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SetFlags

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for SetFlags

source§

fn default() -> SetFlags

Returns the “default value” for a type. Read more
source§

impl From<SetFlags> for Set

source§

fn from(set: SetFlags) -> Self

Converts to this type from the input type.
source§

impl FromArgMatches for SetFlags

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Signature.html b/rustdocs/generate_message/parser/struct.Signature.html new file mode 100644 index 0000000000..69c997bcc1 --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Signature.html @@ -0,0 +1,133 @@ +Signature in generate_message::parser - Rust
pub struct Signature {
+    pub signature_hex: Option<String>,
+    pub signature_file: Option<String>,
+}

Fields§

§signature_hex: Option<String>

Supply signature in hex format as command line argument

+
§signature_file: Option<String>

Read signature from a file

+

Trait Implementations§

source§

impl Args for Signature

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Clone for Signature

source§

fn clone(&self) -> Signature

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Signature

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Signature

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Sufficient.html b/rustdocs/generate_message/parser/struct.Sufficient.html new file mode 100644 index 0000000000..f58c65539c --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Sufficient.html @@ -0,0 +1,133 @@ +Sufficient in generate_message::parser - Rust
pub struct Sufficient {
+    pub sufficient_hex: Option<String>,
+    pub sufficient_file: Option<String>,
+}

Fields§

§sufficient_hex: Option<String>

Supply signature in hex format as command line argument

+
§sufficient_file: Option<String>

Read signature from a file

+

Trait Implementations§

source§

impl Args for Sufficient

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Clone for Sufficient

source§

fn clone(&self) -> Sufficient

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Sufficient

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Sufficient

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Token.html b/rustdocs/generate_message/parser/struct.Token.html new file mode 100644 index 0000000000..2c5e9feefa --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Token.html @@ -0,0 +1,124 @@ +Token in generate_message::parser - Rust
pub struct Token {
+    pub decimals: u8,
+    pub unit: String,
+}
Expand description

Data from command line for token override.

+

Fields§

§decimals: u8

Decimals of the token

+
§unit: String

Units of the token

+

Trait Implementations§

source§

impl Debug for Token

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Token

§

impl Send for Token

§

impl Sync for Token

§

impl Unpin for Token

§

impl UnwindSafe for Token

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/parser/struct.Verifier.html b/rustdocs/generate_message/parser/struct.Verifier.html new file mode 100644 index 0000000000..72d6f3efbf --- /dev/null +++ b/rustdocs/generate_message/parser/struct.Verifier.html @@ -0,0 +1,136 @@ +Verifier in generate_message::parser - Rust
pub struct Verifier {
+    pub verifier_alice: Option<Encryption>,
+    pub verifier_hex: Option<String>,
+    pub verifier_file: Option<PathBuf>,
+}
Expand description

Verifier-to-be, for make and sign commands.

+

Fields§

§verifier_alice: Option<Encryption>

Use Alice key with a specified encryption scheme

+
§verifier_hex: Option<String>

Specify Verifier as a hex string argument

+
§verifier_file: Option<PathBuf>

Read Verifier from a file

+

Trait Implementations§

source§

impl Args for Verifier

source§

fn group_id() -> Option<Id>

Report the [ArgGroup::id][crate::ArgGroup::id] for this set of arguments
source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to [Command] so it can instantiate Self. Read more
source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to [Command] so it can update self. Read more
source§

impl Clone for Verifier

source§

fn clone(&self) -> Verifier

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Verifier

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl FromArgMatches for Verifier

source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn from_arg_matches_mut( + __clap_arg_matches: &mut ArgMatches +) -> Result<Self, Error>

Instantiate Self from [ArgMatches], parsing the arguments as needed. Read more
source§

fn update_from_arg_matches( + &mut self, + __clap_arg_matches: &ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.
source§

fn update_from_arg_matches_mut( + &mut self, + __clap_arg_matches: &mut ArgMatches +) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> MaybeSend for Twhere + T: Send,

\ No newline at end of file diff --git a/rustdocs/generate_message/sidebar-items.js b/rustdocs/generate_message/sidebar-items.js new file mode 100644 index 0000000000..3c852ae192 --- /dev/null +++ b/rustdocs/generate_message/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Error"],"fn":["full_run"],"mod":["fetch_metadata","helpers","interpret_specs","parser"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/generate_message/type.Result.html b/rustdocs/generate_message/type.Result.html new file mode 100644 index 0000000000..c36c79d890 --- /dev/null +++ b/rustdocs/generate_message/type.Result.html @@ -0,0 +1,2 @@ +Result in generate_message - Rust

Type Definition generate_message::Result

source ·
pub type Result<T> = Result<T, Error>;
Expand description

Generate Message result.

+
\ No newline at end of file diff --git a/rustdocs/help.html b/rustdocs/help.html new file mode 100644 index 0000000000..200fab5d98 --- /dev/null +++ b/rustdocs/help.html @@ -0,0 +1 @@ +Rustdoc help

Rustdoc help

Back
\ No newline at end of file diff --git a/rustdocs/implementors/alloc/string/trait.ToString.js b/rustdocs/implementors/alloc/string/trait.ToString.js new file mode 100644 index 0000000000..d61413e9da --- /dev/null +++ b/rustdocs/implementors/alloc/string/trait.ToString.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"transaction_signing":[["impl ToString for SignatureAndChecksum"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/clap_builder/derive/trait.Args.js b/rustdocs/implementors/clap_builder/derive/trait.Args.js new file mode 100644 index 0000000000..7f24bce448 --- /dev/null +++ b/rustdocs/implementors/clap_builder/derive/trait.Args.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"generate_message":[["impl Args for ContentArgs"],["impl Args for InstructionSpecs"],["impl Args for Make"],["impl Args for Sufficient"],["impl Args for SetFlags"],["impl Args for Verifier"],["impl Args for Override"],["impl Args for Derivations"],["impl Args for Signature"],["impl Args for InstructionMeta"],["impl Args for Cli"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/clap_builder/derive/trait.CommandFactory.js b/rustdocs/implementors/clap_builder/derive/trait.CommandFactory.js new file mode 100644 index 0000000000..601e3fe129 --- /dev/null +++ b/rustdocs/implementors/clap_builder/derive/trait.CommandFactory.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"generate_message":[["impl CommandFactory for Cli"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/clap_builder/derive/trait.FromArgMatches.js b/rustdocs/implementors/clap_builder/derive/trait.FromArgMatches.js new file mode 100644 index 0000000000..ed11026d84 --- /dev/null +++ b/rustdocs/implementors/clap_builder/derive/trait.FromArgMatches.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"generate_message":[["impl FromArgMatches for Make"],["impl FromArgMatches for Command"],["impl FromArgMatches for Override"],["impl FromArgMatches for Signature"],["impl FromArgMatches for Content"],["impl FromArgMatches for InstructionSpecs"],["impl FromArgMatches for Verifier"],["impl FromArgMatches for SetFlags"],["impl FromArgMatches for ContentArgs"],["impl FromArgMatches for Cli"],["impl FromArgMatches for Derivations"],["impl FromArgMatches for Show"],["impl FromArgMatches for Sufficient"],["impl FromArgMatches for Remove"],["impl FromArgMatches for InstructionMeta"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/clap_builder/derive/trait.Parser.js b/rustdocs/implementors/clap_builder/derive/trait.Parser.js new file mode 100644 index 0000000000..ee833c2182 --- /dev/null +++ b/rustdocs/implementors/clap_builder/derive/trait.Parser.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"generate_message":[["impl Parser for Cli"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/clap_builder/derive/trait.Subcommand.js b/rustdocs/implementors/clap_builder/derive/trait.Subcommand.js new file mode 100644 index 0000000000..14c76a16ac --- /dev/null +++ b/rustdocs/implementors/clap_builder/derive/trait.Subcommand.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"generate_message":[["impl Subcommand for Command"],["impl Subcommand for Remove"],["impl Subcommand for Show"],["impl Subcommand for Content"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/clap_builder/derive/trait.ValueEnum.js b/rustdocs/implementors/clap_builder/derive/trait.ValueEnum.js new file mode 100644 index 0000000000..f95aa8091b --- /dev/null +++ b/rustdocs/implementors/clap_builder/derive/trait.ValueEnum.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"generate_message":[["impl ValueEnum for Set"],["impl ValueEnum for Msg"],["impl ValueEnum for Goal"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/clone/trait.Clone.js b/rustdocs/implementors/core/clone/trait.Clone.js new file mode 100644 index 0000000000..1a26385828 --- /dev/null +++ b/rustdocs/implementors/core/clone/trait.Clone.js @@ -0,0 +1,8 @@ +(function() {var implementors = { +"db_handling":[["impl Clone for SignaturesBulk"],["impl Clone for SignaturesBulkV1"],["impl Clone for ExportAddrsV1"],["impl Clone for SignContent"],["impl Clone for SeedInfo"],["impl Clone for VaultFeatures"],["impl Clone for ExportAddrs"],["impl Clone for ExportAddrsV2"],["impl Clone for TransactionBulkV1"],["impl Clone for AddrInfo"],["impl Clone for SeedDraft"],["impl Clone for TransactionBulk"],["impl Clone for DynamicDerivationTransaction"]], +"definitions":[["impl Clone for IdentityHistory"],["impl Clone for DynamicDerivationResponseInfo"],["impl Clone for MKeyAndNetworkCard"],["impl Clone for TypeEntry"],["impl Clone for Entry"],["impl Clone for NetworkSpecsExport"],["impl Clone for MSCEraMortal"],["impl Clone for StubNav"],["impl Clone for MSCFieldName"],["impl Clone for DynamicDerivationsRequest"],["impl Clone for TypesExport"],["impl Clone for NetworkSpecsKey"],["impl Clone for LogScreenEntry"],["impl Clone for QrData"],["impl Clone for DerivationEntry"],["impl Clone for AddressKey"],["impl Clone for EnumVariantType"],["impl Clone for MTransaction"],["impl Clone for BananaSplitRecoveryResult"],["impl Clone for MBackup"],["impl Clone for DerivationPack"],["impl Clone for DynamicDerivationsRequestInfo"],["impl Clone for MetaValuesExport"],["impl Clone for MKeyDetailsMulti"],["impl Clone for DerivedKeyError"],["impl Clone for ShieldAlert"],["impl Clone for TransactionCardSet"],["impl Clone for Event"],["impl Clone for MSCNetworkInfo"],["impl Clone for DDPreview"],["impl Clone for Network"],["impl Clone for ShortSpecs"],["impl Clone for MDeriveKey"],["impl Clone for MLogRight"],["impl Clone for SignMessageDisplay"],["impl Clone for ExportedSet"],["impl Clone for OrderedNetworkSpecs"],["impl Clone for SeedNameWithIdenticon"],["impl Clone for MKeysCard"],["impl Clone for Order"],["impl Clone for MVerifierDetails"],["impl Clone for Description"],["impl Clone for RightButton"],["impl Clone for DynamicDerivationsResponseInfo"],["impl Clone for DerivedKeyStatus"],["impl Clone for Identicon"],["impl Clone for MSettings"],["impl Clone for MSCCurrency"],["impl Clone for Address"],["impl Clone for MetaValues"],["impl Clone for MMNetwork"],["impl Clone for MKeysNew"],["impl Clone for TypesDisplay"],["impl Clone for DDKeySet"],["impl Clone for ActionResult"],["impl Clone for StructField"],["impl Clone for MPasswordConfirm"],["impl Clone for MSCCall"],["impl Clone for MEventMaybeDecoded"],["impl Clone for DDDetail"],["impl Clone for MNetworkDetails"],["impl Clone for MSufficientCryptoReady"],["impl Clone for MMMNetwork"],["impl Clone for MVerifier"],["impl Clone for MManageMetadata"],["impl Clone for MLog"],["impl Clone for MRawKey"],["impl Clone for NetworkVerifierDisplay"],["impl Clone for MNetworkCard"],["impl Clone for MSCNameVersion"],["impl Clone for SeedKeysPreview"],["impl Clone for NetworkSpecsDisplay"],["impl Clone for FooterButton"],["impl Clone for MKeysInfoExport"],["impl Clone for MSCTip"],["impl Clone for MMetadataRecord"],["impl Clone for MNetworkMenu"],["impl Clone for MAddressCard"],["impl Clone for Verifier"],["impl Clone for MSeedMenu"],["impl Clone for DerivedKeyPreview"],["impl Clone for AddressDetails"],["impl Clone for Encryption"],["impl Clone for EnumVariant"],["impl Clone for MSignatureReady"],["impl Clone for MEnterPassword"],["impl Clone for TransactionCard"],["impl Clone for MSignSufficientCrypto"],["impl Clone for ModalData"],["impl Clone for MSeeds"],["impl Clone for MSCEnumVariantName"],["impl Clone for DynamicDerivationsAddressResponse"],["impl Clone for MRecoverSeedPhrase"],["impl Clone for DecodeSequenceResult"],["impl Clone for MSCFieldNumber"],["impl Clone for AddressBookKey"],["impl Clone for ScreenData"],["impl Clone for PathAndNetwork"],["impl Clone for CurrentVerifier"],["impl Clone for TransactionType"],["impl Clone for MTypesInfo"],["impl Clone for Card"],["impl Clone for History"],["impl Clone for MLogDetails"],["impl Clone for MNewSeed"],["impl Clone for MSCTxSpecPlain"],["impl Clone for AlertData"],["impl Clone for MSCId"],["impl Clone for ValidCurrentVerifier"],["impl Clone for ScreenNameType"],["impl Clone for DynamicDerivationRequestInfo"],["impl Clone for MetaKey"],["impl Clone for SufficientCrypto"],["impl Clone for NetworkSpecs"],["impl Clone for DynamicDerivationsAddressRequestV1"],["impl Clone for TransactionAction"],["impl Clone for MKeyDetails"],["impl Clone for MRecoverSeedName"],["impl Clone for DynamicDerivationsAddressResponseV1"],["impl Clone for TransactionSignAction"],["impl Clone for VerifierValue"],["impl Clone for MManageNetworks"],["impl Clone for DerivationCheck"],["impl Clone for MetaValuesDisplay"],["impl Clone for SignDisplay"],["impl Clone for VerifierKey"],["impl Clone for MNewSeedBackup"],["impl Clone for MSignedTransaction"],["impl Clone for DerivationDestination"],["impl Clone for MSCContent"],["impl Clone for SeedNameCard"]], +"generate_message":[["impl Clone for Derivations"],["impl Clone for ContentArgs"],["impl Clone for Msg"],["impl Clone for Goal"],["impl Clone for Set"],["impl Clone for Signature"],["impl Clone for Sufficient"],["impl Clone for Verifier"],["impl Clone for SetFlags"],["impl Clone for Show"],["impl Clone for Remove"],["impl Clone for MetaValuesStamped"]], +"navigator":[["impl Clone for KeysState"],["impl Clone for SufficientCryptoState"],["impl Clone for RecoverSeedPhraseState"],["impl Clone for Screen"],["impl Clone for AddressStateMulti"],["impl Clone for DeriveState"],["impl Clone for AddressState"],["impl Clone for SpecialtyKeysState"],["impl Clone for Alert"],["impl Clone for Modal"],["impl Clone for EnteredInfo"]], +"parser":[["impl Clone for ParserCard"],["impl Clone for OutputCard"]], +"transaction_signing":[["impl Clone for SignatureType"],["impl Clone for SufficientContent"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/cmp/trait.Eq.js b/rustdocs/implementors/core/cmp/trait.Eq.js new file mode 100644 index 0000000000..89531d42b0 --- /dev/null +++ b/rustdocs/implementors/core/cmp/trait.Eq.js @@ -0,0 +1,7 @@ +(function() {var implementors = { +"db_handling":[["impl Eq for ExportAddrs"],["impl Eq for ExportAddrsV2"],["impl Eq for VaultFeatures"],["impl Eq for ExportAddrsV1"],["impl Eq for SeedInfo"],["impl Eq for AddrInfo"]], +"definitions":[["impl Eq for MKeyDetails"],["impl Eq for MetaInfo"],["impl Eq for MMetadataRecord"],["impl Eq for MSignedTransaction"],["impl Eq for DecodeSequenceResult"],["impl Eq for VerifierKey"],["impl Eq for MNetworkCard"],["impl Eq for Card"],["impl Eq for Verifier"],["impl Eq for MManageNetworks"],["impl Eq for NetworkSpecs"],["impl Eq for AddressDetails"],["impl Eq for Address"],["impl Eq for DDKeySet"],["impl Eq for MKeysInfoExport"],["impl Eq for DerivationEntry"],["impl Eq for DDPreview"],["impl Eq for MNetworkDetails"],["impl Eq for MSeedMenu"],["impl Eq for DerivationPack"],["impl Eq for TypeEntry"],["impl Eq for DynamicDerivationsRequestInfo"],["impl Eq for IdentityHistory"],["impl Eq for MSeeds"],["impl Eq for MKeysNew"],["impl Eq for MEventMaybeDecoded"],["impl Eq for ScreenNameType"],["impl Eq for MetaValuesExport"],["impl Eq for EnumVariantType"],["impl Eq for MNewSeedBackup"],["impl Eq for Encryption"],["impl Eq for MSufficientCryptoReady"],["impl Eq for TransactionCard"],["impl Eq for MSCEraMortal"],["impl Eq for DDDetail"],["impl Eq for QrData"],["impl Eq for SeedNameCard"],["impl Eq for MNewSeed"],["impl Eq for MVerifierDetails"],["impl Eq for StructField"],["impl Eq for MLog"],["impl Eq for Event"],["impl Eq for MManageMetadata"],["impl Eq for TypesDisplay"],["impl Eq for TransactionSignAction"],["impl Eq for MNetworkMenu"],["impl Eq for LogScreenEntry"],["impl Eq for CurrentVerifier"],["impl Eq for MSCNameVersion"],["impl Eq for TransactionAction"],["impl Eq for MRecoverSeedName"],["impl Eq for MSCNetworkInfo"],["impl Eq for TypesExport"],["impl Eq for DerivedKeyError"],["impl Eq for DynamicDerivationsAddressResponseV1"],["impl Eq for DynamicDerivationResponseInfo"],["impl Eq for VerifierValue"],["impl Eq for MBackup"],["impl Eq for NetworkSpecsExport"],["impl Eq for Identicon"],["impl Eq for MSignSufficientCrypto"],["impl Eq for MRecoverSeedPhrase"],["impl Eq for DynamicDerivationsResponseInfo"],["impl Eq for MetaValuesDisplay"],["impl Eq for DynamicDerivationsRequest"],["impl Eq for MetaHistoryEntry"],["impl Eq for StubNav"],["impl Eq for SeedKeysPreview"],["impl Eq for AlertData"],["impl Eq for TransactionCardSet"],["impl Eq for SignMessageDisplay"],["impl Eq for Entry"],["impl Eq for NetworkSpecsKey"],["impl Eq for MVerifier"],["impl Eq for MSCEnumVariantName"],["impl Eq for MPasswordConfirm"],["impl Eq for MKeysCard"],["impl Eq for DerivedKeyPreview"],["impl Eq for DerivedKeyStatus"],["impl Eq for FooterButton"],["impl Eq for MSettings"],["impl Eq for ShieldAlert"],["impl Eq for EnumVariant"],["impl Eq for SufficientCrypto"],["impl Eq for NetworkVerifierDisplay"],["impl Eq for TransactionType"],["impl Eq for MKeyDetailsMulti"],["impl Eq for MSCFieldNumber"],["impl Eq for DynamicDerivationsAddressRequestV1"],["impl Eq for MMMNetwork"],["impl Eq for ValidCurrentVerifier"],["impl Eq for MRawKey"],["impl Eq for ScreenData"],["impl Eq for MKeyAndNetworkCard"],["impl Eq for ModalData"],["impl Eq for AddressBookEntry"],["impl Eq for NetworkProperties"],["impl Eq for OrderedNetworkSpecs"],["impl Eq for ExportedSet"],["impl Eq for RightButton"],["impl Eq for MSCCurrency"],["impl Eq for DerivationCheck"],["impl Eq for NetworkSpecsDisplay"],["impl Eq for MSCId"],["impl Eq for MLogDetails"],["impl Eq for PathAndNetwork"],["impl Eq for MLogRight"],["impl Eq for MMNetwork"],["impl Eq for AddressKey"],["impl Eq for BananaSplitRecoveryResult"],["impl Eq for Description"],["impl Eq for SeedNameWithIdenticon"],["impl Eq for DynamicDerivationsAddressResponse"],["impl Eq for MSCTip"],["impl Eq for MEnterPassword"],["impl Eq for MSCFieldName"],["impl Eq for MTypesInfo"],["impl Eq for MTransaction"],["impl Eq for DerivationDestination"],["impl Eq for MetaValues"],["impl Eq for History"],["impl Eq for MSCCall"],["impl Eq for MSCTxSpecPlain"],["impl Eq for Order"],["impl Eq for MSignatureReady"],["impl Eq for MAddressCard"],["impl Eq for DynamicDerivationRequestInfo"],["impl Eq for ActionResult"],["impl Eq for SignDisplay"],["impl Eq for MSCContent"],["impl Eq for Network"],["impl Eq for ShortSpecs"],["impl Eq for MDeriveKey"]], +"navigator":[["impl Eq for Alert"],["impl Eq for Action"],["impl Eq for Modal"]], +"qr_reader_phone":[["impl Eq for LegacyMulti"],["impl Eq for Element"],["impl Eq for Fountain"]], +"transaction_signing":[["impl Eq for SignatureType"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/cmp/trait.PartialEq.js b/rustdocs/implementors/core/cmp/trait.PartialEq.js new file mode 100644 index 0000000000..a2170dc373 --- /dev/null +++ b/rustdocs/implementors/core/cmp/trait.PartialEq.js @@ -0,0 +1,7 @@ +(function() {var implementors = { +"db_handling":[["impl PartialEq<ExportAddrsV1> for ExportAddrsV1"],["impl PartialEq<SeedInfo> for SeedInfo"],["impl PartialEq<VaultFeatures> for VaultFeatures"],["impl PartialEq<ExportAddrsV2> for ExportAddrsV2"],["impl PartialEq<ExportAddrs> for ExportAddrs"],["impl PartialEq<AddrInfo> for AddrInfo"]], +"definitions":[["impl PartialEq<MNetworkCard> for MNetworkCard"],["impl PartialEq<DynamicDerivationResponseInfo> for DynamicDerivationResponseInfo"],["impl PartialEq<Event> for Event"],["impl PartialEq<MSCNameVersion> for MSCNameVersion"],["impl PartialEq<MSeedMenu> for MSeedMenu"],["impl PartialEq<MetaInfo> for MetaInfo"],["impl PartialEq<MSCFieldNumber> for MSCFieldNumber"],["impl PartialEq<SeedKeysPreview> for SeedKeysPreview"],["impl PartialEq<TransactionCard> for TransactionCard"],["impl PartialEq<SignDisplay> for SignDisplay"],["impl PartialEq<NetworkProperties> for NetworkProperties"],["impl PartialEq<DynamicDerivationsAddressRequestV1> for DynamicDerivationsAddressRequestV1"],["impl PartialEq<MManageMetadata> for MManageMetadata"],["impl PartialEq<History> for History"],["impl PartialEq<NetworkSpecs> for NetworkSpecs"],["impl PartialEq<DynamicDerivationRequestInfo> for DynamicDerivationRequestInfo"],["impl PartialEq<MNetworkMenu> for MNetworkMenu"],["impl PartialEq<AddressKey> for AddressKey"],["impl PartialEq<MVerifier> for MVerifier"],["impl PartialEq<VerifierValue> for VerifierValue"],["impl PartialEq<MetaValuesExport> for MetaValuesExport"],["impl PartialEq<MLog> for MLog"],["impl PartialEq<MSufficientCryptoReady> for MSufficientCryptoReady"],["impl PartialEq<NetworkSpecsDisplay> for NetworkSpecsDisplay"],["impl PartialEq<MNetworkDetails> for MNetworkDetails"],["impl PartialEq<MMMNetwork> for MMMNetwork"],["impl PartialEq<MKeysCard> for MKeysCard"],["impl PartialEq<NetworkVerifierDisplay> for NetworkVerifierDisplay"],["impl PartialEq<MKeysNew> for MKeysNew"],["impl PartialEq<MVerifierDetails> for MVerifierDetails"],["impl PartialEq<TypeEntry> for TypeEntry"],["impl PartialEq<MAddressCard> for MAddressCard"],["impl PartialEq<LogScreenEntry> for LogScreenEntry"],["impl PartialEq<ScreenNameType> for ScreenNameType"],["impl PartialEq<MetaHistoryEntry> for MetaHistoryEntry"],["impl PartialEq<TypesDisplay> for TypesDisplay"],["impl PartialEq<MRecoverSeedPhrase> for MRecoverSeedPhrase"],["impl PartialEq<AddressBookEntry> for AddressBookEntry"],["impl PartialEq<MManageNetworks> for MManageNetworks"],["impl PartialEq<DerivationCheck> for DerivationCheck"],["impl PartialEq<MEventMaybeDecoded> for MEventMaybeDecoded"],["impl PartialEq<MMetadataRecord> for MMetadataRecord"],["impl PartialEq<DynamicDerivationsResponseInfo> for DynamicDerivationsResponseInfo"],["impl PartialEq<MSCEraMortal> for MSCEraMortal"],["impl PartialEq<MSCNetworkInfo> for MSCNetworkInfo"],["impl PartialEq<MSCTip> for MSCTip"],["impl PartialEq<MNewSeed> for MNewSeed"],["impl PartialEq<AlertData> for AlertData"],["impl PartialEq<NetworkSpecsKey> for NetworkSpecsKey"],["impl PartialEq<AddressDetails> for AddressDetails"],["impl PartialEq<ExportedSet> for ExportedSet"],["impl PartialEq<ShieldAlert> for ShieldAlert"],["impl PartialEq<MSCEnumVariantName> for MSCEnumVariantName"],["impl PartialEq<MKeyAndNetworkCard> for MKeyAndNetworkCard"],["impl PartialEq<Network> for Network"],["impl PartialEq<CurrentVerifier> for CurrentVerifier"],["impl PartialEq<MRawKey> for MRawKey"],["impl PartialEq<DerivedKeyError> for DerivedKeyError"],["impl PartialEq<MSignatureReady> for MSignatureReady"],["impl PartialEq<MKeyDetails> for MKeyDetails"],["impl PartialEq<DecodeSequenceResult> for DecodeSequenceResult"],["impl PartialEq<TransactionSignAction> for TransactionSignAction"],["impl PartialEq<TransactionCardSet> for TransactionCardSet"],["impl PartialEq<MMNetwork> for MMNetwork"],["impl PartialEq<SufficientCrypto> for SufficientCrypto"],["impl PartialEq<TransactionType> for TransactionType"],["impl PartialEq<MSettings> for MSettings"],["impl PartialEq<Address> for Address"],["impl PartialEq<BananaSplitRecoveryResult> for BananaSplitRecoveryResult"],["impl PartialEq<MLogRight> for MLogRight"],["impl PartialEq<DerivationDestination> for DerivationDestination"],["impl PartialEq<MSCCall> for MSCCall"],["impl PartialEq<MetadataError> for MetadataError"],["impl PartialEq<OrderedNetworkSpecs> for OrderedNetworkSpecs"],["impl PartialEq<SeedNameCard> for SeedNameCard"],["impl PartialEq<MSCId> for MSCId"],["impl PartialEq<MBackup> for MBackup"],["impl PartialEq<DDDetail> for DDDetail"],["impl PartialEq<MTypesInfo> for MTypesInfo"],["impl PartialEq<DerivationEntry> for DerivationEntry"],["impl PartialEq<EnumVariant> for EnumVariant"],["impl PartialEq<Entry> for Entry"],["impl PartialEq<MSCTxSpecPlain> for MSCTxSpecPlain"],["impl PartialEq<StubNav> for StubNav"],["impl PartialEq<ShortSpecs> for ShortSpecs"],["impl PartialEq<DynamicDerivationsRequestInfo> for DynamicDerivationsRequestInfo"],["impl PartialEq<DynamicDerivationsAddressResponse> for DynamicDerivationsAddressResponse"],["impl PartialEq<MPasswordConfirm> for MPasswordConfirm"],["impl PartialEq<MKeyDetailsMulti> for MKeyDetailsMulti"],["impl PartialEq<DynamicDerivationsAddressResponseV1> for DynamicDerivationsAddressResponseV1"],["impl PartialEq<Order> for Order"],["impl PartialEq<MRecoverSeedName> for MRecoverSeedName"],["impl PartialEq<MSCContent> for MSCContent"],["impl PartialEq<DynamicDerivationsRequest> for DynamicDerivationsRequest"],["impl PartialEq<QrData> for QrData"],["impl PartialEq<VerifierKey> for VerifierKey"],["impl PartialEq<MSCFieldName> for MSCFieldName"],["impl PartialEq<PathAndNetwork> for PathAndNetwork"],["impl PartialEq<Verifier> for Verifier"],["impl PartialEq<DerivationPack> for DerivationPack"],["impl PartialEq<ActionResult> for ActionResult"],["impl PartialEq<Description> for Description"],["impl PartialEq<DDPreview> for DDPreview"],["impl PartialEq<MLogDetails> for MLogDetails"],["impl PartialEq<SignMessageDisplay> for SignMessageDisplay"],["impl PartialEq<DDKeySet> for DDKeySet"],["impl PartialEq<SeedNameWithIdenticon> for SeedNameWithIdenticon"],["impl PartialEq<MSignedTransaction> for MSignedTransaction"],["impl PartialEq<EnumVariantType> for EnumVariantType"],["impl PartialEq<MDeriveKey> for MDeriveKey"],["impl PartialEq<GeneralVerifierForContent> for GeneralVerifierForContent"],["impl PartialEq<MetaValues> for MetaValues"],["impl PartialEq<MSeeds> for MSeeds"],["impl PartialEq<Card> for Card"],["impl PartialEq<MNewSeedBackup> for MNewSeedBackup"],["impl PartialEq<TransactionAction> for TransactionAction"],["impl PartialEq<NetworkSpecsExport> for NetworkSpecsExport"],["impl PartialEq<Encryption> for Encryption"],["impl PartialEq<IdentityHistory> for IdentityHistory"],["impl PartialEq<DerivedKeyStatus> for DerivedKeyStatus"],["impl PartialEq<DerivedKeyPreview> for DerivedKeyPreview"],["impl PartialEq<ScreenData> for ScreenData"],["impl PartialEq<MSignSufficientCrypto> for MSignSufficientCrypto"],["impl PartialEq<FooterButton> for FooterButton"],["impl PartialEq<ModalData> for ModalData"],["impl PartialEq<StructField> for StructField"],["impl PartialEq<MKeysInfoExport> for MKeysInfoExport"],["impl PartialEq<MEnterPassword> for MEnterPassword"],["impl PartialEq<MetaValuesDisplay> for MetaValuesDisplay"],["impl PartialEq<ValidCurrentVerifier> for ValidCurrentVerifier"],["impl PartialEq<MSCCurrency> for MSCCurrency"],["impl PartialEq<MTransaction> for MTransaction"],["impl PartialEq<RightButton> for RightButton"],["impl PartialEq<TypesExport> for TypesExport"],["impl PartialEq<Identicon> for Identicon"]], +"navigator":[["impl PartialEq<Action> for Action"],["impl PartialEq<Modal> for Modal"],["impl PartialEq<Alert> for Alert"]], +"qr_reader_phone":[["impl PartialEq<Fountain> for Fountain"],["impl PartialEq<Element> for Element"],["impl PartialEq<LegacyMulti> for LegacyMulti"]], +"transaction_signing":[["impl PartialEq<SignatureType> for SignatureType"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/convert/trait.From.js b/rustdocs/implementors/core/convert/trait.From.js new file mode 100644 index 0000000000..6f0a27681b --- /dev/null +++ b/rustdocs/implementors/core/convert/trait.From.js @@ -0,0 +1,12 @@ +(function() {var implementors = { +"db_handling":[["impl From<Error> for Error"],["impl From<TrDbColdSignOne> for TrDbColdSign"],["impl From<TransactionError<Error>> for Error"],["impl From<SignaturesBulkV1> for SignaturesBulk"],["impl From<&[MultiSignature]> for SignaturesBulkV1"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<ExportAddrsV2> for ExportAddrsV1"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Format> for Error"],["impl From<ErrorKind> for Error"]], +"defaults":[["impl From<Error> for Error"],["impl From<Error> for Error"]], +"definitions":[["impl From<Error> for Wasm"],["impl From<OrderedNetworkSpecs> for Network"],["impl From<PublicError> for Error"],["impl From<MetadataError> for Error"],["impl From<FromHexError> for Error"],["impl From<Error> for Wasm"],["impl From<OrderedNetworkSpecs> for MSCNetworkInfo"],["impl From<MetadataError> for Wasm"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Wasm> for Error"],["impl From<Error> for Error"],["impl From<WasmError> for Wasm"]], +"generate_message":[["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<SetFlags> for Set"],["impl From<MetadataError> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<ContentArgs> for Content"]], +"navigator":[["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<FromHexError> for Error"],["impl From<Error> for Error"]], +"parser":[["impl From<MetadataError> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"]], +"qr_reader_phone":[["impl From<Error> for Error"],["impl From<FromHexError> for Error"],["impl From<Error> for Error"]], +"signer":[["impl From<Error> for ErrorDisplayed"],["impl From<Error> for QrSequenceDecodeError"],["impl From<Error> for ErrorDisplayed"],["impl From<String> for ErrorDisplayed"],["impl From<Error> for ErrorDisplayed"]], +"transaction_parsing":[["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<MetadataError> for Error"],["impl From<Error> for Error"],["impl From<Utf8Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"]], +"transaction_signing":[["impl From<Error> for Error"],["impl From<Error> for Error"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/convert/trait.TryFrom.js b/rustdocs/implementors/core/convert/trait.TryFrom.js new file mode 100644 index 0000000000..12fd2823dd --- /dev/null +++ b/rustdocs/implementors/core/convert/trait.TryFrom.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"definitions":[["impl TryFrom<String> for Encryption"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/default/trait.Default.js b/rustdocs/implementors/core/default/trait.Default.js new file mode 100644 index 0000000000..708bb62f4a --- /dev/null +++ b/rustdocs/implementors/core/default/trait.Default.js @@ -0,0 +1,5 @@ +(function() {var implementors = { +"db_handling":[["impl Default for TrDbColdStub"],["impl Default for TrDbCold"],["impl Default for TrDbColdSign"],["impl Default for TrDbHot"]], +"definitions":[["impl Default for MVerifier"],["impl Default for TransactionCardSet"],["impl Default for MVerifierDetails"],["impl Default for Address"],["impl Default for MKeysCard"],["impl Default for DerivationCheck"],["impl Default for MSettings"],["impl Default for MNetworkCard"],["impl Default for Identicon"]], +"generate_message":[["impl Default for SetFlags"],["impl Default for ContentArgs"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/error/trait.Error.js b/rustdocs/implementors/core/error/trait.Error.js new file mode 100644 index 0000000000..ab01aa246d --- /dev/null +++ b/rustdocs/implementors/core/error/trait.Error.js @@ -0,0 +1,11 @@ +(function() {var implementors = { +"db_handling":[["impl Error for Error"]], +"defaults":[["impl Error for Error"]], +"definitions":[["impl Error for MetadataError"],["impl Error for Error"],["impl Error for Wasm"]], +"generate_message":[["impl Error for Error"]], +"navigator":[["impl Error for Error"]], +"parser":[["impl Error for Error"]], +"qr_reader_phone":[["impl Error for Error"]], +"transaction_parsing":[["impl Error for Error"]], +"transaction_signing":[["impl Error for Error"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/fmt/trait.Debug.js b/rustdocs/implementors/core/fmt/trait.Debug.js new file mode 100644 index 0000000000..01e013aa7e --- /dev/null +++ b/rustdocs/implementors/core/fmt/trait.Debug.js @@ -0,0 +1,13 @@ +(function() {var implementors = { +"db_handling":[["impl Debug for TrDbCold"],["impl Debug for TrDbColdStub"],["impl Debug for SignContent"],["impl Debug for ExportAddrsV1"],["impl Debug for ExportAddrs"],["impl Debug for VaultFeatures"],["impl Debug for TrDbColdSignOne"],["impl Debug for SeedDraft"],["impl Debug for ExportAddrsV2"],["impl Debug for TrDbColdSign"],["impl Debug for Error"],["impl Debug for TrDbHot"],["impl Debug for AddrInfo"],["impl Debug for SeedInfo"]], +"defaults":[["impl Debug for Error"]], +"definitions":[["impl Debug for SufficientCrypto"],["impl Debug for Wasm"],["impl Debug for NetworkVerifierDisplay"],["impl Debug for Network"],["impl Debug for AddressKey"],["impl Debug for StubNav"],["impl Debug for CurrentVerifier"],["impl Debug for NetworkSpecsExport"],["impl Debug for MSCEraMortal"],["impl Debug for TransactionCard"],["impl Debug for NetworkSpecsKey"],["impl Debug for MManageMetadata"],["impl Debug for TypesExport"],["impl Debug for MSignedTransaction"],["impl Debug for MRecoverSeedName"],["impl Debug for NetworkProperties"],["impl Debug for DDPreview"],["impl Debug for MSCNameVersion"],["impl Debug for MNewSeed"],["impl Debug for ActionResult"],["impl Debug for IdentityHistory"],["impl Debug for MBackup"],["impl Debug for VerifierKey"],["impl Debug for Identicon"],["impl Debug for MetadataError"],["impl Debug for MEventMaybeDecoded"],["impl Debug for DerivedKeyPreview"],["impl Debug for MNetworkMenu"],["impl Debug for MSCContent"],["impl Debug for MSCCurrency"],["impl Debug for MNetworkDetails"],["impl Debug for Card"],["impl Debug for ParserDecodingError"],["impl Debug for MSCCall"],["impl Debug for ShortSpecs"],["impl Debug for MKeysInfoExport"],["impl Debug for MSignSufficientCrypto"],["impl Debug for Verifier"],["impl Debug for Encryption"],["impl Debug for GeneralVerifierForContent"],["impl Debug for MMMNetwork"],["impl Debug for TransactionSignAction"],["impl Debug for DynamicDerivationsAddressResponse"],["impl Debug for RightButton"],["impl Debug for MetaValues"],["impl Debug for DynamicDerivationsRequest"],["impl Debug for DynamicDerivationsAddressResponseV1"],["impl Debug for Entry"],["impl Debug for MMetadataRecord"],["impl Debug for QrData"],["impl Debug for MLogRight"],["impl Debug for MKeysCard"],["impl Debug for DerivationDestination"],["impl Debug for MetaValuesDisplay"],["impl Debug for DerivedKeyError"],["impl Debug for MSignatureReady"],["impl Debug for DynamicDerivationRequestInfo"],["impl Debug for AddressBookEntry"],["impl Debug for AddressDetails"],["impl Debug for Error"],["impl Debug for ParserError"],["impl Debug for MEnterPassword"],["impl Debug for VerifierValue"],["impl Debug for DynamicDerivationsRequestInfo"],["impl Debug for MLogDetails"],["impl Debug for SeedKeysPreview"],["impl Debug for DynamicDerivationResponseInfo"],["impl Debug for MetaHistoryEntry"],["impl Debug for Event"],["impl Debug for MSCTip"],["impl Debug for BananaSplitRecoveryResult"],["impl Debug for MKeyDetails"],["impl Debug for DynamicDerivationsResponseInfo"],["impl Debug for MetaKeyPrefix"],["impl Debug for DDDetail"],["impl Debug for MRawKey"],["impl Debug for MKeyDetailsMulti"],["impl Debug for MSCTxSpecPlain"],["impl Debug for TransferContent"],["impl Debug for MSCFieldNumber"],["impl Debug for TransactionCardSet"],["impl Debug for History"],["impl Debug for AlertData"],["impl Debug for SeedNameCard"],["impl Debug for ScreenNameType"],["impl Debug for SignMessageDisplay"],["impl Debug for MSCEnumVariantName"],["impl Debug for AddressBookKey"],["impl Debug for MVerifier"],["impl Debug for SignDisplay"],["impl Debug for NetworkSpecsDisplay"],["impl Debug for MSeedMenu"],["impl Debug for ShieldAlert"],["impl Debug for OrderedNetworkSpecs"],["impl Debug for MSeeds"],["impl Debug for Check"],["impl Debug for MSCFieldName"],["impl Debug for MetaKey"],["impl Debug for ValidCurrentVerifier"],["impl Debug for MTransaction"],["impl Debug for MVerifierDetails"],["impl Debug for TransactionType"],["impl Debug for DecodeSequenceResult"],["impl Debug for MNewSeedBackup"],["impl Debug for MRecoverSeedPhrase"],["impl Debug for MAddressCard"],["impl Debug for NetworkSpecs"],["impl Debug for ModalData"],["impl Debug for MNetworkCard"],["impl Debug for TypesDisplay"],["impl Debug for MSettings"],["impl Debug for MPasswordConfirm"],["impl Debug for MSufficientCryptoReady"],["impl Debug for MKeyAndNetworkCard"],["impl Debug for DerivationPack"],["impl Debug for MLog"],["impl Debug for ExportedSet"],["impl Debug for MMNetwork"],["impl Debug for PathAndNetwork"],["impl Debug for DDKeySet"],["impl Debug for DerivationCheck"],["impl Debug for MManageNetworks"],["impl Debug for DerivedKeyStatus"],["impl Debug for ScreenData"],["impl Debug for MSCId"],["impl Debug for TransactionAction"],["impl Debug for DynamicDerivationsAddressRequestV1"],["impl Debug for Order"],["impl Debug for MDeriveKey"],["impl Debug for DerivationEntry"],["impl Debug for MKeysNew"],["impl Debug for ParserMetadataError"],["impl Debug for MetaValuesExport"],["impl Debug for MTypesInfo"],["impl Debug for Address"],["impl Debug for MSCNetworkInfo"],["impl Debug for FooterButton"]], +"generate_message":[["impl Debug for Derivations"],["impl Debug for Msg"],["impl Debug for Error"],["impl Debug for InstructionSpecs"],["impl Debug for Make"],["impl Debug for SetFlags"],["impl Debug for Signature"],["impl Debug for Verifier"],["impl Debug for Override"],["impl Debug for InstructionMeta"],["impl Debug for Token"],["impl Debug for Goal"],["impl Debug for Content"],["impl Debug for Show"],["impl Debug for Command"],["impl Debug for ContentArgs"],["impl Debug for Set"],["impl Debug for Sufficient"],["impl Debug for Cli"],["impl Debug for Remove"]], +"navigator":[["impl Debug for DeriveState"],["impl Debug for AddressState"],["impl Debug for Error"],["impl Debug for EnteredInfo"],["impl Debug for SufficientCryptoState"],["impl Debug for Modal"],["impl Debug for Action"],["impl Debug for SpecialtyKeysState"],["impl Debug for Alert"],["impl Debug for Screen"],["impl Debug for RecoverSeedPhraseState"],["impl Debug for AddressStateMulti"],["impl Debug for KeysState"]], +"parser":[["impl Debug for Error"]], +"qr_reader_pc":[["impl Debug for CameraSettings"]], +"qr_reader_phone":[["impl Debug for Error"]], +"signer":[["impl Debug for QrSequenceDecodeError"],["impl Debug for ErrorDisplayed"]], +"transaction_parsing":[["impl Debug for Error"]], +"transaction_signing":[["impl Debug for SignatureType"],["impl Debug for SufficientContent"],["impl Debug for Error"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/fmt/trait.Display.js b/rustdocs/implementors/core/fmt/trait.Display.js new file mode 100644 index 0000000000..6c2bb2b53e --- /dev/null +++ b/rustdocs/implementors/core/fmt/trait.Display.js @@ -0,0 +1,12 @@ +(function() {var implementors = { +"db_handling":[["impl Display for Error"]], +"defaults":[["impl Display for Error"]], +"definitions":[["impl Display for MetadataError"],["impl Display for Wasm"],["impl Display for Error"]], +"generate_message":[["impl Display for Set"],["impl Display for Goal"],["impl Display for Error"]], +"navigator":[["impl Display for Error"]], +"parser":[["impl Display for Error"]], +"qr_reader_phone":[["impl Display for Error"]], +"signer":[["impl Display for ErrorDisplayed"],["impl Display for QrSequenceDecodeError"]], +"transaction_parsing":[["impl Display for Error"]], +"transaction_signing":[["impl Display for Error"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/hash/trait.Hash.js b/rustdocs/implementors/core/hash/trait.Hash.js new file mode 100644 index 0000000000..c643016510 --- /dev/null +++ b/rustdocs/implementors/core/hash/trait.Hash.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"definitions":[["impl Hash for NetworkSpecsKey"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/marker/trait.Copy.js b/rustdocs/implementors/core/marker/trait.Copy.js new file mode 100644 index 0000000000..26eb806963 --- /dev/null +++ b/rustdocs/implementors/core/marker/trait.Copy.js @@ -0,0 +1,5 @@ +(function() {var implementors = { +"definitions":[["impl Copy for Encryption"]], +"navigator":[["impl Copy for Alert"]], +"transaction_signing":[["impl Copy for SignatureType"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/marker/trait.Freeze.js b/rustdocs/implementors/core/marker/trait.Freeze.js new file mode 100644 index 0000000000..1def4edc31 --- /dev/null +++ b/rustdocs/implementors/core/marker/trait.Freeze.js @@ -0,0 +1,15 @@ +(function() {var implementors = { +"db_handling":[["impl Freeze for TrDbCold",1,["db_handling::db_transactions::TrDbCold"]],["impl Freeze for TrDbHot",1,["db_handling::db_transactions::TrDbHot"]],["impl Freeze for TrDbColdStub",1,["db_handling::db_transactions::TrDbColdStub"]],["impl Freeze for TrDbColdSign",1,["db_handling::db_transactions::TrDbColdSign"]],["impl Freeze for TrDbColdSignOne",1,["db_handling::db_transactions::TrDbColdSignOne"]],["impl Freeze for SignContent",1,["db_handling::db_transactions::SignContent"]],["impl Freeze for SpecsInvariants",1,["db_handling::helpers::SpecsInvariants"]],["impl Freeze for SignaturesBulk",1,["db_handling::identities::SignaturesBulk"]],["impl Freeze for SignaturesBulkV1",1,["db_handling::identities::SignaturesBulkV1"]],["impl Freeze for DynamicDerivationTransaction",1,["db_handling::identities::DynamicDerivationTransaction"]],["impl Freeze for TransactionBulk",1,["db_handling::identities::TransactionBulk"]],["impl Freeze for TransactionBulkV1",1,["db_handling::identities::TransactionBulkV1"]],["impl Freeze for ExportAddrs",1,["db_handling::identities::ExportAddrs"]],["impl Freeze for ExportAddrsV1",1,["db_handling::identities::ExportAddrsV1"]],["impl Freeze for ExportAddrsV2",1,["db_handling::identities::ExportAddrsV2"]],["impl Freeze for VaultFeatures",1,["db_handling::identities::VaultFeatures"]],["impl Freeze for SeedInfo",1,["db_handling::identities::SeedInfo"]],["impl Freeze for AddrInfo",1,["db_handling::identities::AddrInfo"]],["impl Freeze for DerivationCheck",1,["db_handling::identities::DerivationCheck"]],["impl Freeze for SeedDraft",1,["db_handling::interface_signer::SeedDraft"]],["impl Freeze for Error",1,["db_handling::error::Error"]]], +"defaults":[["impl Freeze for Error",1,["defaults::error::Error"]]], +"definitions":[["impl Freeze for Encryption",1,["definitions::crypto::Encryption"]],["impl Freeze for SufficientCrypto",1,["definitions::crypto::SufficientCrypto"]],["impl Freeze for DangerRecord",1,["definitions::danger::DangerRecord"]],["impl Freeze for Error",1,["definitions::error::Error"]],["impl Freeze for TransferContent",1,["definitions::error::TransferContent"]],["impl Freeze for MetadataError",1,["definitions::error::MetadataError"]],["impl Freeze for Wasm",1,["definitions::error_active::Wasm"]],["impl Freeze for Check",1,["definitions::error_active::Check"]],["impl Freeze for GeneralVerifierForContent",1,["definitions::error_signer::GeneralVerifierForContent"]],["impl Freeze for ParserError",1,["definitions::error_signer::ParserError"]],["impl Freeze for ParserDecodingError",1,["definitions::error_signer::ParserDecodingError"]],["impl Freeze for ParserMetadataError",1,["definitions::error_signer::ParserMetadataError"]],["impl Freeze for IdenticonStyle",1,["definitions::helpers::IdenticonStyle"]],["impl Freeze for MetaValuesDisplay",1,["definitions::history::MetaValuesDisplay"]],["impl Freeze for MetaValuesExport",1,["definitions::history::MetaValuesExport"]],["impl Freeze for NetworkSpecsDisplay",1,["definitions::history::NetworkSpecsDisplay"]],["impl Freeze for NetworkSpecsExport",1,["definitions::history::NetworkSpecsExport"]],["impl Freeze for NetworkVerifierDisplay",1,["definitions::history::NetworkVerifierDisplay"]],["impl Freeze for TypesDisplay",1,["definitions::history::TypesDisplay"]],["impl Freeze for TypesExport",1,["definitions::history::TypesExport"]],["impl Freeze for IdentityHistory",1,["definitions::history::IdentityHistory"]],["impl Freeze for SignDisplay",1,["definitions::history::SignDisplay"]],["impl Freeze for SignMessageDisplay",1,["definitions::history::SignMessageDisplay"]],["impl Freeze for Event",1,["definitions::history::Event"]],["impl Freeze for Entry",1,["definitions::history::Entry"]],["impl Freeze for NetworkSpecsKey",1,["definitions::keyring::NetworkSpecsKey"]],["impl Freeze for VerifierKey",1,["definitions::keyring::VerifierKey"]],["impl Freeze for AddressKey",1,["definitions::keyring::AddressKey"]],["impl Freeze for MetaKey",1,["definitions::keyring::MetaKey"]],["impl Freeze for MetaKeyPrefix",1,["definitions::keyring::MetaKeyPrefix"]],["impl Freeze for Order",1,["definitions::keyring::Order"]],["impl Freeze for AddressBookKey",1,["definitions::keyring::AddressBookKey"]],["impl Freeze for MetaInfo",1,["definitions::metadata::MetaInfo"]],["impl Freeze for MetaValues",1,["definitions::metadata::MetaValues"]],["impl Freeze for MetaSetElement",1,["definitions::metadata::MetaSetElement"]],["impl Freeze for AddressBookEntry",1,["definitions::metadata::AddressBookEntry"]],["impl Freeze for MetaHistoryEntry",1,["definitions::metadata::MetaHistoryEntry"]],["impl Freeze for OrderedNetworkSpecs",1,["definitions::network_specs::OrderedNetworkSpecs"]],["impl Freeze for NetworkSpecs",1,["definitions::network_specs::NetworkSpecs"]],["impl Freeze for ShortSpecs",1,["definitions::network_specs::ShortSpecs"]],["impl Freeze for NetworkProperties",1,["definitions::network_specs::NetworkProperties"]],["impl Freeze for Verifier",1,["definitions::network_specs::Verifier"]],["impl Freeze for VerifierValue",1,["definitions::network_specs::VerifierValue"]],["impl Freeze for CurrentVerifier",1,["definitions::network_specs::CurrentVerifier"]],["impl Freeze for ValidCurrentVerifier",1,["definitions::network_specs::ValidCurrentVerifier"]],["impl Freeze for ContentLoadMeta",1,["definitions::qr_transfers::ContentLoadMeta"]],["impl Freeze for ContentAddSpecs",1,["definitions::qr_transfers::ContentAddSpecs"]],["impl Freeze for ContentLoadTypes",1,["definitions::qr_transfers::ContentLoadTypes"]],["impl Freeze for TypeEntry",1,["definitions::types::TypeEntry"]],["impl Freeze for Description",1,["definitions::types::Description"]],["impl Freeze for EnumVariant",1,["definitions::types::EnumVariant"]],["impl Freeze for EnumVariantType",1,["definitions::types::EnumVariantType"]],["impl Freeze for StructField",1,["definitions::types::StructField"]],["impl Freeze for AddressDetails",1,["definitions::users::AddressDetails"]],["impl Freeze for SeedNameWithIdenticon",1,["definitions::navigation::SeedNameWithIdenticon"]],["impl Freeze for TransactionSignAction",1,["definitions::navigation::TransactionSignAction"]],["impl Freeze for TransactionAction",1,["definitions::navigation::TransactionAction"]],["impl Freeze for StubNav",1,["definitions::navigation::StubNav"]],["impl Freeze for FooterButton",1,["definitions::navigation::FooterButton"]],["impl Freeze for RightButton",1,["definitions::navigation::RightButton"]],["impl Freeze for ScreenNameType",1,["definitions::navigation::ScreenNameType"]],["impl Freeze for ShieldAlert",1,["definitions::navigation::ShieldAlert"]],["impl Freeze for AlertData",1,["definitions::navigation::AlertData"]],["impl Freeze for ActionResult",1,["definitions::navigation::ActionResult"]],["impl Freeze for LogScreenEntry",1,["definitions::navigation::LogScreenEntry"]],["impl Freeze for ScreenData",1,["definitions::navigation::ScreenData"]],["impl Freeze for MKeysCard",1,["definitions::navigation::MKeysCard"]],["impl Freeze for MKeysNew",1,["definitions::navigation::MKeysNew"]],["impl Freeze for MKeyAndNetworkCard",1,["definitions::navigation::MKeyAndNetworkCard"]],["impl Freeze for MNetworkCard",1,["definitions::navigation::MNetworkCard"]],["impl Freeze for MSettings",1,["definitions::navigation::MSettings"]],["impl Freeze for History",1,["definitions::navigation::History"]],["impl Freeze for MLog",1,["definitions::navigation::MLog"]],["impl Freeze for MEventMaybeDecoded",1,["definitions::navigation::MEventMaybeDecoded"]],["impl Freeze for MLogDetails",1,["definitions::navigation::MLogDetails"]],["impl Freeze for TransactionType",1,["definitions::navigation::TransactionType"]],["impl Freeze for TransactionCard",1,["definitions::navigation::TransactionCard"]],["impl Freeze for BananaSplitRecoveryResult",1,["definitions::navigation::BananaSplitRecoveryResult"]],["impl Freeze for DecodeSequenceResult",1,["definitions::navigation::DecodeSequenceResult"]],["impl Freeze for TransactionCardSet",1,["definitions::navigation::TransactionCardSet"]],["impl Freeze for MTransaction",1,["definitions::navigation::MTransaction"]],["impl Freeze for MSignedTransaction",1,["definitions::navigation::MSignedTransaction"]],["impl Freeze for SeedNameCard",1,["definitions::navigation::SeedNameCard"]],["impl Freeze for MSeeds",1,["definitions::navigation::MSeeds"]],["impl Freeze for MKeyDetails",1,["definitions::navigation::MKeyDetails"]],["impl Freeze for MNewSeed",1,["definitions::navigation::MNewSeed"]],["impl Freeze for MRecoverSeedName",1,["definitions::navigation::MRecoverSeedName"]],["impl Freeze for MRecoverSeedPhrase",1,["definitions::navigation::MRecoverSeedPhrase"]],["impl Freeze for DerivationCheck",1,["definitions::navigation::DerivationCheck"]],["impl Freeze for Address",1,["definitions::navigation::Address"]],["impl Freeze for MAddressCard",1,["definitions::navigation::MAddressCard"]],["impl Freeze for DerivationDestination",1,["definitions::navigation::DerivationDestination"]],["impl Freeze for MDeriveKey",1,["definitions::navigation::MDeriveKey"]],["impl Freeze for MVerifierDetails",1,["definitions::navigation::MVerifierDetails"]],["impl Freeze for MVerifier",1,["definitions::navigation::MVerifier"]],["impl Freeze for MMetadataRecord",1,["definitions::navigation::MMetadataRecord"]],["impl Freeze for MNetworkDetails",1,["definitions::navigation::MNetworkDetails"]],["impl Freeze for MRawKey",1,["definitions::navigation::MRawKey"]],["impl Freeze for MSignSufficientCrypto",1,["definitions::navigation::MSignSufficientCrypto"]],["impl Freeze for MKeyDetailsMulti",1,["definitions::navigation::MKeyDetailsMulti"]],["impl Freeze for MMNetwork",1,["definitions::navigation::MMNetwork"]],["impl Freeze for MManageNetworks",1,["definitions::navigation::MManageNetworks"]],["impl Freeze for ExportedSet",1,["definitions::navigation::ExportedSet"]],["impl Freeze for PathAndNetwork",1,["definitions::navigation::PathAndNetwork"]],["impl Freeze for MSCContent",1,["definitions::navigation::MSCContent"]],["impl Freeze for QrData",1,["definitions::navigation::QrData"]],["impl Freeze for MSufficientCryptoReady",1,["definitions::navigation::MSufficientCryptoReady"]],["impl Freeze for DerivationEntry",1,["definitions::navigation::DerivationEntry"]],["impl Freeze for DerivationPack",1,["definitions::navigation::DerivationPack"]],["impl Freeze for MBackup",1,["definitions::navigation::MBackup"]],["impl Freeze for MSeedMenu",1,["definitions::navigation::MSeedMenu"]],["impl Freeze for MNewSeedBackup",1,["definitions::navigation::MNewSeedBackup"]],["impl Freeze for Network",1,["definitions::navigation::Network"]],["impl Freeze for MNetworkMenu",1,["definitions::navigation::MNetworkMenu"]],["impl Freeze for MPasswordConfirm",1,["definitions::navigation::MPasswordConfirm"]],["impl Freeze for MSignatureReady",1,["definitions::navigation::MSignatureReady"]],["impl Freeze for MEnterPassword",1,["definitions::navigation::MEnterPassword"]],["impl Freeze for MLogRight",1,["definitions::navigation::MLogRight"]],["impl Freeze for MMMNetwork",1,["definitions::navigation::MMMNetwork"]],["impl Freeze for MManageMetadata",1,["definitions::navigation::MManageMetadata"]],["impl Freeze for MTypesInfo",1,["definitions::navigation::MTypesInfo"]],["impl Freeze for ModalData",1,["definitions::navigation::ModalData"]],["impl Freeze for MSCCall",1,["definitions::navigation::MSCCall"]],["impl Freeze for MSCCurrency",1,["definitions::navigation::MSCCurrency"]],["impl Freeze for MSCEnumVariantName",1,["definitions::navigation::MSCEnumVariantName"]],["impl Freeze for MSCEraMortal",1,["definitions::navigation::MSCEraMortal"]],["impl Freeze for MSCFieldName",1,["definitions::navigation::MSCFieldName"]],["impl Freeze for MSCFieldNumber",1,["definitions::navigation::MSCFieldNumber"]],["impl Freeze for Identicon",1,["definitions::navigation::Identicon"]],["impl Freeze for MSCId",1,["definitions::navigation::MSCId"]],["impl Freeze for MSCNameVersion",1,["definitions::navigation::MSCNameVersion"]],["impl Freeze for MSCNetworkInfo",1,["definitions::navigation::MSCNetworkInfo"]],["impl Freeze for DDPreview",1,["definitions::navigation::DDPreview"]],["impl Freeze for DDKeySet",1,["definitions::navigation::DDKeySet"]],["impl Freeze for DDDetail",1,["definitions::navigation::DDDetail"]],["impl Freeze for MSCTip",1,["definitions::navigation::MSCTip"]],["impl Freeze for MSCTxSpecPlain",1,["definitions::navigation::MSCTxSpecPlain"]],["impl Freeze for MKeysInfoExport",1,["definitions::navigation::MKeysInfoExport"]],["impl Freeze for Card",1,["definitions::navigation::Card"]],["impl Freeze for SeedKeysPreview",1,["definitions::derivations::SeedKeysPreview"]],["impl Freeze for DerivedKeyPreview",1,["definitions::derivations::DerivedKeyPreview"]],["impl Freeze for DerivedKeyStatus",1,["definitions::derivations::DerivedKeyStatus"]],["impl Freeze for DerivedKeyError",1,["definitions::derivations::DerivedKeyError"]],["impl Freeze for DynamicDerivationsRequest",1,["definitions::dynamic_derivations::DynamicDerivationsRequest"]],["impl Freeze for DynamicDerivationsAddressRequestV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressRequestV1"]],["impl Freeze for DynamicDerivationsRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationsRequestInfo"]],["impl Freeze for DynamicDerivationRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationRequestInfo"]],["impl Freeze for DynamicDerivationsAddressResponse",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponse"]],["impl Freeze for DynamicDerivationsAddressResponseV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponseV1"]],["impl Freeze for DynamicDerivationsResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationsResponseInfo"]],["impl Freeze for DynamicDerivationResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationResponseInfo"]],["impl Freeze for SchemaVersion",1,["definitions::schema_version::SchemaVersion"]]], +"generate_message":[["impl Freeze for FetchedInfo",1,["generate_message::fetch_metadata::FetchedInfo"]],["impl Freeze for FetchedInfoWithNetworkSpecs",1,["generate_message::fetch_metadata::FetchedInfoWithNetworkSpecs"]],["impl Freeze for Write",1,["generate_message::helpers::Write"]],["impl Freeze for MetaValuesStamped",1,["generate_message::helpers::MetaValuesStamped"]],["impl Freeze for SortedMetaValues",1,["generate_message::helpers::SortedMetaValues"]],["impl Freeze for MetaShortCut",1,["generate_message::helpers::MetaShortCut"]],["impl Freeze for MetaFetched",1,["generate_message::helpers::MetaFetched"]],["impl Freeze for TokenFetch",1,["generate_message::interpret_specs::TokenFetch"]],["impl Freeze for Cli",1,["generate_message::parser::Cli"]],["impl Freeze for Command",1,["generate_message::parser::Command"]],["impl Freeze for Show",1,["generate_message::parser::Show"]],["impl Freeze for InstructionMeta",1,["generate_message::parser::InstructionMeta"]],["impl Freeze for InstructionSpecs",1,["generate_message::parser::InstructionSpecs"]],["impl Freeze for ContentArgs",1,["generate_message::parser::ContentArgs"]],["impl Freeze for Content",1,["generate_message::parser::Content"]],["impl Freeze for Set",1,["generate_message::parser::Set"]],["impl Freeze for SetFlags",1,["generate_message::parser::SetFlags"]],["impl Freeze for Make",1,["generate_message::parser::Make"]],["impl Freeze for Goal",1,["generate_message::parser::Goal"]],["impl Freeze for Verifier",1,["generate_message::parser::Verifier"]],["impl Freeze for Crypto",1,["generate_message::parser::Crypto"]],["impl Freeze for Signature",1,["generate_message::parser::Signature"]],["impl Freeze for Sufficient",1,["generate_message::parser::Sufficient"]],["impl Freeze for Msg",1,["generate_message::parser::Msg"]],["impl Freeze for Remove",1,["generate_message::parser::Remove"]],["impl Freeze for Derivations",1,["generate_message::parser::Derivations"]],["impl Freeze for Override",1,["generate_message::parser::Override"]],["impl Freeze for Token",1,["generate_message::parser::Token"]],["impl Freeze for Error",1,["generate_message::error::Error"]]], +"navigator":[["impl Freeze for Error",1,["navigator::error::Error"]],["impl Freeze for Action",1,["navigator::actions::Action"]],["impl Freeze for Alert",1,["navigator::alerts::Alert"]],["impl Freeze for Modal",1,["navigator::modals::Modal"]],["impl Freeze for Screen",1,["navigator::screens::Screen"]],["impl Freeze for SpecialtyKeysState",1,["navigator::screens::SpecialtyKeysState"]],["impl Freeze for KeysState",1,["navigator::screens::KeysState"]],["impl Freeze for AddressState",1,["navigator::screens::AddressState"]],["impl Freeze for AddressStateMulti",1,["navigator::screens::AddressStateMulti"]],["impl Freeze for DeriveState",1,["navigator::screens::DeriveState"]],["impl Freeze for SufficientCryptoState",1,["navigator::screens::SufficientCryptoState"]],["impl Freeze for RecoverSeedPhraseState",1,["navigator::screens::RecoverSeedPhraseState"]],["impl Freeze for EnteredInfo",1,["navigator::screens::EnteredInfo"]],["impl Freeze for STATE",1,["navigator::STATE"]]], +"parser":[["impl Freeze for ParserCard",1,["parser::cards::ParserCard"]],["impl Freeze for OutputCard",1,["parser::decoding_commons::OutputCard"]],["impl<T> Freeze for CutCompact<T>where\n T: Freeze,",1,["parser::decoding_commons::CutCompact"]],["impl Freeze for Error",1,["parser::error::Error"]],["impl<'a> Freeze for OlderMeta<'a>",1,["parser::method::OlderMeta"]],["impl<'a> Freeze for MetadataBundle<'a>",1,["parser::MetadataBundle"]]], +"printing_balance":[["impl Freeze for PrettyOutput",1,["printing_balance::PrettyOutput"]]], +"qr_reader_pc":[["impl Freeze for CameraSettings",1,["qr_reader_pc::CameraSettings"]]], +"qr_reader_phone":[["impl Freeze for Error",1,["qr_reader_phone::error::Error"]],["impl Freeze for Fountain",1,["qr_reader_phone::process_payload::Fountain"]],["impl Freeze for LegacyMulti",1,["qr_reader_phone::process_payload::LegacyMulti"]],["impl Freeze for BananaRecovery",1,["qr_reader_phone::process_payload::BananaRecovery"]],["impl Freeze for Element",1,["qr_reader_phone::process_payload::Element"]],["impl Freeze for InProgress",1,["qr_reader_phone::process_payload::InProgress"]],["impl Freeze for Ready",1,["qr_reader_phone::process_payload::Ready"]]], +"qrcode_static":[["impl Freeze for DataType",1,["qrcode_static::DataType"]]], +"signer":[["impl Freeze for ErrorDisplayed",1,["signer::ErrorDisplayed"]],["impl Freeze for QrSequenceDecodeError",1,["signer::QrSequenceDecodeError"]]], +"transaction_parsing":[["impl Freeze for InfoPassedCrypto",1,["transaction_parsing::check_signature::InfoPassedCrypto"]],["impl Freeze for Error",1,["transaction_parsing::error::Error"]]], +"transaction_signing":[["impl Freeze for SignatureType",1,["transaction_signing::sign_transaction::SignatureType"]],["impl Freeze for SignatureAndChecksum",1,["transaction_signing::sign_transaction::SignatureAndChecksum"]],["impl Freeze for Error",1,["transaction_signing::error::Error"]],["impl Freeze for SufficientContent",1,["transaction_signing::SufficientContent"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/marker/trait.Send.js b/rustdocs/implementors/core/marker/trait.Send.js new file mode 100644 index 0000000000..90d119ad6a --- /dev/null +++ b/rustdocs/implementors/core/marker/trait.Send.js @@ -0,0 +1,15 @@ +(function() {var implementors = { +"db_handling":[["impl Send for TrDbCold",1,["db_handling::db_transactions::TrDbCold"]],["impl Send for TrDbHot",1,["db_handling::db_transactions::TrDbHot"]],["impl Send for TrDbColdStub",1,["db_handling::db_transactions::TrDbColdStub"]],["impl Send for TrDbColdSign",1,["db_handling::db_transactions::TrDbColdSign"]],["impl Send for TrDbColdSignOne",1,["db_handling::db_transactions::TrDbColdSignOne"]],["impl Send for SignContent",1,["db_handling::db_transactions::SignContent"]],["impl Send for SpecsInvariants",1,["db_handling::helpers::SpecsInvariants"]],["impl Send for SignaturesBulk",1,["db_handling::identities::SignaturesBulk"]],["impl Send for SignaturesBulkV1",1,["db_handling::identities::SignaturesBulkV1"]],["impl Send for DynamicDerivationTransaction",1,["db_handling::identities::DynamicDerivationTransaction"]],["impl Send for TransactionBulk",1,["db_handling::identities::TransactionBulk"]],["impl Send for TransactionBulkV1",1,["db_handling::identities::TransactionBulkV1"]],["impl Send for ExportAddrs",1,["db_handling::identities::ExportAddrs"]],["impl Send for ExportAddrsV1",1,["db_handling::identities::ExportAddrsV1"]],["impl Send for ExportAddrsV2",1,["db_handling::identities::ExportAddrsV2"]],["impl Send for VaultFeatures",1,["db_handling::identities::VaultFeatures"]],["impl Send for SeedInfo",1,["db_handling::identities::SeedInfo"]],["impl Send for AddrInfo",1,["db_handling::identities::AddrInfo"]],["impl Send for DerivationCheck",1,["db_handling::identities::DerivationCheck"]],["impl Send for SeedDraft",1,["db_handling::interface_signer::SeedDraft"]],["impl Send for Error",1,["db_handling::error::Error"]]], +"defaults":[["impl Send for Error",1,["defaults::error::Error"]]], +"definitions":[["impl Send for Encryption",1,["definitions::crypto::Encryption"]],["impl Send for SufficientCrypto",1,["definitions::crypto::SufficientCrypto"]],["impl Send for DangerRecord",1,["definitions::danger::DangerRecord"]],["impl Send for Error",1,["definitions::error::Error"]],["impl Send for TransferContent",1,["definitions::error::TransferContent"]],["impl Send for MetadataError",1,["definitions::error::MetadataError"]],["impl Send for Wasm",1,["definitions::error_active::Wasm"]],["impl Send for Check",1,["definitions::error_active::Check"]],["impl Send for GeneralVerifierForContent",1,["definitions::error_signer::GeneralVerifierForContent"]],["impl Send for ParserError",1,["definitions::error_signer::ParserError"]],["impl Send for ParserDecodingError",1,["definitions::error_signer::ParserDecodingError"]],["impl Send for ParserMetadataError",1,["definitions::error_signer::ParserMetadataError"]],["impl Send for IdenticonStyle",1,["definitions::helpers::IdenticonStyle"]],["impl Send for MetaValuesDisplay",1,["definitions::history::MetaValuesDisplay"]],["impl Send for MetaValuesExport",1,["definitions::history::MetaValuesExport"]],["impl Send for NetworkSpecsDisplay",1,["definitions::history::NetworkSpecsDisplay"]],["impl Send for NetworkSpecsExport",1,["definitions::history::NetworkSpecsExport"]],["impl Send for NetworkVerifierDisplay",1,["definitions::history::NetworkVerifierDisplay"]],["impl Send for TypesDisplay",1,["definitions::history::TypesDisplay"]],["impl Send for TypesExport",1,["definitions::history::TypesExport"]],["impl Send for IdentityHistory",1,["definitions::history::IdentityHistory"]],["impl Send for SignDisplay",1,["definitions::history::SignDisplay"]],["impl Send for SignMessageDisplay",1,["definitions::history::SignMessageDisplay"]],["impl Send for Event",1,["definitions::history::Event"]],["impl Send for Entry",1,["definitions::history::Entry"]],["impl Send for NetworkSpecsKey",1,["definitions::keyring::NetworkSpecsKey"]],["impl Send for VerifierKey",1,["definitions::keyring::VerifierKey"]],["impl Send for AddressKey",1,["definitions::keyring::AddressKey"]],["impl Send for MetaKey",1,["definitions::keyring::MetaKey"]],["impl Send for MetaKeyPrefix",1,["definitions::keyring::MetaKeyPrefix"]],["impl Send for Order",1,["definitions::keyring::Order"]],["impl Send for AddressBookKey",1,["definitions::keyring::AddressBookKey"]],["impl Send for MetaInfo",1,["definitions::metadata::MetaInfo"]],["impl Send for MetaValues",1,["definitions::metadata::MetaValues"]],["impl Send for MetaSetElement",1,["definitions::metadata::MetaSetElement"]],["impl Send for AddressBookEntry",1,["definitions::metadata::AddressBookEntry"]],["impl Send for MetaHistoryEntry",1,["definitions::metadata::MetaHistoryEntry"]],["impl Send for OrderedNetworkSpecs",1,["definitions::network_specs::OrderedNetworkSpecs"]],["impl Send for NetworkSpecs",1,["definitions::network_specs::NetworkSpecs"]],["impl Send for ShortSpecs",1,["definitions::network_specs::ShortSpecs"]],["impl Send for NetworkProperties",1,["definitions::network_specs::NetworkProperties"]],["impl Send for Verifier",1,["definitions::network_specs::Verifier"]],["impl Send for VerifierValue",1,["definitions::network_specs::VerifierValue"]],["impl Send for CurrentVerifier",1,["definitions::network_specs::CurrentVerifier"]],["impl Send for ValidCurrentVerifier",1,["definitions::network_specs::ValidCurrentVerifier"]],["impl Send for ContentLoadMeta",1,["definitions::qr_transfers::ContentLoadMeta"]],["impl Send for ContentAddSpecs",1,["definitions::qr_transfers::ContentAddSpecs"]],["impl Send for ContentLoadTypes",1,["definitions::qr_transfers::ContentLoadTypes"]],["impl Send for TypeEntry",1,["definitions::types::TypeEntry"]],["impl Send for Description",1,["definitions::types::Description"]],["impl Send for EnumVariant",1,["definitions::types::EnumVariant"]],["impl Send for EnumVariantType",1,["definitions::types::EnumVariantType"]],["impl Send for StructField",1,["definitions::types::StructField"]],["impl Send for AddressDetails",1,["definitions::users::AddressDetails"]],["impl Send for SeedNameWithIdenticon",1,["definitions::navigation::SeedNameWithIdenticon"]],["impl Send for TransactionSignAction",1,["definitions::navigation::TransactionSignAction"]],["impl Send for TransactionAction",1,["definitions::navigation::TransactionAction"]],["impl Send for StubNav",1,["definitions::navigation::StubNav"]],["impl Send for FooterButton",1,["definitions::navigation::FooterButton"]],["impl Send for RightButton",1,["definitions::navigation::RightButton"]],["impl Send for ScreenNameType",1,["definitions::navigation::ScreenNameType"]],["impl Send for ShieldAlert",1,["definitions::navigation::ShieldAlert"]],["impl Send for AlertData",1,["definitions::navigation::AlertData"]],["impl Send for ActionResult",1,["definitions::navigation::ActionResult"]],["impl Send for LogScreenEntry",1,["definitions::navigation::LogScreenEntry"]],["impl Send for ScreenData",1,["definitions::navigation::ScreenData"]],["impl Send for MKeysCard",1,["definitions::navigation::MKeysCard"]],["impl Send for MKeysNew",1,["definitions::navigation::MKeysNew"]],["impl Send for MKeyAndNetworkCard",1,["definitions::navigation::MKeyAndNetworkCard"]],["impl Send for MNetworkCard",1,["definitions::navigation::MNetworkCard"]],["impl Send for MSettings",1,["definitions::navigation::MSettings"]],["impl Send for History",1,["definitions::navigation::History"]],["impl Send for MLog",1,["definitions::navigation::MLog"]],["impl Send for MEventMaybeDecoded",1,["definitions::navigation::MEventMaybeDecoded"]],["impl Send for MLogDetails",1,["definitions::navigation::MLogDetails"]],["impl Send for TransactionType",1,["definitions::navigation::TransactionType"]],["impl Send for TransactionCard",1,["definitions::navigation::TransactionCard"]],["impl Send for BananaSplitRecoveryResult",1,["definitions::navigation::BananaSplitRecoveryResult"]],["impl Send for DecodeSequenceResult",1,["definitions::navigation::DecodeSequenceResult"]],["impl Send for TransactionCardSet",1,["definitions::navigation::TransactionCardSet"]],["impl Send for MTransaction",1,["definitions::navigation::MTransaction"]],["impl Send for MSignedTransaction",1,["definitions::navigation::MSignedTransaction"]],["impl Send for SeedNameCard",1,["definitions::navigation::SeedNameCard"]],["impl Send for MSeeds",1,["definitions::navigation::MSeeds"]],["impl Send for MKeyDetails",1,["definitions::navigation::MKeyDetails"]],["impl Send for MNewSeed",1,["definitions::navigation::MNewSeed"]],["impl Send for MRecoverSeedName",1,["definitions::navigation::MRecoverSeedName"]],["impl Send for MRecoverSeedPhrase",1,["definitions::navigation::MRecoverSeedPhrase"]],["impl Send for DerivationCheck",1,["definitions::navigation::DerivationCheck"]],["impl Send for Address",1,["definitions::navigation::Address"]],["impl Send for MAddressCard",1,["definitions::navigation::MAddressCard"]],["impl Send for DerivationDestination",1,["definitions::navigation::DerivationDestination"]],["impl Send for MDeriveKey",1,["definitions::navigation::MDeriveKey"]],["impl Send for MVerifierDetails",1,["definitions::navigation::MVerifierDetails"]],["impl Send for MVerifier",1,["definitions::navigation::MVerifier"]],["impl Send for MMetadataRecord",1,["definitions::navigation::MMetadataRecord"]],["impl Send for MNetworkDetails",1,["definitions::navigation::MNetworkDetails"]],["impl Send for MRawKey",1,["definitions::navigation::MRawKey"]],["impl Send for MSignSufficientCrypto",1,["definitions::navigation::MSignSufficientCrypto"]],["impl Send for MKeyDetailsMulti",1,["definitions::navigation::MKeyDetailsMulti"]],["impl Send for MMNetwork",1,["definitions::navigation::MMNetwork"]],["impl Send for MManageNetworks",1,["definitions::navigation::MManageNetworks"]],["impl Send for ExportedSet",1,["definitions::navigation::ExportedSet"]],["impl Send for PathAndNetwork",1,["definitions::navigation::PathAndNetwork"]],["impl Send for MSCContent",1,["definitions::navigation::MSCContent"]],["impl Send for QrData",1,["definitions::navigation::QrData"]],["impl Send for MSufficientCryptoReady",1,["definitions::navigation::MSufficientCryptoReady"]],["impl Send for DerivationEntry",1,["definitions::navigation::DerivationEntry"]],["impl Send for DerivationPack",1,["definitions::navigation::DerivationPack"]],["impl Send for MBackup",1,["definitions::navigation::MBackup"]],["impl Send for MSeedMenu",1,["definitions::navigation::MSeedMenu"]],["impl Send for MNewSeedBackup",1,["definitions::navigation::MNewSeedBackup"]],["impl Send for Network",1,["definitions::navigation::Network"]],["impl Send for MNetworkMenu",1,["definitions::navigation::MNetworkMenu"]],["impl Send for MPasswordConfirm",1,["definitions::navigation::MPasswordConfirm"]],["impl Send for MSignatureReady",1,["definitions::navigation::MSignatureReady"]],["impl Send for MEnterPassword",1,["definitions::navigation::MEnterPassword"]],["impl Send for MLogRight",1,["definitions::navigation::MLogRight"]],["impl Send for MMMNetwork",1,["definitions::navigation::MMMNetwork"]],["impl Send for MManageMetadata",1,["definitions::navigation::MManageMetadata"]],["impl Send for MTypesInfo",1,["definitions::navigation::MTypesInfo"]],["impl Send for ModalData",1,["definitions::navigation::ModalData"]],["impl Send for MSCCall",1,["definitions::navigation::MSCCall"]],["impl Send for MSCCurrency",1,["definitions::navigation::MSCCurrency"]],["impl Send for MSCEnumVariantName",1,["definitions::navigation::MSCEnumVariantName"]],["impl Send for MSCEraMortal",1,["definitions::navigation::MSCEraMortal"]],["impl Send for MSCFieldName",1,["definitions::navigation::MSCFieldName"]],["impl Send for MSCFieldNumber",1,["definitions::navigation::MSCFieldNumber"]],["impl Send for Identicon",1,["definitions::navigation::Identicon"]],["impl Send for MSCId",1,["definitions::navigation::MSCId"]],["impl Send for MSCNameVersion",1,["definitions::navigation::MSCNameVersion"]],["impl Send for MSCNetworkInfo",1,["definitions::navigation::MSCNetworkInfo"]],["impl Send for DDPreview",1,["definitions::navigation::DDPreview"]],["impl Send for DDKeySet",1,["definitions::navigation::DDKeySet"]],["impl Send for DDDetail",1,["definitions::navigation::DDDetail"]],["impl Send for MSCTip",1,["definitions::navigation::MSCTip"]],["impl Send for MSCTxSpecPlain",1,["definitions::navigation::MSCTxSpecPlain"]],["impl Send for MKeysInfoExport",1,["definitions::navigation::MKeysInfoExport"]],["impl Send for Card",1,["definitions::navigation::Card"]],["impl Send for SeedKeysPreview",1,["definitions::derivations::SeedKeysPreview"]],["impl Send for DerivedKeyPreview",1,["definitions::derivations::DerivedKeyPreview"]],["impl Send for DerivedKeyStatus",1,["definitions::derivations::DerivedKeyStatus"]],["impl Send for DerivedKeyError",1,["definitions::derivations::DerivedKeyError"]],["impl Send for DynamicDerivationsRequest",1,["definitions::dynamic_derivations::DynamicDerivationsRequest"]],["impl Send for DynamicDerivationsAddressRequestV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressRequestV1"]],["impl Send for DynamicDerivationsRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationsRequestInfo"]],["impl Send for DynamicDerivationRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationRequestInfo"]],["impl Send for DynamicDerivationsAddressResponse",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponse"]],["impl Send for DynamicDerivationsAddressResponseV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponseV1"]],["impl Send for DynamicDerivationsResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationsResponseInfo"]],["impl Send for DynamicDerivationResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationResponseInfo"]],["impl Send for SchemaVersion",1,["definitions::schema_version::SchemaVersion"]]], +"generate_message":[["impl Send for FetchedInfo",1,["generate_message::fetch_metadata::FetchedInfo"]],["impl Send for FetchedInfoWithNetworkSpecs",1,["generate_message::fetch_metadata::FetchedInfoWithNetworkSpecs"]],["impl Send for Write",1,["generate_message::helpers::Write"]],["impl Send for MetaValuesStamped",1,["generate_message::helpers::MetaValuesStamped"]],["impl Send for SortedMetaValues",1,["generate_message::helpers::SortedMetaValues"]],["impl Send for MetaShortCut",1,["generate_message::helpers::MetaShortCut"]],["impl Send for MetaFetched",1,["generate_message::helpers::MetaFetched"]],["impl Send for TokenFetch",1,["generate_message::interpret_specs::TokenFetch"]],["impl Send for Cli",1,["generate_message::parser::Cli"]],["impl Send for Command",1,["generate_message::parser::Command"]],["impl Send for Show",1,["generate_message::parser::Show"]],["impl Send for InstructionMeta",1,["generate_message::parser::InstructionMeta"]],["impl Send for InstructionSpecs",1,["generate_message::parser::InstructionSpecs"]],["impl Send for ContentArgs",1,["generate_message::parser::ContentArgs"]],["impl Send for Content",1,["generate_message::parser::Content"]],["impl Send for Set",1,["generate_message::parser::Set"]],["impl Send for SetFlags",1,["generate_message::parser::SetFlags"]],["impl Send for Make",1,["generate_message::parser::Make"]],["impl Send for Goal",1,["generate_message::parser::Goal"]],["impl Send for Verifier",1,["generate_message::parser::Verifier"]],["impl Send for Crypto",1,["generate_message::parser::Crypto"]],["impl Send for Signature",1,["generate_message::parser::Signature"]],["impl Send for Sufficient",1,["generate_message::parser::Sufficient"]],["impl Send for Msg",1,["generate_message::parser::Msg"]],["impl Send for Remove",1,["generate_message::parser::Remove"]],["impl Send for Derivations",1,["generate_message::parser::Derivations"]],["impl Send for Override",1,["generate_message::parser::Override"]],["impl Send for Token",1,["generate_message::parser::Token"]],["impl !Send for Error",1,["generate_message::error::Error"]]], +"navigator":[["impl Send for Error",1,["navigator::error::Error"]],["impl Send for Action",1,["navigator::actions::Action"]],["impl Send for Alert",1,["navigator::alerts::Alert"]],["impl Send for Modal",1,["navigator::modals::Modal"]],["impl Send for Screen",1,["navigator::screens::Screen"]],["impl Send for SpecialtyKeysState",1,["navigator::screens::SpecialtyKeysState"]],["impl Send for KeysState",1,["navigator::screens::KeysState"]],["impl Send for AddressState",1,["navigator::screens::AddressState"]],["impl Send for AddressStateMulti",1,["navigator::screens::AddressStateMulti"]],["impl Send for DeriveState",1,["navigator::screens::DeriveState"]],["impl Send for SufficientCryptoState",1,["navigator::screens::SufficientCryptoState"]],["impl Send for RecoverSeedPhraseState",1,["navigator::screens::RecoverSeedPhraseState"]],["impl Send for EnteredInfo",1,["navigator::screens::EnteredInfo"]],["impl Send for STATE",1,["navigator::STATE"]]], +"parser":[["impl Send for ParserCard",1,["parser::cards::ParserCard"]],["impl Send for OutputCard",1,["parser::decoding_commons::OutputCard"]],["impl<T> Send for CutCompact<T>where\n T: Send,",1,["parser::decoding_commons::CutCompact"]],["impl Send for Error",1,["parser::error::Error"]],["impl<'a> Send for OlderMeta<'a>",1,["parser::method::OlderMeta"]],["impl<'a> Send for MetadataBundle<'a>",1,["parser::MetadataBundle"]]], +"printing_balance":[["impl Send for PrettyOutput",1,["printing_balance::PrettyOutput"]]], +"qr_reader_pc":[["impl Send for CameraSettings",1,["qr_reader_pc::CameraSettings"]]], +"qr_reader_phone":[["impl Send for Error",1,["qr_reader_phone::error::Error"]],["impl Send for Fountain",1,["qr_reader_phone::process_payload::Fountain"]],["impl Send for LegacyMulti",1,["qr_reader_phone::process_payload::LegacyMulti"]],["impl Send for BananaRecovery",1,["qr_reader_phone::process_payload::BananaRecovery"]],["impl Send for Element",1,["qr_reader_phone::process_payload::Element"]],["impl Send for InProgress",1,["qr_reader_phone::process_payload::InProgress"]],["impl Send for Ready",1,["qr_reader_phone::process_payload::Ready"]]], +"qrcode_static":[["impl Send for DataType",1,["qrcode_static::DataType"]]], +"signer":[["impl Send for ErrorDisplayed",1,["signer::ErrorDisplayed"]],["impl Send for QrSequenceDecodeError",1,["signer::QrSequenceDecodeError"]]], +"transaction_parsing":[["impl Send for InfoPassedCrypto",1,["transaction_parsing::check_signature::InfoPassedCrypto"]],["impl Send for Error",1,["transaction_parsing::error::Error"]]], +"transaction_signing":[["impl Send for SignatureType",1,["transaction_signing::sign_transaction::SignatureType"]],["impl Send for SignatureAndChecksum",1,["transaction_signing::sign_transaction::SignatureAndChecksum"]],["impl Send for Error",1,["transaction_signing::error::Error"]],["impl Send for SufficientContent",1,["transaction_signing::SufficientContent"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/marker/trait.StructuralEq.js b/rustdocs/implementors/core/marker/trait.StructuralEq.js new file mode 100644 index 0000000000..0cf580d86b --- /dev/null +++ b/rustdocs/implementors/core/marker/trait.StructuralEq.js @@ -0,0 +1,7 @@ +(function() {var implementors = { +"db_handling":[["impl StructuralEq for ExportAddrs"],["impl StructuralEq for ExportAddrsV2"],["impl StructuralEq for VaultFeatures"],["impl StructuralEq for AddrInfo"],["impl StructuralEq for SeedInfo"],["impl StructuralEq for ExportAddrsV1"]], +"definitions":[["impl StructuralEq for MetaValuesDisplay"],["impl StructuralEq for MVerifierDetails"],["impl StructuralEq for MRecoverSeedPhrase"],["impl StructuralEq for MEventMaybeDecoded"],["impl StructuralEq for MTypesInfo"],["impl StructuralEq for DerivedKeyError"],["impl StructuralEq for ShortSpecs"],["impl StructuralEq for AddressBookEntry"],["impl StructuralEq for MPasswordConfirm"],["impl StructuralEq for MVerifier"],["impl StructuralEq for DynamicDerivationsRequest"],["impl StructuralEq for Order"],["impl StructuralEq for ShieldAlert"],["impl StructuralEq for ActionResult"],["impl StructuralEq for MKeyDetails"],["impl StructuralEq for TransactionAction"],["impl StructuralEq for MLogDetails"],["impl StructuralEq for MEnterPassword"],["impl StructuralEq for TypeEntry"],["impl StructuralEq for MSCCall"],["impl StructuralEq for MRawKey"],["impl StructuralEq for MSignedTransaction"],["impl StructuralEq for TransactionCardSet"],["impl StructuralEq for RightButton"],["impl StructuralEq for Identicon"],["impl StructuralEq for DecodeSequenceResult"],["impl StructuralEq for PathAndNetwork"],["impl StructuralEq for MetaValuesExport"],["impl StructuralEq for MMetadataRecord"],["impl StructuralEq for MNewSeedBackup"],["impl StructuralEq for IdentityHistory"],["impl StructuralEq for QrData"],["impl StructuralEq for ValidCurrentVerifier"],["impl StructuralEq for DerivedKeyStatus"],["impl StructuralEq for MManageNetworks"],["impl StructuralEq for MSCNameVersion"],["impl StructuralEq for DynamicDerivationsResponseInfo"],["impl StructuralEq for MLogRight"],["impl StructuralEq for NetworkVerifierDisplay"],["impl StructuralEq for Card"],["impl StructuralEq for MetaHistoryEntry"],["impl StructuralEq for TransactionCard"],["impl StructuralEq for History"],["impl StructuralEq for DDDetail"],["impl StructuralEq for SeedNameWithIdenticon"],["impl StructuralEq for MBackup"],["impl StructuralEq for MSettings"],["impl StructuralEq for DerivationCheck"],["impl StructuralEq for MKeysCard"],["impl StructuralEq for Verifier"],["impl StructuralEq for MKeyDetailsMulti"],["impl StructuralEq for NetworkSpecsDisplay"],["impl StructuralEq for MSCCurrency"],["impl StructuralEq for MNetworkMenu"],["impl StructuralEq for DynamicDerivationsAddressRequestV1"],["impl StructuralEq for DynamicDerivationsAddressResponseV1"],["impl StructuralEq for DerivedKeyPreview"],["impl StructuralEq for MTransaction"],["impl StructuralEq for DDKeySet"],["impl StructuralEq for SufficientCrypto"],["impl StructuralEq for MLog"],["impl StructuralEq for NetworkSpecsKey"],["impl StructuralEq for MSufficientCryptoReady"],["impl StructuralEq for Address"],["impl StructuralEq for MSeeds"],["impl StructuralEq for ScreenNameType"],["impl StructuralEq for Description"],["impl StructuralEq for MetaValues"],["impl StructuralEq for MRecoverSeedName"],["impl StructuralEq for MNewSeed"],["impl StructuralEq for MSCFieldNumber"],["impl StructuralEq for OrderedNetworkSpecs"],["impl StructuralEq for MSCFieldName"],["impl StructuralEq for AddressKey"],["impl StructuralEq for MSeedMenu"],["impl StructuralEq for StructField"],["impl StructuralEq for MSCContent"],["impl StructuralEq for Event"],["impl StructuralEq for TransactionSignAction"],["impl StructuralEq for FooterButton"],["impl StructuralEq for MSCTip"],["impl StructuralEq for DynamicDerivationResponseInfo"],["impl StructuralEq for AlertData"],["impl StructuralEq for CurrentVerifier"],["impl StructuralEq for MKeysNew"],["impl StructuralEq for StubNav"],["impl StructuralEq for MKeyAndNetworkCard"],["impl StructuralEq for ModalData"],["impl StructuralEq for MSCEraMortal"],["impl StructuralEq for MSignSufficientCrypto"],["impl StructuralEq for SeedKeysPreview"],["impl StructuralEq for MSCTxSpecPlain"],["impl StructuralEq for SignDisplay"],["impl StructuralEq for NetworkSpecsExport"],["impl StructuralEq for SeedNameCard"],["impl StructuralEq for EnumVariant"],["impl StructuralEq for MMMNetwork"],["impl StructuralEq for MNetworkCard"],["impl StructuralEq for MSignatureReady"],["impl StructuralEq for MKeysInfoExport"],["impl StructuralEq for NetworkSpecs"],["impl StructuralEq for DerivationDestination"],["impl StructuralEq for MSCNetworkInfo"],["impl StructuralEq for ScreenData"],["impl StructuralEq for MNetworkDetails"],["impl StructuralEq for ExportedSet"],["impl StructuralEq for TransactionType"],["impl StructuralEq for DynamicDerivationRequestInfo"],["impl StructuralEq for LogScreenEntry"],["impl StructuralEq for MSCEnumVariantName"],["impl StructuralEq for DerivationPack"],["impl StructuralEq for MSCId"],["impl StructuralEq for DerivationEntry"],["impl StructuralEq for Encryption"],["impl StructuralEq for SignMessageDisplay"],["impl StructuralEq for TypesExport"],["impl StructuralEq for DynamicDerivationsAddressResponse"],["impl StructuralEq for TypesDisplay"],["impl StructuralEq for MetaInfo"],["impl StructuralEq for VerifierValue"],["impl StructuralEq for MMNetwork"],["impl StructuralEq for AddressDetails"],["impl StructuralEq for VerifierKey"],["impl StructuralEq for MAddressCard"],["impl StructuralEq for DynamicDerivationsRequestInfo"],["impl StructuralEq for Entry"],["impl StructuralEq for MManageMetadata"],["impl StructuralEq for BananaSplitRecoveryResult"],["impl StructuralEq for Network"],["impl StructuralEq for MDeriveKey"],["impl StructuralEq for NetworkProperties"],["impl StructuralEq for EnumVariantType"],["impl StructuralEq for DDPreview"]], +"navigator":[["impl StructuralEq for Modal"],["impl StructuralEq for Action"],["impl StructuralEq for Alert"]], +"qr_reader_phone":[["impl StructuralEq for Element"],["impl StructuralEq for LegacyMulti"],["impl StructuralEq for Fountain"]], +"transaction_signing":[["impl StructuralEq for SignatureType"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/marker/trait.StructuralPartialEq.js b/rustdocs/implementors/core/marker/trait.StructuralPartialEq.js new file mode 100644 index 0000000000..87147c488f --- /dev/null +++ b/rustdocs/implementors/core/marker/trait.StructuralPartialEq.js @@ -0,0 +1,7 @@ +(function() {var implementors = { +"db_handling":[["impl StructuralPartialEq for ExportAddrsV2"],["impl StructuralPartialEq for ExportAddrs"],["impl StructuralPartialEq for AddrInfo"],["impl StructuralPartialEq for SeedInfo"],["impl StructuralPartialEq for ExportAddrsV1"],["impl StructuralPartialEq for VaultFeatures"]], +"definitions":[["impl StructuralPartialEq for TypeEntry"],["impl StructuralPartialEq for AlertData"],["impl StructuralPartialEq for DecodeSequenceResult"],["impl StructuralPartialEq for TransactionAction"],["impl StructuralPartialEq for VerifierValue"],["impl StructuralPartialEq for ShieldAlert"],["impl StructuralPartialEq for MetaValues"],["impl StructuralPartialEq for SufficientCrypto"],["impl StructuralPartialEq for MTypesInfo"],["impl StructuralPartialEq for DynamicDerivationsRequestInfo"],["impl StructuralPartialEq for NetworkSpecsDisplay"],["impl StructuralPartialEq for DynamicDerivationsAddressResponseV1"],["impl StructuralPartialEq for DynamicDerivationsAddressRequestV1"],["impl StructuralPartialEq for MSignatureReady"],["impl StructuralPartialEq for MSCFieldNumber"],["impl StructuralPartialEq for History"],["impl StructuralPartialEq for MLog"],["impl StructuralPartialEq for ModalData"],["impl StructuralPartialEq for EnumVariant"],["impl StructuralPartialEq for MSeeds"],["impl StructuralPartialEq for StructField"],["impl StructuralPartialEq for MBackup"],["impl StructuralPartialEq for Event"],["impl StructuralPartialEq for DDKeySet"],["impl StructuralPartialEq for DerivationDestination"],["impl StructuralPartialEq for MEnterPassword"],["impl StructuralPartialEq for ShortSpecs"],["impl StructuralPartialEq for MSignSufficientCrypto"],["impl StructuralPartialEq for GeneralVerifierForContent"],["impl StructuralPartialEq for DerivedKeyStatus"],["impl StructuralPartialEq for NetworkProperties"],["impl StructuralPartialEq for RightButton"],["impl StructuralPartialEq for TypesDisplay"],["impl StructuralPartialEq for MMNetwork"],["impl StructuralPartialEq for SeedNameWithIdenticon"],["impl StructuralPartialEq for MRecoverSeedPhrase"],["impl StructuralPartialEq for Network"],["impl StructuralPartialEq for MManageMetadata"],["impl StructuralPartialEq for MMetadataRecord"],["impl StructuralPartialEq for MSCTxSpecPlain"],["impl StructuralPartialEq for MKeysCard"],["impl StructuralPartialEq for DynamicDerivationsResponseInfo"],["impl StructuralPartialEq for MSCContent"],["impl StructuralPartialEq for Encryption"],["impl StructuralPartialEq for MPasswordConfirm"],["impl StructuralPartialEq for MVerifierDetails"],["impl StructuralPartialEq for MSufficientCryptoReady"],["impl StructuralPartialEq for MSeedMenu"],["impl StructuralPartialEq for QrData"],["impl StructuralPartialEq for DerivedKeyPreview"],["impl StructuralPartialEq for MNewSeedBackup"],["impl StructuralPartialEq for Description"],["impl StructuralPartialEq for MLogDetails"],["impl StructuralPartialEq for MAddressCard"],["impl StructuralPartialEq for FooterButton"],["impl StructuralPartialEq for NetworkVerifierDisplay"],["impl StructuralPartialEq for MSCNetworkInfo"],["impl StructuralPartialEq for DDPreview"],["impl StructuralPartialEq for NetworkSpecsKey"],["impl StructuralPartialEq for MSCCurrency"],["impl StructuralPartialEq for SeedKeysPreview"],["impl StructuralPartialEq for DynamicDerivationRequestInfo"],["impl StructuralPartialEq for VerifierKey"],["impl StructuralPartialEq for TransactionSignAction"],["impl StructuralPartialEq for AddressDetails"],["impl StructuralPartialEq for MSignedTransaction"],["impl StructuralPartialEq for MTransaction"],["impl StructuralPartialEq for MNetworkDetails"],["impl StructuralPartialEq for SignDisplay"],["impl StructuralPartialEq for MSCId"],["impl StructuralPartialEq for MKeysInfoExport"],["impl StructuralPartialEq for MetadataError"],["impl StructuralPartialEq for MetaValuesDisplay"],["impl StructuralPartialEq for TypesExport"],["impl StructuralPartialEq for MKeysNew"],["impl StructuralPartialEq for TransactionCardSet"],["impl StructuralPartialEq for DDDetail"],["impl StructuralPartialEq for Address"],["impl StructuralPartialEq for MSCNameVersion"],["impl StructuralPartialEq for MSCEnumVariantName"],["impl StructuralPartialEq for ExportedSet"],["impl StructuralPartialEq for DynamicDerivationsRequest"],["impl StructuralPartialEq for DerivationEntry"],["impl StructuralPartialEq for MSCFieldName"],["impl StructuralPartialEq for AddressBookEntry"],["impl StructuralPartialEq for MetaValuesExport"],["impl StructuralPartialEq for MKeyDetailsMulti"],["impl StructuralPartialEq for ScreenNameType"],["impl StructuralPartialEq for MetaHistoryEntry"],["impl StructuralPartialEq for CurrentVerifier"],["impl StructuralPartialEq for MSettings"],["impl StructuralPartialEq for MSCCall"],["impl StructuralPartialEq for DerivedKeyError"],["impl StructuralPartialEq for DerivationPack"],["impl StructuralPartialEq for TransactionType"],["impl StructuralPartialEq for Entry"],["impl StructuralPartialEq for MLogRight"],["impl StructuralPartialEq for MNetworkCard"],["impl StructuralPartialEq for MNewSeed"],["impl StructuralPartialEq for LogScreenEntry"],["impl StructuralPartialEq for OrderedNetworkSpecs"],["impl StructuralPartialEq for MManageNetworks"],["impl StructuralPartialEq for DynamicDerivationResponseInfo"],["impl StructuralPartialEq for MEventMaybeDecoded"],["impl StructuralPartialEq for Identicon"],["impl StructuralPartialEq for MKeyDetails"],["impl StructuralPartialEq for NetworkSpecsExport"],["impl StructuralPartialEq for TransactionCard"],["impl StructuralPartialEq for NetworkSpecs"],["impl StructuralPartialEq for Order"],["impl StructuralPartialEq for SeedNameCard"],["impl StructuralPartialEq for MDeriveKey"],["impl StructuralPartialEq for ScreenData"],["impl StructuralPartialEq for Card"],["impl StructuralPartialEq for MNetworkMenu"],["impl StructuralPartialEq for MRecoverSeedName"],["impl StructuralPartialEq for DynamicDerivationsAddressResponse"],["impl StructuralPartialEq for Verifier"],["impl StructuralPartialEq for AddressKey"],["impl StructuralPartialEq for ValidCurrentVerifier"],["impl StructuralPartialEq for MetaInfo"],["impl StructuralPartialEq for MVerifier"],["impl StructuralPartialEq for MSCTip"],["impl StructuralPartialEq for DerivationCheck"],["impl StructuralPartialEq for MKeyAndNetworkCard"],["impl StructuralPartialEq for IdentityHistory"],["impl StructuralPartialEq for PathAndNetwork"],["impl StructuralPartialEq for MSCEraMortal"],["impl StructuralPartialEq for StubNav"],["impl StructuralPartialEq for MMMNetwork"],["impl StructuralPartialEq for MRawKey"],["impl StructuralPartialEq for BananaSplitRecoveryResult"],["impl StructuralPartialEq for SignMessageDisplay"],["impl StructuralPartialEq for ActionResult"],["impl StructuralPartialEq for EnumVariantType"]], +"navigator":[["impl StructuralPartialEq for Alert"],["impl StructuralPartialEq for Modal"],["impl StructuralPartialEq for Action"]], +"qr_reader_phone":[["impl StructuralPartialEq for LegacyMulti"],["impl StructuralPartialEq for Fountain"],["impl StructuralPartialEq for Element"]], +"transaction_signing":[["impl StructuralPartialEq for SignatureType"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/marker/trait.Sync.js b/rustdocs/implementors/core/marker/trait.Sync.js new file mode 100644 index 0000000000..147c809b8e --- /dev/null +++ b/rustdocs/implementors/core/marker/trait.Sync.js @@ -0,0 +1,15 @@ +(function() {var implementors = { +"db_handling":[["impl Sync for TrDbCold",1,["db_handling::db_transactions::TrDbCold"]],["impl Sync for TrDbHot",1,["db_handling::db_transactions::TrDbHot"]],["impl Sync for TrDbColdStub",1,["db_handling::db_transactions::TrDbColdStub"]],["impl Sync for TrDbColdSign",1,["db_handling::db_transactions::TrDbColdSign"]],["impl Sync for TrDbColdSignOne",1,["db_handling::db_transactions::TrDbColdSignOne"]],["impl Sync for SignContent",1,["db_handling::db_transactions::SignContent"]],["impl Sync for SpecsInvariants",1,["db_handling::helpers::SpecsInvariants"]],["impl Sync for SignaturesBulk",1,["db_handling::identities::SignaturesBulk"]],["impl Sync for SignaturesBulkV1",1,["db_handling::identities::SignaturesBulkV1"]],["impl Sync for DynamicDerivationTransaction",1,["db_handling::identities::DynamicDerivationTransaction"]],["impl Sync for TransactionBulk",1,["db_handling::identities::TransactionBulk"]],["impl Sync for TransactionBulkV1",1,["db_handling::identities::TransactionBulkV1"]],["impl Sync for ExportAddrs",1,["db_handling::identities::ExportAddrs"]],["impl Sync for ExportAddrsV1",1,["db_handling::identities::ExportAddrsV1"]],["impl Sync for ExportAddrsV2",1,["db_handling::identities::ExportAddrsV2"]],["impl Sync for VaultFeatures",1,["db_handling::identities::VaultFeatures"]],["impl Sync for SeedInfo",1,["db_handling::identities::SeedInfo"]],["impl Sync for AddrInfo",1,["db_handling::identities::AddrInfo"]],["impl Sync for DerivationCheck",1,["db_handling::identities::DerivationCheck"]],["impl Sync for SeedDraft",1,["db_handling::interface_signer::SeedDraft"]],["impl Sync for Error",1,["db_handling::error::Error"]]], +"defaults":[["impl Sync for Error",1,["defaults::error::Error"]]], +"definitions":[["impl Sync for Encryption",1,["definitions::crypto::Encryption"]],["impl Sync for SufficientCrypto",1,["definitions::crypto::SufficientCrypto"]],["impl Sync for DangerRecord",1,["definitions::danger::DangerRecord"]],["impl Sync for Error",1,["definitions::error::Error"]],["impl Sync for TransferContent",1,["definitions::error::TransferContent"]],["impl Sync for MetadataError",1,["definitions::error::MetadataError"]],["impl Sync for Wasm",1,["definitions::error_active::Wasm"]],["impl Sync for Check",1,["definitions::error_active::Check"]],["impl Sync for GeneralVerifierForContent",1,["definitions::error_signer::GeneralVerifierForContent"]],["impl Sync for ParserError",1,["definitions::error_signer::ParserError"]],["impl Sync for ParserDecodingError",1,["definitions::error_signer::ParserDecodingError"]],["impl Sync for ParserMetadataError",1,["definitions::error_signer::ParserMetadataError"]],["impl Sync for IdenticonStyle",1,["definitions::helpers::IdenticonStyle"]],["impl Sync for MetaValuesDisplay",1,["definitions::history::MetaValuesDisplay"]],["impl Sync for MetaValuesExport",1,["definitions::history::MetaValuesExport"]],["impl Sync for NetworkSpecsDisplay",1,["definitions::history::NetworkSpecsDisplay"]],["impl Sync for NetworkSpecsExport",1,["definitions::history::NetworkSpecsExport"]],["impl Sync for NetworkVerifierDisplay",1,["definitions::history::NetworkVerifierDisplay"]],["impl Sync for TypesDisplay",1,["definitions::history::TypesDisplay"]],["impl Sync for TypesExport",1,["definitions::history::TypesExport"]],["impl Sync for IdentityHistory",1,["definitions::history::IdentityHistory"]],["impl Sync for SignDisplay",1,["definitions::history::SignDisplay"]],["impl Sync for SignMessageDisplay",1,["definitions::history::SignMessageDisplay"]],["impl Sync for Event",1,["definitions::history::Event"]],["impl Sync for Entry",1,["definitions::history::Entry"]],["impl Sync for NetworkSpecsKey",1,["definitions::keyring::NetworkSpecsKey"]],["impl Sync for VerifierKey",1,["definitions::keyring::VerifierKey"]],["impl Sync for AddressKey",1,["definitions::keyring::AddressKey"]],["impl Sync for MetaKey",1,["definitions::keyring::MetaKey"]],["impl Sync for MetaKeyPrefix",1,["definitions::keyring::MetaKeyPrefix"]],["impl Sync for Order",1,["definitions::keyring::Order"]],["impl Sync for AddressBookKey",1,["definitions::keyring::AddressBookKey"]],["impl Sync for MetaInfo",1,["definitions::metadata::MetaInfo"]],["impl Sync for MetaValues",1,["definitions::metadata::MetaValues"]],["impl Sync for MetaSetElement",1,["definitions::metadata::MetaSetElement"]],["impl Sync for AddressBookEntry",1,["definitions::metadata::AddressBookEntry"]],["impl Sync for MetaHistoryEntry",1,["definitions::metadata::MetaHistoryEntry"]],["impl Sync for OrderedNetworkSpecs",1,["definitions::network_specs::OrderedNetworkSpecs"]],["impl Sync for NetworkSpecs",1,["definitions::network_specs::NetworkSpecs"]],["impl Sync for ShortSpecs",1,["definitions::network_specs::ShortSpecs"]],["impl Sync for NetworkProperties",1,["definitions::network_specs::NetworkProperties"]],["impl Sync for Verifier",1,["definitions::network_specs::Verifier"]],["impl Sync for VerifierValue",1,["definitions::network_specs::VerifierValue"]],["impl Sync for CurrentVerifier",1,["definitions::network_specs::CurrentVerifier"]],["impl Sync for ValidCurrentVerifier",1,["definitions::network_specs::ValidCurrentVerifier"]],["impl Sync for ContentLoadMeta",1,["definitions::qr_transfers::ContentLoadMeta"]],["impl Sync for ContentAddSpecs",1,["definitions::qr_transfers::ContentAddSpecs"]],["impl Sync for ContentLoadTypes",1,["definitions::qr_transfers::ContentLoadTypes"]],["impl Sync for TypeEntry",1,["definitions::types::TypeEntry"]],["impl Sync for Description",1,["definitions::types::Description"]],["impl Sync for EnumVariant",1,["definitions::types::EnumVariant"]],["impl Sync for EnumVariantType",1,["definitions::types::EnumVariantType"]],["impl Sync for StructField",1,["definitions::types::StructField"]],["impl Sync for AddressDetails",1,["definitions::users::AddressDetails"]],["impl Sync for SeedNameWithIdenticon",1,["definitions::navigation::SeedNameWithIdenticon"]],["impl Sync for TransactionSignAction",1,["definitions::navigation::TransactionSignAction"]],["impl Sync for TransactionAction",1,["definitions::navigation::TransactionAction"]],["impl Sync for StubNav",1,["definitions::navigation::StubNav"]],["impl Sync for FooterButton",1,["definitions::navigation::FooterButton"]],["impl Sync for RightButton",1,["definitions::navigation::RightButton"]],["impl Sync for ScreenNameType",1,["definitions::navigation::ScreenNameType"]],["impl Sync for ShieldAlert",1,["definitions::navigation::ShieldAlert"]],["impl Sync for AlertData",1,["definitions::navigation::AlertData"]],["impl Sync for ActionResult",1,["definitions::navigation::ActionResult"]],["impl Sync for LogScreenEntry",1,["definitions::navigation::LogScreenEntry"]],["impl Sync for ScreenData",1,["definitions::navigation::ScreenData"]],["impl Sync for MKeysCard",1,["definitions::navigation::MKeysCard"]],["impl Sync for MKeysNew",1,["definitions::navigation::MKeysNew"]],["impl Sync for MKeyAndNetworkCard",1,["definitions::navigation::MKeyAndNetworkCard"]],["impl Sync for MNetworkCard",1,["definitions::navigation::MNetworkCard"]],["impl Sync for MSettings",1,["definitions::navigation::MSettings"]],["impl Sync for History",1,["definitions::navigation::History"]],["impl Sync for MLog",1,["definitions::navigation::MLog"]],["impl Sync for MEventMaybeDecoded",1,["definitions::navigation::MEventMaybeDecoded"]],["impl Sync for MLogDetails",1,["definitions::navigation::MLogDetails"]],["impl Sync for TransactionType",1,["definitions::navigation::TransactionType"]],["impl Sync for TransactionCard",1,["definitions::navigation::TransactionCard"]],["impl Sync for BananaSplitRecoveryResult",1,["definitions::navigation::BananaSplitRecoveryResult"]],["impl Sync for DecodeSequenceResult",1,["definitions::navigation::DecodeSequenceResult"]],["impl Sync for TransactionCardSet",1,["definitions::navigation::TransactionCardSet"]],["impl Sync for MTransaction",1,["definitions::navigation::MTransaction"]],["impl Sync for MSignedTransaction",1,["definitions::navigation::MSignedTransaction"]],["impl Sync for SeedNameCard",1,["definitions::navigation::SeedNameCard"]],["impl Sync for MSeeds",1,["definitions::navigation::MSeeds"]],["impl Sync for MKeyDetails",1,["definitions::navigation::MKeyDetails"]],["impl Sync for MNewSeed",1,["definitions::navigation::MNewSeed"]],["impl Sync for MRecoverSeedName",1,["definitions::navigation::MRecoverSeedName"]],["impl Sync for MRecoverSeedPhrase",1,["definitions::navigation::MRecoverSeedPhrase"]],["impl Sync for DerivationCheck",1,["definitions::navigation::DerivationCheck"]],["impl Sync for Address",1,["definitions::navigation::Address"]],["impl Sync for MAddressCard",1,["definitions::navigation::MAddressCard"]],["impl Sync for DerivationDestination",1,["definitions::navigation::DerivationDestination"]],["impl Sync for MDeriveKey",1,["definitions::navigation::MDeriveKey"]],["impl Sync for MVerifierDetails",1,["definitions::navigation::MVerifierDetails"]],["impl Sync for MVerifier",1,["definitions::navigation::MVerifier"]],["impl Sync for MMetadataRecord",1,["definitions::navigation::MMetadataRecord"]],["impl Sync for MNetworkDetails",1,["definitions::navigation::MNetworkDetails"]],["impl Sync for MRawKey",1,["definitions::navigation::MRawKey"]],["impl Sync for MSignSufficientCrypto",1,["definitions::navigation::MSignSufficientCrypto"]],["impl Sync for MKeyDetailsMulti",1,["definitions::navigation::MKeyDetailsMulti"]],["impl Sync for MMNetwork",1,["definitions::navigation::MMNetwork"]],["impl Sync for MManageNetworks",1,["definitions::navigation::MManageNetworks"]],["impl Sync for ExportedSet",1,["definitions::navigation::ExportedSet"]],["impl Sync for PathAndNetwork",1,["definitions::navigation::PathAndNetwork"]],["impl Sync for MSCContent",1,["definitions::navigation::MSCContent"]],["impl Sync for QrData",1,["definitions::navigation::QrData"]],["impl Sync for MSufficientCryptoReady",1,["definitions::navigation::MSufficientCryptoReady"]],["impl Sync for DerivationEntry",1,["definitions::navigation::DerivationEntry"]],["impl Sync for DerivationPack",1,["definitions::navigation::DerivationPack"]],["impl Sync for MBackup",1,["definitions::navigation::MBackup"]],["impl Sync for MSeedMenu",1,["definitions::navigation::MSeedMenu"]],["impl Sync for MNewSeedBackup",1,["definitions::navigation::MNewSeedBackup"]],["impl Sync for Network",1,["definitions::navigation::Network"]],["impl Sync for MNetworkMenu",1,["definitions::navigation::MNetworkMenu"]],["impl Sync for MPasswordConfirm",1,["definitions::navigation::MPasswordConfirm"]],["impl Sync for MSignatureReady",1,["definitions::navigation::MSignatureReady"]],["impl Sync for MEnterPassword",1,["definitions::navigation::MEnterPassword"]],["impl Sync for MLogRight",1,["definitions::navigation::MLogRight"]],["impl Sync for MMMNetwork",1,["definitions::navigation::MMMNetwork"]],["impl Sync for MManageMetadata",1,["definitions::navigation::MManageMetadata"]],["impl Sync for MTypesInfo",1,["definitions::navigation::MTypesInfo"]],["impl Sync for ModalData",1,["definitions::navigation::ModalData"]],["impl Sync for MSCCall",1,["definitions::navigation::MSCCall"]],["impl Sync for MSCCurrency",1,["definitions::navigation::MSCCurrency"]],["impl Sync for MSCEnumVariantName",1,["definitions::navigation::MSCEnumVariantName"]],["impl Sync for MSCEraMortal",1,["definitions::navigation::MSCEraMortal"]],["impl Sync for MSCFieldName",1,["definitions::navigation::MSCFieldName"]],["impl Sync for MSCFieldNumber",1,["definitions::navigation::MSCFieldNumber"]],["impl Sync for Identicon",1,["definitions::navigation::Identicon"]],["impl Sync for MSCId",1,["definitions::navigation::MSCId"]],["impl Sync for MSCNameVersion",1,["definitions::navigation::MSCNameVersion"]],["impl Sync for MSCNetworkInfo",1,["definitions::navigation::MSCNetworkInfo"]],["impl Sync for DDPreview",1,["definitions::navigation::DDPreview"]],["impl Sync for DDKeySet",1,["definitions::navigation::DDKeySet"]],["impl Sync for DDDetail",1,["definitions::navigation::DDDetail"]],["impl Sync for MSCTip",1,["definitions::navigation::MSCTip"]],["impl Sync for MSCTxSpecPlain",1,["definitions::navigation::MSCTxSpecPlain"]],["impl Sync for MKeysInfoExport",1,["definitions::navigation::MKeysInfoExport"]],["impl Sync for Card",1,["definitions::navigation::Card"]],["impl Sync for SeedKeysPreview",1,["definitions::derivations::SeedKeysPreview"]],["impl Sync for DerivedKeyPreview",1,["definitions::derivations::DerivedKeyPreview"]],["impl Sync for DerivedKeyStatus",1,["definitions::derivations::DerivedKeyStatus"]],["impl Sync for DerivedKeyError",1,["definitions::derivations::DerivedKeyError"]],["impl Sync for DynamicDerivationsRequest",1,["definitions::dynamic_derivations::DynamicDerivationsRequest"]],["impl Sync for DynamicDerivationsAddressRequestV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressRequestV1"]],["impl Sync for DynamicDerivationsRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationsRequestInfo"]],["impl Sync for DynamicDerivationRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationRequestInfo"]],["impl Sync for DynamicDerivationsAddressResponse",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponse"]],["impl Sync for DynamicDerivationsAddressResponseV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponseV1"]],["impl Sync for DynamicDerivationsResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationsResponseInfo"]],["impl Sync for DynamicDerivationResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationResponseInfo"]],["impl Sync for SchemaVersion",1,["definitions::schema_version::SchemaVersion"]]], +"generate_message":[["impl Sync for FetchedInfo",1,["generate_message::fetch_metadata::FetchedInfo"]],["impl Sync for FetchedInfoWithNetworkSpecs",1,["generate_message::fetch_metadata::FetchedInfoWithNetworkSpecs"]],["impl Sync for Write",1,["generate_message::helpers::Write"]],["impl Sync for MetaValuesStamped",1,["generate_message::helpers::MetaValuesStamped"]],["impl Sync for SortedMetaValues",1,["generate_message::helpers::SortedMetaValues"]],["impl Sync for MetaShortCut",1,["generate_message::helpers::MetaShortCut"]],["impl Sync for MetaFetched",1,["generate_message::helpers::MetaFetched"]],["impl Sync for TokenFetch",1,["generate_message::interpret_specs::TokenFetch"]],["impl Sync for Cli",1,["generate_message::parser::Cli"]],["impl Sync for Command",1,["generate_message::parser::Command"]],["impl Sync for Show",1,["generate_message::parser::Show"]],["impl Sync for InstructionMeta",1,["generate_message::parser::InstructionMeta"]],["impl Sync for InstructionSpecs",1,["generate_message::parser::InstructionSpecs"]],["impl Sync for ContentArgs",1,["generate_message::parser::ContentArgs"]],["impl Sync for Content",1,["generate_message::parser::Content"]],["impl Sync for Set",1,["generate_message::parser::Set"]],["impl Sync for SetFlags",1,["generate_message::parser::SetFlags"]],["impl Sync for Make",1,["generate_message::parser::Make"]],["impl Sync for Goal",1,["generate_message::parser::Goal"]],["impl Sync for Verifier",1,["generate_message::parser::Verifier"]],["impl Sync for Crypto",1,["generate_message::parser::Crypto"]],["impl Sync for Signature",1,["generate_message::parser::Signature"]],["impl Sync for Sufficient",1,["generate_message::parser::Sufficient"]],["impl Sync for Msg",1,["generate_message::parser::Msg"]],["impl Sync for Remove",1,["generate_message::parser::Remove"]],["impl Sync for Derivations",1,["generate_message::parser::Derivations"]],["impl Sync for Override",1,["generate_message::parser::Override"]],["impl Sync for Token",1,["generate_message::parser::Token"]],["impl !Sync for Error",1,["generate_message::error::Error"]]], +"navigator":[["impl Sync for Error",1,["navigator::error::Error"]],["impl Sync for Action",1,["navigator::actions::Action"]],["impl Sync for Alert",1,["navigator::alerts::Alert"]],["impl Sync for Modal",1,["navigator::modals::Modal"]],["impl Sync for Screen",1,["navigator::screens::Screen"]],["impl Sync for SpecialtyKeysState",1,["navigator::screens::SpecialtyKeysState"]],["impl Sync for KeysState",1,["navigator::screens::KeysState"]],["impl Sync for AddressState",1,["navigator::screens::AddressState"]],["impl Sync for AddressStateMulti",1,["navigator::screens::AddressStateMulti"]],["impl Sync for DeriveState",1,["navigator::screens::DeriveState"]],["impl Sync for SufficientCryptoState",1,["navigator::screens::SufficientCryptoState"]],["impl Sync for RecoverSeedPhraseState",1,["navigator::screens::RecoverSeedPhraseState"]],["impl Sync for EnteredInfo",1,["navigator::screens::EnteredInfo"]],["impl Sync for STATE",1,["navigator::STATE"]]], +"parser":[["impl Sync for ParserCard",1,["parser::cards::ParserCard"]],["impl Sync for OutputCard",1,["parser::decoding_commons::OutputCard"]],["impl<T> Sync for CutCompact<T>where\n T: Sync,",1,["parser::decoding_commons::CutCompact"]],["impl Sync for Error",1,["parser::error::Error"]],["impl<'a> Sync for OlderMeta<'a>",1,["parser::method::OlderMeta"]],["impl<'a> Sync for MetadataBundle<'a>",1,["parser::MetadataBundle"]]], +"printing_balance":[["impl Sync for PrettyOutput",1,["printing_balance::PrettyOutput"]]], +"qr_reader_pc":[["impl Sync for CameraSettings",1,["qr_reader_pc::CameraSettings"]]], +"qr_reader_phone":[["impl Sync for Error",1,["qr_reader_phone::error::Error"]],["impl Sync for Fountain",1,["qr_reader_phone::process_payload::Fountain"]],["impl Sync for LegacyMulti",1,["qr_reader_phone::process_payload::LegacyMulti"]],["impl Sync for BananaRecovery",1,["qr_reader_phone::process_payload::BananaRecovery"]],["impl Sync for Element",1,["qr_reader_phone::process_payload::Element"]],["impl Sync for InProgress",1,["qr_reader_phone::process_payload::InProgress"]],["impl Sync for Ready",1,["qr_reader_phone::process_payload::Ready"]]], +"qrcode_static":[["impl Sync for DataType",1,["qrcode_static::DataType"]]], +"signer":[["impl Sync for ErrorDisplayed",1,["signer::ErrorDisplayed"]],["impl Sync for QrSequenceDecodeError",1,["signer::QrSequenceDecodeError"]]], +"transaction_parsing":[["impl Sync for InfoPassedCrypto",1,["transaction_parsing::check_signature::InfoPassedCrypto"]],["impl Sync for Error",1,["transaction_parsing::error::Error"]]], +"transaction_signing":[["impl Sync for SignatureType",1,["transaction_signing::sign_transaction::SignatureType"]],["impl Sync for SignatureAndChecksum",1,["transaction_signing::sign_transaction::SignatureAndChecksum"]],["impl Sync for Error",1,["transaction_signing::error::Error"]],["impl Sync for SufficientContent",1,["transaction_signing::SufficientContent"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/marker/trait.Unpin.js b/rustdocs/implementors/core/marker/trait.Unpin.js new file mode 100644 index 0000000000..fc863428ff --- /dev/null +++ b/rustdocs/implementors/core/marker/trait.Unpin.js @@ -0,0 +1,15 @@ +(function() {var implementors = { +"db_handling":[["impl Unpin for TrDbCold",1,["db_handling::db_transactions::TrDbCold"]],["impl Unpin for TrDbHot",1,["db_handling::db_transactions::TrDbHot"]],["impl Unpin for TrDbColdStub",1,["db_handling::db_transactions::TrDbColdStub"]],["impl Unpin for TrDbColdSign",1,["db_handling::db_transactions::TrDbColdSign"]],["impl Unpin for TrDbColdSignOne",1,["db_handling::db_transactions::TrDbColdSignOne"]],["impl Unpin for SignContent",1,["db_handling::db_transactions::SignContent"]],["impl Unpin for SpecsInvariants",1,["db_handling::helpers::SpecsInvariants"]],["impl Unpin for SignaturesBulk",1,["db_handling::identities::SignaturesBulk"]],["impl Unpin for SignaturesBulkV1",1,["db_handling::identities::SignaturesBulkV1"]],["impl Unpin for DynamicDerivationTransaction",1,["db_handling::identities::DynamicDerivationTransaction"]],["impl Unpin for TransactionBulk",1,["db_handling::identities::TransactionBulk"]],["impl Unpin for TransactionBulkV1",1,["db_handling::identities::TransactionBulkV1"]],["impl Unpin for ExportAddrs",1,["db_handling::identities::ExportAddrs"]],["impl Unpin for ExportAddrsV1",1,["db_handling::identities::ExportAddrsV1"]],["impl Unpin for ExportAddrsV2",1,["db_handling::identities::ExportAddrsV2"]],["impl Unpin for VaultFeatures",1,["db_handling::identities::VaultFeatures"]],["impl Unpin for SeedInfo",1,["db_handling::identities::SeedInfo"]],["impl Unpin for AddrInfo",1,["db_handling::identities::AddrInfo"]],["impl Unpin for DerivationCheck",1,["db_handling::identities::DerivationCheck"]],["impl Unpin for SeedDraft",1,["db_handling::interface_signer::SeedDraft"]],["impl Unpin for Error",1,["db_handling::error::Error"]]], +"defaults":[["impl Unpin for Error",1,["defaults::error::Error"]]], +"definitions":[["impl Unpin for Encryption",1,["definitions::crypto::Encryption"]],["impl Unpin for SufficientCrypto",1,["definitions::crypto::SufficientCrypto"]],["impl Unpin for DangerRecord",1,["definitions::danger::DangerRecord"]],["impl Unpin for Error",1,["definitions::error::Error"]],["impl Unpin for TransferContent",1,["definitions::error::TransferContent"]],["impl Unpin for MetadataError",1,["definitions::error::MetadataError"]],["impl Unpin for Wasm",1,["definitions::error_active::Wasm"]],["impl Unpin for Check",1,["definitions::error_active::Check"]],["impl Unpin for GeneralVerifierForContent",1,["definitions::error_signer::GeneralVerifierForContent"]],["impl Unpin for ParserError",1,["definitions::error_signer::ParserError"]],["impl Unpin for ParserDecodingError",1,["definitions::error_signer::ParserDecodingError"]],["impl Unpin for ParserMetadataError",1,["definitions::error_signer::ParserMetadataError"]],["impl Unpin for IdenticonStyle",1,["definitions::helpers::IdenticonStyle"]],["impl Unpin for MetaValuesDisplay",1,["definitions::history::MetaValuesDisplay"]],["impl Unpin for MetaValuesExport",1,["definitions::history::MetaValuesExport"]],["impl Unpin for NetworkSpecsDisplay",1,["definitions::history::NetworkSpecsDisplay"]],["impl Unpin for NetworkSpecsExport",1,["definitions::history::NetworkSpecsExport"]],["impl Unpin for NetworkVerifierDisplay",1,["definitions::history::NetworkVerifierDisplay"]],["impl Unpin for TypesDisplay",1,["definitions::history::TypesDisplay"]],["impl Unpin for TypesExport",1,["definitions::history::TypesExport"]],["impl Unpin for IdentityHistory",1,["definitions::history::IdentityHistory"]],["impl Unpin for SignDisplay",1,["definitions::history::SignDisplay"]],["impl Unpin for SignMessageDisplay",1,["definitions::history::SignMessageDisplay"]],["impl Unpin for Event",1,["definitions::history::Event"]],["impl Unpin for Entry",1,["definitions::history::Entry"]],["impl Unpin for NetworkSpecsKey",1,["definitions::keyring::NetworkSpecsKey"]],["impl Unpin for VerifierKey",1,["definitions::keyring::VerifierKey"]],["impl Unpin for AddressKey",1,["definitions::keyring::AddressKey"]],["impl Unpin for MetaKey",1,["definitions::keyring::MetaKey"]],["impl Unpin for MetaKeyPrefix",1,["definitions::keyring::MetaKeyPrefix"]],["impl Unpin for Order",1,["definitions::keyring::Order"]],["impl Unpin for AddressBookKey",1,["definitions::keyring::AddressBookKey"]],["impl Unpin for MetaInfo",1,["definitions::metadata::MetaInfo"]],["impl Unpin for MetaValues",1,["definitions::metadata::MetaValues"]],["impl Unpin for MetaSetElement",1,["definitions::metadata::MetaSetElement"]],["impl Unpin for AddressBookEntry",1,["definitions::metadata::AddressBookEntry"]],["impl Unpin for MetaHistoryEntry",1,["definitions::metadata::MetaHistoryEntry"]],["impl Unpin for OrderedNetworkSpecs",1,["definitions::network_specs::OrderedNetworkSpecs"]],["impl Unpin for NetworkSpecs",1,["definitions::network_specs::NetworkSpecs"]],["impl Unpin for ShortSpecs",1,["definitions::network_specs::ShortSpecs"]],["impl Unpin for NetworkProperties",1,["definitions::network_specs::NetworkProperties"]],["impl Unpin for Verifier",1,["definitions::network_specs::Verifier"]],["impl Unpin for VerifierValue",1,["definitions::network_specs::VerifierValue"]],["impl Unpin for CurrentVerifier",1,["definitions::network_specs::CurrentVerifier"]],["impl Unpin for ValidCurrentVerifier",1,["definitions::network_specs::ValidCurrentVerifier"]],["impl Unpin for ContentLoadMeta",1,["definitions::qr_transfers::ContentLoadMeta"]],["impl Unpin for ContentAddSpecs",1,["definitions::qr_transfers::ContentAddSpecs"]],["impl Unpin for ContentLoadTypes",1,["definitions::qr_transfers::ContentLoadTypes"]],["impl Unpin for TypeEntry",1,["definitions::types::TypeEntry"]],["impl Unpin for Description",1,["definitions::types::Description"]],["impl Unpin for EnumVariant",1,["definitions::types::EnumVariant"]],["impl Unpin for EnumVariantType",1,["definitions::types::EnumVariantType"]],["impl Unpin for StructField",1,["definitions::types::StructField"]],["impl Unpin for AddressDetails",1,["definitions::users::AddressDetails"]],["impl Unpin for SeedNameWithIdenticon",1,["definitions::navigation::SeedNameWithIdenticon"]],["impl Unpin for TransactionSignAction",1,["definitions::navigation::TransactionSignAction"]],["impl Unpin for TransactionAction",1,["definitions::navigation::TransactionAction"]],["impl Unpin for StubNav",1,["definitions::navigation::StubNav"]],["impl Unpin for FooterButton",1,["definitions::navigation::FooterButton"]],["impl Unpin for RightButton",1,["definitions::navigation::RightButton"]],["impl Unpin for ScreenNameType",1,["definitions::navigation::ScreenNameType"]],["impl Unpin for ShieldAlert",1,["definitions::navigation::ShieldAlert"]],["impl Unpin for AlertData",1,["definitions::navigation::AlertData"]],["impl Unpin for ActionResult",1,["definitions::navigation::ActionResult"]],["impl Unpin for LogScreenEntry",1,["definitions::navigation::LogScreenEntry"]],["impl Unpin for ScreenData",1,["definitions::navigation::ScreenData"]],["impl Unpin for MKeysCard",1,["definitions::navigation::MKeysCard"]],["impl Unpin for MKeysNew",1,["definitions::navigation::MKeysNew"]],["impl Unpin for MKeyAndNetworkCard",1,["definitions::navigation::MKeyAndNetworkCard"]],["impl Unpin for MNetworkCard",1,["definitions::navigation::MNetworkCard"]],["impl Unpin for MSettings",1,["definitions::navigation::MSettings"]],["impl Unpin for History",1,["definitions::navigation::History"]],["impl Unpin for MLog",1,["definitions::navigation::MLog"]],["impl Unpin for MEventMaybeDecoded",1,["definitions::navigation::MEventMaybeDecoded"]],["impl Unpin for MLogDetails",1,["definitions::navigation::MLogDetails"]],["impl Unpin for TransactionType",1,["definitions::navigation::TransactionType"]],["impl Unpin for TransactionCard",1,["definitions::navigation::TransactionCard"]],["impl Unpin for BananaSplitRecoveryResult",1,["definitions::navigation::BananaSplitRecoveryResult"]],["impl Unpin for DecodeSequenceResult",1,["definitions::navigation::DecodeSequenceResult"]],["impl Unpin for TransactionCardSet",1,["definitions::navigation::TransactionCardSet"]],["impl Unpin for MTransaction",1,["definitions::navigation::MTransaction"]],["impl Unpin for MSignedTransaction",1,["definitions::navigation::MSignedTransaction"]],["impl Unpin for SeedNameCard",1,["definitions::navigation::SeedNameCard"]],["impl Unpin for MSeeds",1,["definitions::navigation::MSeeds"]],["impl Unpin for MKeyDetails",1,["definitions::navigation::MKeyDetails"]],["impl Unpin for MNewSeed",1,["definitions::navigation::MNewSeed"]],["impl Unpin for MRecoverSeedName",1,["definitions::navigation::MRecoverSeedName"]],["impl Unpin for MRecoverSeedPhrase",1,["definitions::navigation::MRecoverSeedPhrase"]],["impl Unpin for DerivationCheck",1,["definitions::navigation::DerivationCheck"]],["impl Unpin for Address",1,["definitions::navigation::Address"]],["impl Unpin for MAddressCard",1,["definitions::navigation::MAddressCard"]],["impl Unpin for DerivationDestination",1,["definitions::navigation::DerivationDestination"]],["impl Unpin for MDeriveKey",1,["definitions::navigation::MDeriveKey"]],["impl Unpin for MVerifierDetails",1,["definitions::navigation::MVerifierDetails"]],["impl Unpin for MVerifier",1,["definitions::navigation::MVerifier"]],["impl Unpin for MMetadataRecord",1,["definitions::navigation::MMetadataRecord"]],["impl Unpin for MNetworkDetails",1,["definitions::navigation::MNetworkDetails"]],["impl Unpin for MRawKey",1,["definitions::navigation::MRawKey"]],["impl Unpin for MSignSufficientCrypto",1,["definitions::navigation::MSignSufficientCrypto"]],["impl Unpin for MKeyDetailsMulti",1,["definitions::navigation::MKeyDetailsMulti"]],["impl Unpin for MMNetwork",1,["definitions::navigation::MMNetwork"]],["impl Unpin for MManageNetworks",1,["definitions::navigation::MManageNetworks"]],["impl Unpin for ExportedSet",1,["definitions::navigation::ExportedSet"]],["impl Unpin for PathAndNetwork",1,["definitions::navigation::PathAndNetwork"]],["impl Unpin for MSCContent",1,["definitions::navigation::MSCContent"]],["impl Unpin for QrData",1,["definitions::navigation::QrData"]],["impl Unpin for MSufficientCryptoReady",1,["definitions::navigation::MSufficientCryptoReady"]],["impl Unpin for DerivationEntry",1,["definitions::navigation::DerivationEntry"]],["impl Unpin for DerivationPack",1,["definitions::navigation::DerivationPack"]],["impl Unpin for MBackup",1,["definitions::navigation::MBackup"]],["impl Unpin for MSeedMenu",1,["definitions::navigation::MSeedMenu"]],["impl Unpin for MNewSeedBackup",1,["definitions::navigation::MNewSeedBackup"]],["impl Unpin for Network",1,["definitions::navigation::Network"]],["impl Unpin for MNetworkMenu",1,["definitions::navigation::MNetworkMenu"]],["impl Unpin for MPasswordConfirm",1,["definitions::navigation::MPasswordConfirm"]],["impl Unpin for MSignatureReady",1,["definitions::navigation::MSignatureReady"]],["impl Unpin for MEnterPassword",1,["definitions::navigation::MEnterPassword"]],["impl Unpin for MLogRight",1,["definitions::navigation::MLogRight"]],["impl Unpin for MMMNetwork",1,["definitions::navigation::MMMNetwork"]],["impl Unpin for MManageMetadata",1,["definitions::navigation::MManageMetadata"]],["impl Unpin for MTypesInfo",1,["definitions::navigation::MTypesInfo"]],["impl Unpin for ModalData",1,["definitions::navigation::ModalData"]],["impl Unpin for MSCCall",1,["definitions::navigation::MSCCall"]],["impl Unpin for MSCCurrency",1,["definitions::navigation::MSCCurrency"]],["impl Unpin for MSCEnumVariantName",1,["definitions::navigation::MSCEnumVariantName"]],["impl Unpin for MSCEraMortal",1,["definitions::navigation::MSCEraMortal"]],["impl Unpin for MSCFieldName",1,["definitions::navigation::MSCFieldName"]],["impl Unpin for MSCFieldNumber",1,["definitions::navigation::MSCFieldNumber"]],["impl Unpin for Identicon",1,["definitions::navigation::Identicon"]],["impl Unpin for MSCId",1,["definitions::navigation::MSCId"]],["impl Unpin for MSCNameVersion",1,["definitions::navigation::MSCNameVersion"]],["impl Unpin for MSCNetworkInfo",1,["definitions::navigation::MSCNetworkInfo"]],["impl Unpin for DDPreview",1,["definitions::navigation::DDPreview"]],["impl Unpin for DDKeySet",1,["definitions::navigation::DDKeySet"]],["impl Unpin for DDDetail",1,["definitions::navigation::DDDetail"]],["impl Unpin for MSCTip",1,["definitions::navigation::MSCTip"]],["impl Unpin for MSCTxSpecPlain",1,["definitions::navigation::MSCTxSpecPlain"]],["impl Unpin for MKeysInfoExport",1,["definitions::navigation::MKeysInfoExport"]],["impl Unpin for Card",1,["definitions::navigation::Card"]],["impl Unpin for SeedKeysPreview",1,["definitions::derivations::SeedKeysPreview"]],["impl Unpin for DerivedKeyPreview",1,["definitions::derivations::DerivedKeyPreview"]],["impl Unpin for DerivedKeyStatus",1,["definitions::derivations::DerivedKeyStatus"]],["impl Unpin for DerivedKeyError",1,["definitions::derivations::DerivedKeyError"]],["impl Unpin for DynamicDerivationsRequest",1,["definitions::dynamic_derivations::DynamicDerivationsRequest"]],["impl Unpin for DynamicDerivationsAddressRequestV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressRequestV1"]],["impl Unpin for DynamicDerivationsRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationsRequestInfo"]],["impl Unpin for DynamicDerivationRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationRequestInfo"]],["impl Unpin for DynamicDerivationsAddressResponse",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponse"]],["impl Unpin for DynamicDerivationsAddressResponseV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponseV1"]],["impl Unpin for DynamicDerivationsResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationsResponseInfo"]],["impl Unpin for DynamicDerivationResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationResponseInfo"]],["impl Unpin for SchemaVersion",1,["definitions::schema_version::SchemaVersion"]]], +"generate_message":[["impl Unpin for FetchedInfo",1,["generate_message::fetch_metadata::FetchedInfo"]],["impl Unpin for FetchedInfoWithNetworkSpecs",1,["generate_message::fetch_metadata::FetchedInfoWithNetworkSpecs"]],["impl Unpin for Write",1,["generate_message::helpers::Write"]],["impl Unpin for MetaValuesStamped",1,["generate_message::helpers::MetaValuesStamped"]],["impl Unpin for SortedMetaValues",1,["generate_message::helpers::SortedMetaValues"]],["impl Unpin for MetaShortCut",1,["generate_message::helpers::MetaShortCut"]],["impl Unpin for MetaFetched",1,["generate_message::helpers::MetaFetched"]],["impl Unpin for TokenFetch",1,["generate_message::interpret_specs::TokenFetch"]],["impl Unpin for Cli",1,["generate_message::parser::Cli"]],["impl Unpin for Command",1,["generate_message::parser::Command"]],["impl Unpin for Show",1,["generate_message::parser::Show"]],["impl Unpin for InstructionMeta",1,["generate_message::parser::InstructionMeta"]],["impl Unpin for InstructionSpecs",1,["generate_message::parser::InstructionSpecs"]],["impl Unpin for ContentArgs",1,["generate_message::parser::ContentArgs"]],["impl Unpin for Content",1,["generate_message::parser::Content"]],["impl Unpin for Set",1,["generate_message::parser::Set"]],["impl Unpin for SetFlags",1,["generate_message::parser::SetFlags"]],["impl Unpin for Make",1,["generate_message::parser::Make"]],["impl Unpin for Goal",1,["generate_message::parser::Goal"]],["impl Unpin for Verifier",1,["generate_message::parser::Verifier"]],["impl Unpin for Crypto",1,["generate_message::parser::Crypto"]],["impl Unpin for Signature",1,["generate_message::parser::Signature"]],["impl Unpin for Sufficient",1,["generate_message::parser::Sufficient"]],["impl Unpin for Msg",1,["generate_message::parser::Msg"]],["impl Unpin for Remove",1,["generate_message::parser::Remove"]],["impl Unpin for Derivations",1,["generate_message::parser::Derivations"]],["impl Unpin for Override",1,["generate_message::parser::Override"]],["impl Unpin for Token",1,["generate_message::parser::Token"]],["impl Unpin for Error",1,["generate_message::error::Error"]]], +"navigator":[["impl Unpin for Error",1,["navigator::error::Error"]],["impl Unpin for Action",1,["navigator::actions::Action"]],["impl Unpin for Alert",1,["navigator::alerts::Alert"]],["impl Unpin for Modal",1,["navigator::modals::Modal"]],["impl Unpin for Screen",1,["navigator::screens::Screen"]],["impl Unpin for SpecialtyKeysState",1,["navigator::screens::SpecialtyKeysState"]],["impl Unpin for KeysState",1,["navigator::screens::KeysState"]],["impl Unpin for AddressState",1,["navigator::screens::AddressState"]],["impl Unpin for AddressStateMulti",1,["navigator::screens::AddressStateMulti"]],["impl Unpin for DeriveState",1,["navigator::screens::DeriveState"]],["impl Unpin for SufficientCryptoState",1,["navigator::screens::SufficientCryptoState"]],["impl Unpin for RecoverSeedPhraseState",1,["navigator::screens::RecoverSeedPhraseState"]],["impl Unpin for EnteredInfo",1,["navigator::screens::EnteredInfo"]],["impl Unpin for STATE",1,["navigator::STATE"]]], +"parser":[["impl Unpin for ParserCard",1,["parser::cards::ParserCard"]],["impl Unpin for OutputCard",1,["parser::decoding_commons::OutputCard"]],["impl<T> Unpin for CutCompact<T>where\n T: Unpin,",1,["parser::decoding_commons::CutCompact"]],["impl Unpin for Error",1,["parser::error::Error"]],["impl<'a> Unpin for OlderMeta<'a>",1,["parser::method::OlderMeta"]],["impl<'a> Unpin for MetadataBundle<'a>",1,["parser::MetadataBundle"]]], +"printing_balance":[["impl Unpin for PrettyOutput",1,["printing_balance::PrettyOutput"]]], +"qr_reader_pc":[["impl Unpin for CameraSettings",1,["qr_reader_pc::CameraSettings"]]], +"qr_reader_phone":[["impl Unpin for Error",1,["qr_reader_phone::error::Error"]],["impl Unpin for Fountain",1,["qr_reader_phone::process_payload::Fountain"]],["impl Unpin for LegacyMulti",1,["qr_reader_phone::process_payload::LegacyMulti"]],["impl Unpin for BananaRecovery",1,["qr_reader_phone::process_payload::BananaRecovery"]],["impl Unpin for Element",1,["qr_reader_phone::process_payload::Element"]],["impl Unpin for InProgress",1,["qr_reader_phone::process_payload::InProgress"]],["impl Unpin for Ready",1,["qr_reader_phone::process_payload::Ready"]]], +"qrcode_static":[["impl Unpin for DataType",1,["qrcode_static::DataType"]]], +"signer":[["impl Unpin for ErrorDisplayed",1,["signer::ErrorDisplayed"]],["impl Unpin for QrSequenceDecodeError",1,["signer::QrSequenceDecodeError"]]], +"transaction_parsing":[["impl Unpin for InfoPassedCrypto",1,["transaction_parsing::check_signature::InfoPassedCrypto"]],["impl Unpin for Error",1,["transaction_parsing::error::Error"]]], +"transaction_signing":[["impl Unpin for SignatureType",1,["transaction_signing::sign_transaction::SignatureType"]],["impl Unpin for SignatureAndChecksum",1,["transaction_signing::sign_transaction::SignatureAndChecksum"]],["impl Unpin for Error",1,["transaction_signing::error::Error"]],["impl Unpin for SufficientContent",1,["transaction_signing::SufficientContent"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/ops/deref/trait.Deref.js b/rustdocs/implementors/core/ops/deref/trait.Deref.js new file mode 100644 index 0000000000..0f599b772b --- /dev/null +++ b/rustdocs/implementors/core/ops/deref/trait.Deref.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"definitions":[["impl Deref for SchemaVersion"]], +"navigator":[["impl Deref for STATE"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/ops/drop/trait.Drop.js b/rustdocs/implementors/core/ops/drop/trait.Drop.js new file mode 100644 index 0000000000..00c2ea16d0 --- /dev/null +++ b/rustdocs/implementors/core/ops/drop/trait.Drop.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"db_handling":[["impl Drop for SeedDraft"]], +"navigator":[["impl Drop for EnteredInfo"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/rustdocs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js new file mode 100644 index 0000000000..60c9543d18 --- /dev/null +++ b/rustdocs/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -0,0 +1,15 @@ +(function() {var implementors = { +"db_handling":[["impl RefUnwindSafe for TrDbCold",1,["db_handling::db_transactions::TrDbCold"]],["impl RefUnwindSafe for TrDbHot",1,["db_handling::db_transactions::TrDbHot"]],["impl RefUnwindSafe for TrDbColdStub",1,["db_handling::db_transactions::TrDbColdStub"]],["impl RefUnwindSafe for TrDbColdSign",1,["db_handling::db_transactions::TrDbColdSign"]],["impl RefUnwindSafe for TrDbColdSignOne",1,["db_handling::db_transactions::TrDbColdSignOne"]],["impl RefUnwindSafe for SignContent",1,["db_handling::db_transactions::SignContent"]],["impl RefUnwindSafe for SpecsInvariants",1,["db_handling::helpers::SpecsInvariants"]],["impl RefUnwindSafe for SignaturesBulk",1,["db_handling::identities::SignaturesBulk"]],["impl RefUnwindSafe for SignaturesBulkV1",1,["db_handling::identities::SignaturesBulkV1"]],["impl RefUnwindSafe for DynamicDerivationTransaction",1,["db_handling::identities::DynamicDerivationTransaction"]],["impl RefUnwindSafe for TransactionBulk",1,["db_handling::identities::TransactionBulk"]],["impl RefUnwindSafe for TransactionBulkV1",1,["db_handling::identities::TransactionBulkV1"]],["impl RefUnwindSafe for ExportAddrs",1,["db_handling::identities::ExportAddrs"]],["impl RefUnwindSafe for ExportAddrsV1",1,["db_handling::identities::ExportAddrsV1"]],["impl RefUnwindSafe for ExportAddrsV2",1,["db_handling::identities::ExportAddrsV2"]],["impl RefUnwindSafe for VaultFeatures",1,["db_handling::identities::VaultFeatures"]],["impl RefUnwindSafe for SeedInfo",1,["db_handling::identities::SeedInfo"]],["impl RefUnwindSafe for AddrInfo",1,["db_handling::identities::AddrInfo"]],["impl RefUnwindSafe for DerivationCheck",1,["db_handling::identities::DerivationCheck"]],["impl RefUnwindSafe for SeedDraft",1,["db_handling::interface_signer::SeedDraft"]],["impl !RefUnwindSafe for Error",1,["db_handling::error::Error"]]], +"defaults":[["impl !RefUnwindSafe for Error",1,["defaults::error::Error"]]], +"definitions":[["impl RefUnwindSafe for Encryption",1,["definitions::crypto::Encryption"]],["impl RefUnwindSafe for SufficientCrypto",1,["definitions::crypto::SufficientCrypto"]],["impl RefUnwindSafe for DangerRecord",1,["definitions::danger::DangerRecord"]],["impl !RefUnwindSafe for Error",1,["definitions::error::Error"]],["impl RefUnwindSafe for TransferContent",1,["definitions::error::TransferContent"]],["impl RefUnwindSafe for MetadataError",1,["definitions::error::MetadataError"]],["impl !RefUnwindSafe for Wasm",1,["definitions::error_active::Wasm"]],["impl !RefUnwindSafe for Check",1,["definitions::error_active::Check"]],["impl RefUnwindSafe for GeneralVerifierForContent",1,["definitions::error_signer::GeneralVerifierForContent"]],["impl RefUnwindSafe for ParserError",1,["definitions::error_signer::ParserError"]],["impl RefUnwindSafe for ParserDecodingError",1,["definitions::error_signer::ParserDecodingError"]],["impl RefUnwindSafe for ParserMetadataError",1,["definitions::error_signer::ParserMetadataError"]],["impl RefUnwindSafe for IdenticonStyle",1,["definitions::helpers::IdenticonStyle"]],["impl RefUnwindSafe for MetaValuesDisplay",1,["definitions::history::MetaValuesDisplay"]],["impl RefUnwindSafe for MetaValuesExport",1,["definitions::history::MetaValuesExport"]],["impl RefUnwindSafe for NetworkSpecsDisplay",1,["definitions::history::NetworkSpecsDisplay"]],["impl RefUnwindSafe for NetworkSpecsExport",1,["definitions::history::NetworkSpecsExport"]],["impl RefUnwindSafe for NetworkVerifierDisplay",1,["definitions::history::NetworkVerifierDisplay"]],["impl RefUnwindSafe for TypesDisplay",1,["definitions::history::TypesDisplay"]],["impl RefUnwindSafe for TypesExport",1,["definitions::history::TypesExport"]],["impl RefUnwindSafe for IdentityHistory",1,["definitions::history::IdentityHistory"]],["impl RefUnwindSafe for SignDisplay",1,["definitions::history::SignDisplay"]],["impl RefUnwindSafe for SignMessageDisplay",1,["definitions::history::SignMessageDisplay"]],["impl RefUnwindSafe for Event",1,["definitions::history::Event"]],["impl RefUnwindSafe for Entry",1,["definitions::history::Entry"]],["impl RefUnwindSafe for NetworkSpecsKey",1,["definitions::keyring::NetworkSpecsKey"]],["impl RefUnwindSafe for VerifierKey",1,["definitions::keyring::VerifierKey"]],["impl RefUnwindSafe for AddressKey",1,["definitions::keyring::AddressKey"]],["impl RefUnwindSafe for MetaKey",1,["definitions::keyring::MetaKey"]],["impl RefUnwindSafe for MetaKeyPrefix",1,["definitions::keyring::MetaKeyPrefix"]],["impl RefUnwindSafe for Order",1,["definitions::keyring::Order"]],["impl RefUnwindSafe for AddressBookKey",1,["definitions::keyring::AddressBookKey"]],["impl RefUnwindSafe for MetaInfo",1,["definitions::metadata::MetaInfo"]],["impl RefUnwindSafe for MetaValues",1,["definitions::metadata::MetaValues"]],["impl !RefUnwindSafe for MetaSetElement",1,["definitions::metadata::MetaSetElement"]],["impl RefUnwindSafe for AddressBookEntry",1,["definitions::metadata::AddressBookEntry"]],["impl RefUnwindSafe for MetaHistoryEntry",1,["definitions::metadata::MetaHistoryEntry"]],["impl RefUnwindSafe for OrderedNetworkSpecs",1,["definitions::network_specs::OrderedNetworkSpecs"]],["impl RefUnwindSafe for NetworkSpecs",1,["definitions::network_specs::NetworkSpecs"]],["impl RefUnwindSafe for ShortSpecs",1,["definitions::network_specs::ShortSpecs"]],["impl RefUnwindSafe for NetworkProperties",1,["definitions::network_specs::NetworkProperties"]],["impl RefUnwindSafe for Verifier",1,["definitions::network_specs::Verifier"]],["impl RefUnwindSafe for VerifierValue",1,["definitions::network_specs::VerifierValue"]],["impl RefUnwindSafe for CurrentVerifier",1,["definitions::network_specs::CurrentVerifier"]],["impl RefUnwindSafe for ValidCurrentVerifier",1,["definitions::network_specs::ValidCurrentVerifier"]],["impl RefUnwindSafe for ContentLoadMeta",1,["definitions::qr_transfers::ContentLoadMeta"]],["impl RefUnwindSafe for ContentAddSpecs",1,["definitions::qr_transfers::ContentAddSpecs"]],["impl RefUnwindSafe for ContentLoadTypes",1,["definitions::qr_transfers::ContentLoadTypes"]],["impl RefUnwindSafe for TypeEntry",1,["definitions::types::TypeEntry"]],["impl RefUnwindSafe for Description",1,["definitions::types::Description"]],["impl RefUnwindSafe for EnumVariant",1,["definitions::types::EnumVariant"]],["impl RefUnwindSafe for EnumVariantType",1,["definitions::types::EnumVariantType"]],["impl RefUnwindSafe for StructField",1,["definitions::types::StructField"]],["impl RefUnwindSafe for AddressDetails",1,["definitions::users::AddressDetails"]],["impl RefUnwindSafe for SeedNameWithIdenticon",1,["definitions::navigation::SeedNameWithIdenticon"]],["impl RefUnwindSafe for TransactionSignAction",1,["definitions::navigation::TransactionSignAction"]],["impl RefUnwindSafe for TransactionAction",1,["definitions::navigation::TransactionAction"]],["impl RefUnwindSafe for StubNav",1,["definitions::navigation::StubNav"]],["impl RefUnwindSafe for FooterButton",1,["definitions::navigation::FooterButton"]],["impl RefUnwindSafe for RightButton",1,["definitions::navigation::RightButton"]],["impl RefUnwindSafe for ScreenNameType",1,["definitions::navigation::ScreenNameType"]],["impl RefUnwindSafe for ShieldAlert",1,["definitions::navigation::ShieldAlert"]],["impl RefUnwindSafe for AlertData",1,["definitions::navigation::AlertData"]],["impl RefUnwindSafe for ActionResult",1,["definitions::navigation::ActionResult"]],["impl RefUnwindSafe for LogScreenEntry",1,["definitions::navigation::LogScreenEntry"]],["impl RefUnwindSafe for ScreenData",1,["definitions::navigation::ScreenData"]],["impl RefUnwindSafe for MKeysCard",1,["definitions::navigation::MKeysCard"]],["impl RefUnwindSafe for MKeysNew",1,["definitions::navigation::MKeysNew"]],["impl RefUnwindSafe for MKeyAndNetworkCard",1,["definitions::navigation::MKeyAndNetworkCard"]],["impl RefUnwindSafe for MNetworkCard",1,["definitions::navigation::MNetworkCard"]],["impl RefUnwindSafe for MSettings",1,["definitions::navigation::MSettings"]],["impl RefUnwindSafe for History",1,["definitions::navigation::History"]],["impl RefUnwindSafe for MLog",1,["definitions::navigation::MLog"]],["impl RefUnwindSafe for MEventMaybeDecoded",1,["definitions::navigation::MEventMaybeDecoded"]],["impl RefUnwindSafe for MLogDetails",1,["definitions::navigation::MLogDetails"]],["impl RefUnwindSafe for TransactionType",1,["definitions::navigation::TransactionType"]],["impl RefUnwindSafe for TransactionCard",1,["definitions::navigation::TransactionCard"]],["impl RefUnwindSafe for BananaSplitRecoveryResult",1,["definitions::navigation::BananaSplitRecoveryResult"]],["impl RefUnwindSafe for DecodeSequenceResult",1,["definitions::navigation::DecodeSequenceResult"]],["impl RefUnwindSafe for TransactionCardSet",1,["definitions::navigation::TransactionCardSet"]],["impl RefUnwindSafe for MTransaction",1,["definitions::navigation::MTransaction"]],["impl RefUnwindSafe for MSignedTransaction",1,["definitions::navigation::MSignedTransaction"]],["impl RefUnwindSafe for SeedNameCard",1,["definitions::navigation::SeedNameCard"]],["impl RefUnwindSafe for MSeeds",1,["definitions::navigation::MSeeds"]],["impl RefUnwindSafe for MKeyDetails",1,["definitions::navigation::MKeyDetails"]],["impl RefUnwindSafe for MNewSeed",1,["definitions::navigation::MNewSeed"]],["impl RefUnwindSafe for MRecoverSeedName",1,["definitions::navigation::MRecoverSeedName"]],["impl RefUnwindSafe for MRecoverSeedPhrase",1,["definitions::navigation::MRecoverSeedPhrase"]],["impl RefUnwindSafe for DerivationCheck",1,["definitions::navigation::DerivationCheck"]],["impl RefUnwindSafe for Address",1,["definitions::navigation::Address"]],["impl RefUnwindSafe for MAddressCard",1,["definitions::navigation::MAddressCard"]],["impl RefUnwindSafe for DerivationDestination",1,["definitions::navigation::DerivationDestination"]],["impl RefUnwindSafe for MDeriveKey",1,["definitions::navigation::MDeriveKey"]],["impl RefUnwindSafe for MVerifierDetails",1,["definitions::navigation::MVerifierDetails"]],["impl RefUnwindSafe for MVerifier",1,["definitions::navigation::MVerifier"]],["impl RefUnwindSafe for MMetadataRecord",1,["definitions::navigation::MMetadataRecord"]],["impl RefUnwindSafe for MNetworkDetails",1,["definitions::navigation::MNetworkDetails"]],["impl RefUnwindSafe for MRawKey",1,["definitions::navigation::MRawKey"]],["impl RefUnwindSafe for MSignSufficientCrypto",1,["definitions::navigation::MSignSufficientCrypto"]],["impl RefUnwindSafe for MKeyDetailsMulti",1,["definitions::navigation::MKeyDetailsMulti"]],["impl RefUnwindSafe for MMNetwork",1,["definitions::navigation::MMNetwork"]],["impl RefUnwindSafe for MManageNetworks",1,["definitions::navigation::MManageNetworks"]],["impl RefUnwindSafe for ExportedSet",1,["definitions::navigation::ExportedSet"]],["impl RefUnwindSafe for PathAndNetwork",1,["definitions::navigation::PathAndNetwork"]],["impl RefUnwindSafe for MSCContent",1,["definitions::navigation::MSCContent"]],["impl RefUnwindSafe for QrData",1,["definitions::navigation::QrData"]],["impl RefUnwindSafe for MSufficientCryptoReady",1,["definitions::navigation::MSufficientCryptoReady"]],["impl RefUnwindSafe for DerivationEntry",1,["definitions::navigation::DerivationEntry"]],["impl RefUnwindSafe for DerivationPack",1,["definitions::navigation::DerivationPack"]],["impl RefUnwindSafe for MBackup",1,["definitions::navigation::MBackup"]],["impl RefUnwindSafe for MSeedMenu",1,["definitions::navigation::MSeedMenu"]],["impl RefUnwindSafe for MNewSeedBackup",1,["definitions::navigation::MNewSeedBackup"]],["impl RefUnwindSafe for Network",1,["definitions::navigation::Network"]],["impl RefUnwindSafe for MNetworkMenu",1,["definitions::navigation::MNetworkMenu"]],["impl RefUnwindSafe for MPasswordConfirm",1,["definitions::navigation::MPasswordConfirm"]],["impl RefUnwindSafe for MSignatureReady",1,["definitions::navigation::MSignatureReady"]],["impl RefUnwindSafe for MEnterPassword",1,["definitions::navigation::MEnterPassword"]],["impl RefUnwindSafe for MLogRight",1,["definitions::navigation::MLogRight"]],["impl RefUnwindSafe for MMMNetwork",1,["definitions::navigation::MMMNetwork"]],["impl RefUnwindSafe for MManageMetadata",1,["definitions::navigation::MManageMetadata"]],["impl RefUnwindSafe for MTypesInfo",1,["definitions::navigation::MTypesInfo"]],["impl RefUnwindSafe for ModalData",1,["definitions::navigation::ModalData"]],["impl RefUnwindSafe for MSCCall",1,["definitions::navigation::MSCCall"]],["impl RefUnwindSafe for MSCCurrency",1,["definitions::navigation::MSCCurrency"]],["impl RefUnwindSafe for MSCEnumVariantName",1,["definitions::navigation::MSCEnumVariantName"]],["impl RefUnwindSafe for MSCEraMortal",1,["definitions::navigation::MSCEraMortal"]],["impl RefUnwindSafe for MSCFieldName",1,["definitions::navigation::MSCFieldName"]],["impl RefUnwindSafe for MSCFieldNumber",1,["definitions::navigation::MSCFieldNumber"]],["impl RefUnwindSafe for Identicon",1,["definitions::navigation::Identicon"]],["impl RefUnwindSafe for MSCId",1,["definitions::navigation::MSCId"]],["impl RefUnwindSafe for MSCNameVersion",1,["definitions::navigation::MSCNameVersion"]],["impl RefUnwindSafe for MSCNetworkInfo",1,["definitions::navigation::MSCNetworkInfo"]],["impl RefUnwindSafe for DDPreview",1,["definitions::navigation::DDPreview"]],["impl RefUnwindSafe for DDKeySet",1,["definitions::navigation::DDKeySet"]],["impl RefUnwindSafe for DDDetail",1,["definitions::navigation::DDDetail"]],["impl RefUnwindSafe for MSCTip",1,["definitions::navigation::MSCTip"]],["impl RefUnwindSafe for MSCTxSpecPlain",1,["definitions::navigation::MSCTxSpecPlain"]],["impl RefUnwindSafe for MKeysInfoExport",1,["definitions::navigation::MKeysInfoExport"]],["impl RefUnwindSafe for Card",1,["definitions::navigation::Card"]],["impl RefUnwindSafe for SeedKeysPreview",1,["definitions::derivations::SeedKeysPreview"]],["impl RefUnwindSafe for DerivedKeyPreview",1,["definitions::derivations::DerivedKeyPreview"]],["impl RefUnwindSafe for DerivedKeyStatus",1,["definitions::derivations::DerivedKeyStatus"]],["impl RefUnwindSafe for DerivedKeyError",1,["definitions::derivations::DerivedKeyError"]],["impl RefUnwindSafe for DynamicDerivationsRequest",1,["definitions::dynamic_derivations::DynamicDerivationsRequest"]],["impl RefUnwindSafe for DynamicDerivationsAddressRequestV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressRequestV1"]],["impl RefUnwindSafe for DynamicDerivationsRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationsRequestInfo"]],["impl RefUnwindSafe for DynamicDerivationRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationRequestInfo"]],["impl RefUnwindSafe for DynamicDerivationsAddressResponse",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponse"]],["impl RefUnwindSafe for DynamicDerivationsAddressResponseV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponseV1"]],["impl RefUnwindSafe for DynamicDerivationsResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationsResponseInfo"]],["impl RefUnwindSafe for DynamicDerivationResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationResponseInfo"]],["impl RefUnwindSafe for SchemaVersion",1,["definitions::schema_version::SchemaVersion"]]], +"generate_message":[["impl RefUnwindSafe for FetchedInfo",1,["generate_message::fetch_metadata::FetchedInfo"]],["impl RefUnwindSafe for FetchedInfoWithNetworkSpecs",1,["generate_message::fetch_metadata::FetchedInfoWithNetworkSpecs"]],["impl RefUnwindSafe for Write",1,["generate_message::helpers::Write"]],["impl RefUnwindSafe for MetaValuesStamped",1,["generate_message::helpers::MetaValuesStamped"]],["impl RefUnwindSafe for SortedMetaValues",1,["generate_message::helpers::SortedMetaValues"]],["impl RefUnwindSafe for MetaShortCut",1,["generate_message::helpers::MetaShortCut"]],["impl RefUnwindSafe for MetaFetched",1,["generate_message::helpers::MetaFetched"]],["impl RefUnwindSafe for TokenFetch",1,["generate_message::interpret_specs::TokenFetch"]],["impl RefUnwindSafe for Cli",1,["generate_message::parser::Cli"]],["impl RefUnwindSafe for Command",1,["generate_message::parser::Command"]],["impl RefUnwindSafe for Show",1,["generate_message::parser::Show"]],["impl RefUnwindSafe for InstructionMeta",1,["generate_message::parser::InstructionMeta"]],["impl RefUnwindSafe for InstructionSpecs",1,["generate_message::parser::InstructionSpecs"]],["impl RefUnwindSafe for ContentArgs",1,["generate_message::parser::ContentArgs"]],["impl RefUnwindSafe for Content",1,["generate_message::parser::Content"]],["impl RefUnwindSafe for Set",1,["generate_message::parser::Set"]],["impl RefUnwindSafe for SetFlags",1,["generate_message::parser::SetFlags"]],["impl RefUnwindSafe for Make",1,["generate_message::parser::Make"]],["impl RefUnwindSafe for Goal",1,["generate_message::parser::Goal"]],["impl RefUnwindSafe for Verifier",1,["generate_message::parser::Verifier"]],["impl RefUnwindSafe for Crypto",1,["generate_message::parser::Crypto"]],["impl RefUnwindSafe for Signature",1,["generate_message::parser::Signature"]],["impl RefUnwindSafe for Sufficient",1,["generate_message::parser::Sufficient"]],["impl RefUnwindSafe for Msg",1,["generate_message::parser::Msg"]],["impl RefUnwindSafe for Remove",1,["generate_message::parser::Remove"]],["impl RefUnwindSafe for Derivations",1,["generate_message::parser::Derivations"]],["impl RefUnwindSafe for Override",1,["generate_message::parser::Override"]],["impl RefUnwindSafe for Token",1,["generate_message::parser::Token"]],["impl !RefUnwindSafe for Error",1,["generate_message::error::Error"]]], +"navigator":[["impl !RefUnwindSafe for Error",1,["navigator::error::Error"]],["impl RefUnwindSafe for Action",1,["navigator::actions::Action"]],["impl RefUnwindSafe for Alert",1,["navigator::alerts::Alert"]],["impl RefUnwindSafe for Modal",1,["navigator::modals::Modal"]],["impl RefUnwindSafe for Screen",1,["navigator::screens::Screen"]],["impl RefUnwindSafe for SpecialtyKeysState",1,["navigator::screens::SpecialtyKeysState"]],["impl RefUnwindSafe for KeysState",1,["navigator::screens::KeysState"]],["impl RefUnwindSafe for AddressState",1,["navigator::screens::AddressState"]],["impl RefUnwindSafe for AddressStateMulti",1,["navigator::screens::AddressStateMulti"]],["impl RefUnwindSafe for DeriveState",1,["navigator::screens::DeriveState"]],["impl RefUnwindSafe for SufficientCryptoState",1,["navigator::screens::SufficientCryptoState"]],["impl RefUnwindSafe for RecoverSeedPhraseState",1,["navigator::screens::RecoverSeedPhraseState"]],["impl RefUnwindSafe for EnteredInfo",1,["navigator::screens::EnteredInfo"]],["impl RefUnwindSafe for STATE",1,["navigator::STATE"]]], +"parser":[["impl RefUnwindSafe for ParserCard",1,["parser::cards::ParserCard"]],["impl RefUnwindSafe for OutputCard",1,["parser::decoding_commons::OutputCard"]],["impl<T> RefUnwindSafe for CutCompact<T>where\n T: RefUnwindSafe,",1,["parser::decoding_commons::CutCompact"]],["impl !RefUnwindSafe for Error",1,["parser::error::Error"]],["impl<'a> !RefUnwindSafe for OlderMeta<'a>",1,["parser::method::OlderMeta"]],["impl<'a> !RefUnwindSafe for MetadataBundle<'a>",1,["parser::MetadataBundle"]]], +"printing_balance":[["impl RefUnwindSafe for PrettyOutput",1,["printing_balance::PrettyOutput"]]], +"qr_reader_pc":[["impl RefUnwindSafe for CameraSettings",1,["qr_reader_pc::CameraSettings"]]], +"qr_reader_phone":[["impl !RefUnwindSafe for Error",1,["qr_reader_phone::error::Error"]],["impl RefUnwindSafe for Fountain",1,["qr_reader_phone::process_payload::Fountain"]],["impl RefUnwindSafe for LegacyMulti",1,["qr_reader_phone::process_payload::LegacyMulti"]],["impl RefUnwindSafe for BananaRecovery",1,["qr_reader_phone::process_payload::BananaRecovery"]],["impl RefUnwindSafe for Element",1,["qr_reader_phone::process_payload::Element"]],["impl RefUnwindSafe for InProgress",1,["qr_reader_phone::process_payload::InProgress"]],["impl RefUnwindSafe for Ready",1,["qr_reader_phone::process_payload::Ready"]]], +"qrcode_static":[["impl RefUnwindSafe for DataType",1,["qrcode_static::DataType"]]], +"signer":[["impl RefUnwindSafe for ErrorDisplayed",1,["signer::ErrorDisplayed"]],["impl RefUnwindSafe for QrSequenceDecodeError",1,["signer::QrSequenceDecodeError"]]], +"transaction_parsing":[["impl RefUnwindSafe for InfoPassedCrypto",1,["transaction_parsing::check_signature::InfoPassedCrypto"]],["impl !RefUnwindSafe for Error",1,["transaction_parsing::error::Error"]]], +"transaction_signing":[["impl RefUnwindSafe for SignatureType",1,["transaction_signing::sign_transaction::SignatureType"]],["impl RefUnwindSafe for SignatureAndChecksum",1,["transaction_signing::sign_transaction::SignatureAndChecksum"]],["impl !RefUnwindSafe for Error",1,["transaction_signing::error::Error"]],["impl RefUnwindSafe for SufficientContent",1,["transaction_signing::SufficientContent"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/rustdocs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js new file mode 100644 index 0000000000..0f37321c3e --- /dev/null +++ b/rustdocs/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -0,0 +1,15 @@ +(function() {var implementors = { +"db_handling":[["impl UnwindSafe for TrDbCold",1,["db_handling::db_transactions::TrDbCold"]],["impl UnwindSafe for TrDbHot",1,["db_handling::db_transactions::TrDbHot"]],["impl UnwindSafe for TrDbColdStub",1,["db_handling::db_transactions::TrDbColdStub"]],["impl UnwindSafe for TrDbColdSign",1,["db_handling::db_transactions::TrDbColdSign"]],["impl UnwindSafe for TrDbColdSignOne",1,["db_handling::db_transactions::TrDbColdSignOne"]],["impl UnwindSafe for SignContent",1,["db_handling::db_transactions::SignContent"]],["impl UnwindSafe for SpecsInvariants",1,["db_handling::helpers::SpecsInvariants"]],["impl UnwindSafe for SignaturesBulk",1,["db_handling::identities::SignaturesBulk"]],["impl UnwindSafe for SignaturesBulkV1",1,["db_handling::identities::SignaturesBulkV1"]],["impl UnwindSafe for DynamicDerivationTransaction",1,["db_handling::identities::DynamicDerivationTransaction"]],["impl UnwindSafe for TransactionBulk",1,["db_handling::identities::TransactionBulk"]],["impl UnwindSafe for TransactionBulkV1",1,["db_handling::identities::TransactionBulkV1"]],["impl UnwindSafe for ExportAddrs",1,["db_handling::identities::ExportAddrs"]],["impl UnwindSafe for ExportAddrsV1",1,["db_handling::identities::ExportAddrsV1"]],["impl UnwindSafe for ExportAddrsV2",1,["db_handling::identities::ExportAddrsV2"]],["impl UnwindSafe for VaultFeatures",1,["db_handling::identities::VaultFeatures"]],["impl UnwindSafe for SeedInfo",1,["db_handling::identities::SeedInfo"]],["impl UnwindSafe for AddrInfo",1,["db_handling::identities::AddrInfo"]],["impl UnwindSafe for DerivationCheck",1,["db_handling::identities::DerivationCheck"]],["impl UnwindSafe for SeedDraft",1,["db_handling::interface_signer::SeedDraft"]],["impl !UnwindSafe for Error",1,["db_handling::error::Error"]]], +"defaults":[["impl !UnwindSafe for Error",1,["defaults::error::Error"]]], +"definitions":[["impl UnwindSafe for Encryption",1,["definitions::crypto::Encryption"]],["impl UnwindSafe for SufficientCrypto",1,["definitions::crypto::SufficientCrypto"]],["impl UnwindSafe for DangerRecord",1,["definitions::danger::DangerRecord"]],["impl !UnwindSafe for Error",1,["definitions::error::Error"]],["impl UnwindSafe for TransferContent",1,["definitions::error::TransferContent"]],["impl UnwindSafe for MetadataError",1,["definitions::error::MetadataError"]],["impl !UnwindSafe for Wasm",1,["definitions::error_active::Wasm"]],["impl !UnwindSafe for Check",1,["definitions::error_active::Check"]],["impl UnwindSafe for GeneralVerifierForContent",1,["definitions::error_signer::GeneralVerifierForContent"]],["impl UnwindSafe for ParserError",1,["definitions::error_signer::ParserError"]],["impl UnwindSafe for ParserDecodingError",1,["definitions::error_signer::ParserDecodingError"]],["impl UnwindSafe for ParserMetadataError",1,["definitions::error_signer::ParserMetadataError"]],["impl UnwindSafe for IdenticonStyle",1,["definitions::helpers::IdenticonStyle"]],["impl UnwindSafe for MetaValuesDisplay",1,["definitions::history::MetaValuesDisplay"]],["impl UnwindSafe for MetaValuesExport",1,["definitions::history::MetaValuesExport"]],["impl UnwindSafe for NetworkSpecsDisplay",1,["definitions::history::NetworkSpecsDisplay"]],["impl UnwindSafe for NetworkSpecsExport",1,["definitions::history::NetworkSpecsExport"]],["impl UnwindSafe for NetworkVerifierDisplay",1,["definitions::history::NetworkVerifierDisplay"]],["impl UnwindSafe for TypesDisplay",1,["definitions::history::TypesDisplay"]],["impl UnwindSafe for TypesExport",1,["definitions::history::TypesExport"]],["impl UnwindSafe for IdentityHistory",1,["definitions::history::IdentityHistory"]],["impl UnwindSafe for SignDisplay",1,["definitions::history::SignDisplay"]],["impl UnwindSafe for SignMessageDisplay",1,["definitions::history::SignMessageDisplay"]],["impl UnwindSafe for Event",1,["definitions::history::Event"]],["impl UnwindSafe for Entry",1,["definitions::history::Entry"]],["impl UnwindSafe for NetworkSpecsKey",1,["definitions::keyring::NetworkSpecsKey"]],["impl UnwindSafe for VerifierKey",1,["definitions::keyring::VerifierKey"]],["impl UnwindSafe for AddressKey",1,["definitions::keyring::AddressKey"]],["impl UnwindSafe for MetaKey",1,["definitions::keyring::MetaKey"]],["impl UnwindSafe for MetaKeyPrefix",1,["definitions::keyring::MetaKeyPrefix"]],["impl UnwindSafe for Order",1,["definitions::keyring::Order"]],["impl UnwindSafe for AddressBookKey",1,["definitions::keyring::AddressBookKey"]],["impl UnwindSafe for MetaInfo",1,["definitions::metadata::MetaInfo"]],["impl UnwindSafe for MetaValues",1,["definitions::metadata::MetaValues"]],["impl !UnwindSafe for MetaSetElement",1,["definitions::metadata::MetaSetElement"]],["impl UnwindSafe for AddressBookEntry",1,["definitions::metadata::AddressBookEntry"]],["impl UnwindSafe for MetaHistoryEntry",1,["definitions::metadata::MetaHistoryEntry"]],["impl UnwindSafe for OrderedNetworkSpecs",1,["definitions::network_specs::OrderedNetworkSpecs"]],["impl UnwindSafe for NetworkSpecs",1,["definitions::network_specs::NetworkSpecs"]],["impl UnwindSafe for ShortSpecs",1,["definitions::network_specs::ShortSpecs"]],["impl UnwindSafe for NetworkProperties",1,["definitions::network_specs::NetworkProperties"]],["impl UnwindSafe for Verifier",1,["definitions::network_specs::Verifier"]],["impl UnwindSafe for VerifierValue",1,["definitions::network_specs::VerifierValue"]],["impl UnwindSafe for CurrentVerifier",1,["definitions::network_specs::CurrentVerifier"]],["impl UnwindSafe for ValidCurrentVerifier",1,["definitions::network_specs::ValidCurrentVerifier"]],["impl UnwindSafe for ContentLoadMeta",1,["definitions::qr_transfers::ContentLoadMeta"]],["impl UnwindSafe for ContentAddSpecs",1,["definitions::qr_transfers::ContentAddSpecs"]],["impl UnwindSafe for ContentLoadTypes",1,["definitions::qr_transfers::ContentLoadTypes"]],["impl UnwindSafe for TypeEntry",1,["definitions::types::TypeEntry"]],["impl UnwindSafe for Description",1,["definitions::types::Description"]],["impl UnwindSafe for EnumVariant",1,["definitions::types::EnumVariant"]],["impl UnwindSafe for EnumVariantType",1,["definitions::types::EnumVariantType"]],["impl UnwindSafe for StructField",1,["definitions::types::StructField"]],["impl UnwindSafe for AddressDetails",1,["definitions::users::AddressDetails"]],["impl UnwindSafe for SeedNameWithIdenticon",1,["definitions::navigation::SeedNameWithIdenticon"]],["impl UnwindSafe for TransactionSignAction",1,["definitions::navigation::TransactionSignAction"]],["impl UnwindSafe for TransactionAction",1,["definitions::navigation::TransactionAction"]],["impl UnwindSafe for StubNav",1,["definitions::navigation::StubNav"]],["impl UnwindSafe for FooterButton",1,["definitions::navigation::FooterButton"]],["impl UnwindSafe for RightButton",1,["definitions::navigation::RightButton"]],["impl UnwindSafe for ScreenNameType",1,["definitions::navigation::ScreenNameType"]],["impl UnwindSafe for ShieldAlert",1,["definitions::navigation::ShieldAlert"]],["impl UnwindSafe for AlertData",1,["definitions::navigation::AlertData"]],["impl UnwindSafe for ActionResult",1,["definitions::navigation::ActionResult"]],["impl UnwindSafe for LogScreenEntry",1,["definitions::navigation::LogScreenEntry"]],["impl UnwindSafe for ScreenData",1,["definitions::navigation::ScreenData"]],["impl UnwindSafe for MKeysCard",1,["definitions::navigation::MKeysCard"]],["impl UnwindSafe for MKeysNew",1,["definitions::navigation::MKeysNew"]],["impl UnwindSafe for MKeyAndNetworkCard",1,["definitions::navigation::MKeyAndNetworkCard"]],["impl UnwindSafe for MNetworkCard",1,["definitions::navigation::MNetworkCard"]],["impl UnwindSafe for MSettings",1,["definitions::navigation::MSettings"]],["impl UnwindSafe for History",1,["definitions::navigation::History"]],["impl UnwindSafe for MLog",1,["definitions::navigation::MLog"]],["impl UnwindSafe for MEventMaybeDecoded",1,["definitions::navigation::MEventMaybeDecoded"]],["impl UnwindSafe for MLogDetails",1,["definitions::navigation::MLogDetails"]],["impl UnwindSafe for TransactionType",1,["definitions::navigation::TransactionType"]],["impl UnwindSafe for TransactionCard",1,["definitions::navigation::TransactionCard"]],["impl UnwindSafe for BananaSplitRecoveryResult",1,["definitions::navigation::BananaSplitRecoveryResult"]],["impl UnwindSafe for DecodeSequenceResult",1,["definitions::navigation::DecodeSequenceResult"]],["impl UnwindSafe for TransactionCardSet",1,["definitions::navigation::TransactionCardSet"]],["impl UnwindSafe for MTransaction",1,["definitions::navigation::MTransaction"]],["impl UnwindSafe for MSignedTransaction",1,["definitions::navigation::MSignedTransaction"]],["impl UnwindSafe for SeedNameCard",1,["definitions::navigation::SeedNameCard"]],["impl UnwindSafe for MSeeds",1,["definitions::navigation::MSeeds"]],["impl UnwindSafe for MKeyDetails",1,["definitions::navigation::MKeyDetails"]],["impl UnwindSafe for MNewSeed",1,["definitions::navigation::MNewSeed"]],["impl UnwindSafe for MRecoverSeedName",1,["definitions::navigation::MRecoverSeedName"]],["impl UnwindSafe for MRecoverSeedPhrase",1,["definitions::navigation::MRecoverSeedPhrase"]],["impl UnwindSafe for DerivationCheck",1,["definitions::navigation::DerivationCheck"]],["impl UnwindSafe for Address",1,["definitions::navigation::Address"]],["impl UnwindSafe for MAddressCard",1,["definitions::navigation::MAddressCard"]],["impl UnwindSafe for DerivationDestination",1,["definitions::navigation::DerivationDestination"]],["impl UnwindSafe for MDeriveKey",1,["definitions::navigation::MDeriveKey"]],["impl UnwindSafe for MVerifierDetails",1,["definitions::navigation::MVerifierDetails"]],["impl UnwindSafe for MVerifier",1,["definitions::navigation::MVerifier"]],["impl UnwindSafe for MMetadataRecord",1,["definitions::navigation::MMetadataRecord"]],["impl UnwindSafe for MNetworkDetails",1,["definitions::navigation::MNetworkDetails"]],["impl UnwindSafe for MRawKey",1,["definitions::navigation::MRawKey"]],["impl UnwindSafe for MSignSufficientCrypto",1,["definitions::navigation::MSignSufficientCrypto"]],["impl UnwindSafe for MKeyDetailsMulti",1,["definitions::navigation::MKeyDetailsMulti"]],["impl UnwindSafe for MMNetwork",1,["definitions::navigation::MMNetwork"]],["impl UnwindSafe for MManageNetworks",1,["definitions::navigation::MManageNetworks"]],["impl UnwindSafe for ExportedSet",1,["definitions::navigation::ExportedSet"]],["impl UnwindSafe for PathAndNetwork",1,["definitions::navigation::PathAndNetwork"]],["impl UnwindSafe for MSCContent",1,["definitions::navigation::MSCContent"]],["impl UnwindSafe for QrData",1,["definitions::navigation::QrData"]],["impl UnwindSafe for MSufficientCryptoReady",1,["definitions::navigation::MSufficientCryptoReady"]],["impl UnwindSafe for DerivationEntry",1,["definitions::navigation::DerivationEntry"]],["impl UnwindSafe for DerivationPack",1,["definitions::navigation::DerivationPack"]],["impl UnwindSafe for MBackup",1,["definitions::navigation::MBackup"]],["impl UnwindSafe for MSeedMenu",1,["definitions::navigation::MSeedMenu"]],["impl UnwindSafe for MNewSeedBackup",1,["definitions::navigation::MNewSeedBackup"]],["impl UnwindSafe for Network",1,["definitions::navigation::Network"]],["impl UnwindSafe for MNetworkMenu",1,["definitions::navigation::MNetworkMenu"]],["impl UnwindSafe for MPasswordConfirm",1,["definitions::navigation::MPasswordConfirm"]],["impl UnwindSafe for MSignatureReady",1,["definitions::navigation::MSignatureReady"]],["impl UnwindSafe for MEnterPassword",1,["definitions::navigation::MEnterPassword"]],["impl UnwindSafe for MLogRight",1,["definitions::navigation::MLogRight"]],["impl UnwindSafe for MMMNetwork",1,["definitions::navigation::MMMNetwork"]],["impl UnwindSafe for MManageMetadata",1,["definitions::navigation::MManageMetadata"]],["impl UnwindSafe for MTypesInfo",1,["definitions::navigation::MTypesInfo"]],["impl UnwindSafe for ModalData",1,["definitions::navigation::ModalData"]],["impl UnwindSafe for MSCCall",1,["definitions::navigation::MSCCall"]],["impl UnwindSafe for MSCCurrency",1,["definitions::navigation::MSCCurrency"]],["impl UnwindSafe for MSCEnumVariantName",1,["definitions::navigation::MSCEnumVariantName"]],["impl UnwindSafe for MSCEraMortal",1,["definitions::navigation::MSCEraMortal"]],["impl UnwindSafe for MSCFieldName",1,["definitions::navigation::MSCFieldName"]],["impl UnwindSafe for MSCFieldNumber",1,["definitions::navigation::MSCFieldNumber"]],["impl UnwindSafe for Identicon",1,["definitions::navigation::Identicon"]],["impl UnwindSafe for MSCId",1,["definitions::navigation::MSCId"]],["impl UnwindSafe for MSCNameVersion",1,["definitions::navigation::MSCNameVersion"]],["impl UnwindSafe for MSCNetworkInfo",1,["definitions::navigation::MSCNetworkInfo"]],["impl UnwindSafe for DDPreview",1,["definitions::navigation::DDPreview"]],["impl UnwindSafe for DDKeySet",1,["definitions::navigation::DDKeySet"]],["impl UnwindSafe for DDDetail",1,["definitions::navigation::DDDetail"]],["impl UnwindSafe for MSCTip",1,["definitions::navigation::MSCTip"]],["impl UnwindSafe for MSCTxSpecPlain",1,["definitions::navigation::MSCTxSpecPlain"]],["impl UnwindSafe for MKeysInfoExport",1,["definitions::navigation::MKeysInfoExport"]],["impl UnwindSafe for Card",1,["definitions::navigation::Card"]],["impl UnwindSafe for SeedKeysPreview",1,["definitions::derivations::SeedKeysPreview"]],["impl UnwindSafe for DerivedKeyPreview",1,["definitions::derivations::DerivedKeyPreview"]],["impl UnwindSafe for DerivedKeyStatus",1,["definitions::derivations::DerivedKeyStatus"]],["impl UnwindSafe for DerivedKeyError",1,["definitions::derivations::DerivedKeyError"]],["impl UnwindSafe for DynamicDerivationsRequest",1,["definitions::dynamic_derivations::DynamicDerivationsRequest"]],["impl UnwindSafe for DynamicDerivationsAddressRequestV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressRequestV1"]],["impl UnwindSafe for DynamicDerivationsRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationsRequestInfo"]],["impl UnwindSafe for DynamicDerivationRequestInfo",1,["definitions::dynamic_derivations::DynamicDerivationRequestInfo"]],["impl UnwindSafe for DynamicDerivationsAddressResponse",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponse"]],["impl UnwindSafe for DynamicDerivationsAddressResponseV1",1,["definitions::dynamic_derivations::DynamicDerivationsAddressResponseV1"]],["impl UnwindSafe for DynamicDerivationsResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationsResponseInfo"]],["impl UnwindSafe for DynamicDerivationResponseInfo",1,["definitions::dynamic_derivations::DynamicDerivationResponseInfo"]],["impl UnwindSafe for SchemaVersion",1,["definitions::schema_version::SchemaVersion"]]], +"generate_message":[["impl UnwindSafe for FetchedInfo",1,["generate_message::fetch_metadata::FetchedInfo"]],["impl UnwindSafe for FetchedInfoWithNetworkSpecs",1,["generate_message::fetch_metadata::FetchedInfoWithNetworkSpecs"]],["impl UnwindSafe for Write",1,["generate_message::helpers::Write"]],["impl UnwindSafe for MetaValuesStamped",1,["generate_message::helpers::MetaValuesStamped"]],["impl UnwindSafe for SortedMetaValues",1,["generate_message::helpers::SortedMetaValues"]],["impl UnwindSafe for MetaShortCut",1,["generate_message::helpers::MetaShortCut"]],["impl UnwindSafe for MetaFetched",1,["generate_message::helpers::MetaFetched"]],["impl UnwindSafe for TokenFetch",1,["generate_message::interpret_specs::TokenFetch"]],["impl UnwindSafe for Cli",1,["generate_message::parser::Cli"]],["impl UnwindSafe for Command",1,["generate_message::parser::Command"]],["impl UnwindSafe for Show",1,["generate_message::parser::Show"]],["impl UnwindSafe for InstructionMeta",1,["generate_message::parser::InstructionMeta"]],["impl UnwindSafe for InstructionSpecs",1,["generate_message::parser::InstructionSpecs"]],["impl UnwindSafe for ContentArgs",1,["generate_message::parser::ContentArgs"]],["impl UnwindSafe for Content",1,["generate_message::parser::Content"]],["impl UnwindSafe for Set",1,["generate_message::parser::Set"]],["impl UnwindSafe for SetFlags",1,["generate_message::parser::SetFlags"]],["impl UnwindSafe for Make",1,["generate_message::parser::Make"]],["impl UnwindSafe for Goal",1,["generate_message::parser::Goal"]],["impl UnwindSafe for Verifier",1,["generate_message::parser::Verifier"]],["impl UnwindSafe for Crypto",1,["generate_message::parser::Crypto"]],["impl UnwindSafe for Signature",1,["generate_message::parser::Signature"]],["impl UnwindSafe for Sufficient",1,["generate_message::parser::Sufficient"]],["impl UnwindSafe for Msg",1,["generate_message::parser::Msg"]],["impl UnwindSafe for Remove",1,["generate_message::parser::Remove"]],["impl UnwindSafe for Derivations",1,["generate_message::parser::Derivations"]],["impl UnwindSafe for Override",1,["generate_message::parser::Override"]],["impl UnwindSafe for Token",1,["generate_message::parser::Token"]],["impl !UnwindSafe for Error",1,["generate_message::error::Error"]]], +"navigator":[["impl !UnwindSafe for Error",1,["navigator::error::Error"]],["impl UnwindSafe for Action",1,["navigator::actions::Action"]],["impl UnwindSafe for Alert",1,["navigator::alerts::Alert"]],["impl UnwindSafe for Modal",1,["navigator::modals::Modal"]],["impl UnwindSafe for Screen",1,["navigator::screens::Screen"]],["impl UnwindSafe for SpecialtyKeysState",1,["navigator::screens::SpecialtyKeysState"]],["impl UnwindSafe for KeysState",1,["navigator::screens::KeysState"]],["impl UnwindSafe for AddressState",1,["navigator::screens::AddressState"]],["impl UnwindSafe for AddressStateMulti",1,["navigator::screens::AddressStateMulti"]],["impl UnwindSafe for DeriveState",1,["navigator::screens::DeriveState"]],["impl UnwindSafe for SufficientCryptoState",1,["navigator::screens::SufficientCryptoState"]],["impl UnwindSafe for RecoverSeedPhraseState",1,["navigator::screens::RecoverSeedPhraseState"]],["impl UnwindSafe for EnteredInfo",1,["navigator::screens::EnteredInfo"]],["impl UnwindSafe for STATE",1,["navigator::STATE"]]], +"parser":[["impl UnwindSafe for ParserCard",1,["parser::cards::ParserCard"]],["impl UnwindSafe for OutputCard",1,["parser::decoding_commons::OutputCard"]],["impl<T> UnwindSafe for CutCompact<T>where\n T: UnwindSafe,",1,["parser::decoding_commons::CutCompact"]],["impl !UnwindSafe for Error",1,["parser::error::Error"]],["impl<'a> !UnwindSafe for OlderMeta<'a>",1,["parser::method::OlderMeta"]],["impl<'a> !UnwindSafe for MetadataBundle<'a>",1,["parser::MetadataBundle"]]], +"printing_balance":[["impl UnwindSafe for PrettyOutput",1,["printing_balance::PrettyOutput"]]], +"qr_reader_pc":[["impl UnwindSafe for CameraSettings",1,["qr_reader_pc::CameraSettings"]]], +"qr_reader_phone":[["impl !UnwindSafe for Error",1,["qr_reader_phone::error::Error"]],["impl UnwindSafe for Fountain",1,["qr_reader_phone::process_payload::Fountain"]],["impl UnwindSafe for LegacyMulti",1,["qr_reader_phone::process_payload::LegacyMulti"]],["impl UnwindSafe for BananaRecovery",1,["qr_reader_phone::process_payload::BananaRecovery"]],["impl UnwindSafe for Element",1,["qr_reader_phone::process_payload::Element"]],["impl UnwindSafe for InProgress",1,["qr_reader_phone::process_payload::InProgress"]],["impl UnwindSafe for Ready",1,["qr_reader_phone::process_payload::Ready"]]], +"qrcode_static":[["impl UnwindSafe for DataType",1,["qrcode_static::DataType"]]], +"signer":[["impl UnwindSafe for ErrorDisplayed",1,["signer::ErrorDisplayed"]],["impl UnwindSafe for QrSequenceDecodeError",1,["signer::QrSequenceDecodeError"]]], +"transaction_parsing":[["impl UnwindSafe for InfoPassedCrypto",1,["transaction_parsing::check_signature::InfoPassedCrypto"]],["impl !UnwindSafe for Error",1,["transaction_parsing::error::Error"]]], +"transaction_signing":[["impl UnwindSafe for SignatureType",1,["transaction_signing::sign_transaction::SignatureType"]],["impl UnwindSafe for SignatureAndChecksum",1,["transaction_signing::sign_transaction::SignatureAndChecksum"]],["impl !UnwindSafe for Error",1,["transaction_signing::error::Error"]],["impl UnwindSafe for SufficientContent",1,["transaction_signing::SufficientContent"]]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/core/str/traits/trait.FromStr.js b/rustdocs/implementors/core/str/traits/trait.FromStr.js new file mode 100644 index 0000000000..8dc7fe3288 --- /dev/null +++ b/rustdocs/implementors/core/str/traits/trait.FromStr.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"signer":[["impl FromStr for ErrorDisplayed"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/lazy_static/trait.LazyStatic.js b/rustdocs/implementors/lazy_static/trait.LazyStatic.js new file mode 100644 index 0000000000..7f77d4908d --- /dev/null +++ b/rustdocs/implementors/lazy_static/trait.LazyStatic.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"navigator":[["impl LazyStatic for STATE"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/parity_scale_codec/codec/trait.Decode.js b/rustdocs/implementors/parity_scale_codec/codec/trait.Decode.js new file mode 100644 index 0000000000..72e75e1388 --- /dev/null +++ b/rustdocs/implementors/parity_scale_codec/codec/trait.Decode.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"db_handling":[["impl Decode for ExportAddrsV1"],["impl Decode for SignContent"],["impl Decode for VaultFeatures"],["impl Decode for SeedInfo"],["impl Decode for TrDbColdSign"],["impl Decode for SignaturesBulk"],["impl Decode for AddrInfo"],["impl Decode for DynamicDerivationTransaction"],["impl Decode for TransactionBulk"],["impl Decode for TrDbColdSignOne"],["impl Decode for SignaturesBulkV1"],["impl Decode for TrDbColdStub"],["impl Decode for ExportAddrsV2"],["impl Decode for TransactionBulkV1"],["impl Decode for ExportAddrs"]], +"definitions":[["impl Decode for MetaInfo"],["impl Decode for CurrentVerifier"],["impl Decode for ContentAddSpecs"],["impl Decode for VerifierKey"],["impl Decode for EnumVariantType"],["impl Decode for Description"],["impl Decode for IdentityHistory"],["impl Decode for NetworkSpecsExport"],["impl Decode for OrderedNetworkSpecs"],["impl Decode for VerifierValue"],["impl Decode for TypesExport"],["impl Decode for DynamicDerivationRequestInfo"],["impl Decode for SignMessageDisplay"],["impl Decode for ContentLoadTypes"],["impl Decode for NetworkProperties"],["impl Decode for SignDisplay"],["impl Decode for DynamicDerivationsAddressResponseV1"],["impl Decode for StructField"],["impl Decode for NetworkSpecsKey"],["impl Decode for MetaValuesDisplay"],["impl Decode for ValidCurrentVerifier"],["impl Decode for MetaValuesExport"],["impl Decode for AddressDetails"],["impl Decode for Encryption"],["impl Decode for NetworkVerifierDisplay"],["impl Decode for Verifier"],["impl Decode for TypesDisplay"],["impl Decode for DynamicDerivationsRequest"],["impl Decode for NetworkSpecs"],["impl Decode for AddressBookEntry"],["impl Decode for DynamicDerivationResponseInfo"],["impl Decode for EnumVariant"],["impl Decode for DynamicDerivationsResponseInfo"],["impl Decode for DynamicDerivationsAddressResponse"],["impl Decode for SchemaVersion"],["impl Decode for SufficientCrypto"],["impl Decode for ShortSpecs"],["impl Decode for DynamicDerivationsRequestInfo"],["impl Decode for Entry"],["impl Decode for TypeEntry"],["impl Decode for DynamicDerivationsAddressRequestV1"],["impl Decode for Event"],["impl Decode for NetworkSpecsDisplay"],["impl Decode for AddressKey"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/parity_scale_codec/codec/trait.Encode.js b/rustdocs/implementors/parity_scale_codec/codec/trait.Encode.js new file mode 100644 index 0000000000..9c993ca947 --- /dev/null +++ b/rustdocs/implementors/parity_scale_codec/codec/trait.Encode.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"db_handling":[["impl Encode for AddrInfo"],["impl Encode for TrDbColdSignOne"],["impl Encode for ExportAddrsV1"],["impl Encode for DynamicDerivationTransaction"],["impl Encode for ExportAddrs"],["impl Encode for SeedInfo"],["impl Encode for VaultFeatures"],["impl Encode for SignContent"],["impl Encode for TrDbColdSign"],["impl Encode for TransactionBulk"],["impl Encode for SignaturesBulk"],["impl Encode for TransactionBulkV1"],["impl Encode for TrDbColdStub"],["impl Encode for ExportAddrsV2"],["impl Encode for SignaturesBulkV1"]], +"definitions":[["impl Encode for StructField"],["impl Encode for Encryption"],["impl Encode for NetworkVerifierDisplay"],["impl Encode for DynamicDerivationsRequestInfo"],["impl Encode for VerifierValue"],["impl Encode for OrderedNetworkSpecs"],["impl Encode for DynamicDerivationsAddressRequestV1"],["impl Encode for Event"],["impl Encode for ContentLoadTypes"],["impl Encode for ValidCurrentVerifier"],["impl Encode for EnumVariant"],["impl Encode for DynamicDerivationsRequest"],["impl Encode for Verifier"],["impl Encode for SignDisplay"],["impl Encode for NetworkSpecsKey"],["impl Encode for SchemaVersion"],["impl Encode for NetworkProperties"],["impl Encode for DynamicDerivationsResponseInfo"],["impl Encode for IdentityHistory"],["impl Encode for MetaValuesDisplay"],["impl Encode for VerifierKey"],["impl Encode for DynamicDerivationResponseInfo"],["impl Encode for MetaInfo"],["impl Encode for DynamicDerivationsAddressResponseV1"],["impl Encode for NetworkSpecsDisplay"],["impl Encode for DynamicDerivationsAddressResponse"],["impl Encode for SignMessageDisplay"],["impl Encode for AddressBookEntry"],["impl Encode for NetworkSpecsExport"],["impl Encode for DynamicDerivationRequestInfo"],["impl Encode for NetworkSpecs"],["impl Encode for TypeEntry"],["impl Encode for TypesDisplay"],["impl Encode for EnumVariantType"],["impl Encode for Entry"],["impl Encode for AddressDetails"],["impl Encode for SufficientCrypto"],["impl Encode for TypesExport"],["impl Encode for AddressKey"],["impl Encode for CurrentVerifier"],["impl Encode for Description"],["impl Encode for ContentAddSpecs"],["impl Encode for ShortSpecs"],["impl Encode for MetaValuesExport"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/parity_scale_codec/encode_like/trait.EncodeLike.js b/rustdocs/implementors/parity_scale_codec/encode_like/trait.EncodeLike.js new file mode 100644 index 0000000000..e7f4cc4df0 --- /dev/null +++ b/rustdocs/implementors/parity_scale_codec/encode_like/trait.EncodeLike.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"db_handling":[["impl EncodeLike<TransactionBulkV1> for TransactionBulkV1"],["impl EncodeLike<SignaturesBulk> for SignaturesBulk"],["impl EncodeLike<SignContent> for SignContent"],["impl EncodeLike<TrDbColdSign> for TrDbColdSign"],["impl EncodeLike<SeedInfo> for SeedInfo"],["impl EncodeLike<TransactionBulk> for TransactionBulk"],["impl EncodeLike<ExportAddrsV2> for ExportAddrsV2"],["impl EncodeLike<TrDbColdSignOne> for TrDbColdSignOne"],["impl EncodeLike<VaultFeatures> for VaultFeatures"],["impl EncodeLike<SignaturesBulkV1> for SignaturesBulkV1"],["impl EncodeLike<ExportAddrsV1> for ExportAddrsV1"],["impl EncodeLike<ExportAddrs> for ExportAddrs"],["impl EncodeLike<TrDbColdStub> for TrDbColdStub"],["impl EncodeLike<AddrInfo> for AddrInfo"],["impl EncodeLike<DynamicDerivationTransaction> for DynamicDerivationTransaction"]], +"definitions":[["impl EncodeLike<ShortSpecs> for ShortSpecs"],["impl EncodeLike<NetworkSpecsKey> for NetworkSpecsKey"],["impl EncodeLike<OrderedNetworkSpecs> for OrderedNetworkSpecs"],["impl EncodeLike<NetworkVerifierDisplay> for NetworkVerifierDisplay"],["impl EncodeLike<CurrentVerifier> for CurrentVerifier"],["impl EncodeLike<VerifierKey> for VerifierKey"],["impl EncodeLike<TypesExport> for TypesExport"],["impl EncodeLike<AddressBookEntry> for AddressBookEntry"],["impl EncodeLike<DynamicDerivationsAddressRequestV1> for DynamicDerivationsAddressRequestV1"],["impl EncodeLike<StructField> for StructField"],["impl EncodeLike<MetaValuesDisplay> for MetaValuesDisplay"],["impl EncodeLike<DynamicDerivationsResponseInfo> for DynamicDerivationsResponseInfo"],["impl EncodeLike<NetworkProperties> for NetworkProperties"],["impl EncodeLike<Event> for Event"],["impl EncodeLike<ContentLoadTypes> for ContentLoadTypes"],["impl EncodeLike<DynamicDerivationRequestInfo> for DynamicDerivationRequestInfo"],["impl EncodeLike<EnumVariant> for EnumVariant"],["impl EncodeLike<Encryption> for Encryption"],["impl EncodeLike<MetaValuesExport> for MetaValuesExport"],["impl EncodeLike<DynamicDerivationResponseInfo> for DynamicDerivationResponseInfo"],["impl EncodeLike<TypeEntry> for TypeEntry"],["impl EncodeLike<ValidCurrentVerifier> for ValidCurrentVerifier"],["impl EncodeLike<NetworkSpecsExport> for NetworkSpecsExport"],["impl EncodeLike<DynamicDerivationsAddressResponseV1> for DynamicDerivationsAddressResponseV1"],["impl EncodeLike<SchemaVersion> for SchemaVersion"],["impl EncodeLike<Verifier> for Verifier"],["impl EncodeLike<DynamicDerivationsRequest> for DynamicDerivationsRequest"],["impl EncodeLike<EnumVariantType> for EnumVariantType"],["impl EncodeLike<DynamicDerivationsAddressResponse> for DynamicDerivationsAddressResponse"],["impl EncodeLike<Entry> for Entry"],["impl EncodeLike<MetaInfo> for MetaInfo"],["impl EncodeLike<VerifierValue> for VerifierValue"],["impl EncodeLike<SignMessageDisplay> for SignMessageDisplay"],["impl EncodeLike<SufficientCrypto> for SufficientCrypto"],["impl EncodeLike<SignDisplay> for SignDisplay"],["impl EncodeLike<ContentAddSpecs> for ContentAddSpecs"],["impl EncodeLike<AddressDetails> for AddressDetails"],["impl EncodeLike<DynamicDerivationsRequestInfo> for DynamicDerivationsRequestInfo"],["impl EncodeLike<NetworkSpecs> for NetworkSpecs"],["impl EncodeLike<Description> for Description"],["impl EncodeLike<AddressKey> for AddressKey"],["impl EncodeLike<IdentityHistory> for IdentityHistory"],["impl EncodeLike<NetworkSpecsDisplay> for NetworkSpecsDisplay"],["impl EncodeLike<TypesDisplay> for TypesDisplay"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/zeroize/trait.Zeroize.js b/rustdocs/implementors/zeroize/trait.Zeroize.js new file mode 100644 index 0000000000..42cc17832e --- /dev/null +++ b/rustdocs/implementors/zeroize/trait.Zeroize.js @@ -0,0 +1,4 @@ +(function() {var implementors = { +"db_handling":[["impl Zeroize for SeedDraft"]], +"navigator":[["impl Zeroize for EnteredInfo"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/implementors/zeroize/trait.ZeroizeOnDrop.js b/rustdocs/implementors/zeroize/trait.ZeroizeOnDrop.js new file mode 100644 index 0000000000..1d266626b8 --- /dev/null +++ b/rustdocs/implementors/zeroize/trait.ZeroizeOnDrop.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"db_handling":[["impl ZeroizeOnDrop for SeedDraft"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdocs/navigator/actions/enum.Action.html b/rustdocs/navigator/actions/enum.Action.html new file mode 100644 index 0000000000..a13f0e86e8 --- /dev/null +++ b/rustdocs/navigator/actions/enum.Action.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../navigator/enum.Action.html...

+ + + \ No newline at end of file diff --git a/rustdocs/navigator/alerts/enum.Alert.html b/rustdocs/navigator/alerts/enum.Alert.html new file mode 100644 index 0000000000..8026bedee0 --- /dev/null +++ b/rustdocs/navigator/alerts/enum.Alert.html @@ -0,0 +1,127 @@ +Alert in navigator::alerts - Rust

Enum navigator::alerts::Alert

source ·
pub enum Alert {
+    Empty,
+    Error,
+    ErrorDisplay,
+    Shield,
+}

Variants§

§

Empty

§

Error

§

ErrorDisplay

§

Shield

Implementations§

source§

impl Alert

source

pub fn get_name(&self) -> String

Trait Implementations§

source§

impl Clone for Alert

source§

fn clone(&self) -> Alert

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Alert

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<Alert> for Alert

source§

fn eq(&self, other: &Alert) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Copy for Alert

source§

impl Eq for Alert

source§

impl StructuralEq for Alert

source§

impl StructuralPartialEq for Alert

Auto Trait Implementations§

§

impl RefUnwindSafe for Alert

§

impl Send for Alert

§

impl Sync for Alert

§

impl Unpin for Alert

§

impl UnwindSafe for Alert

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/navigator/alerts/index.html b/rustdocs/navigator/alerts/index.html new file mode 100644 index 0000000000..0a48107139 --- /dev/null +++ b/rustdocs/navigator/alerts/index.html @@ -0,0 +1,2 @@ +navigator::alerts - Rust

Module navigator::alerts

source ·
Expand description

List of all alerts

+

Enums

\ No newline at end of file diff --git a/rustdocs/navigator/alerts/sidebar-items.js b/rustdocs/navigator/alerts/sidebar-items.js new file mode 100644 index 0000000000..edbfcc76f7 --- /dev/null +++ b/rustdocs/navigator/alerts/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Alert"]}; \ No newline at end of file diff --git a/rustdocs/navigator/all.html b/rustdocs/navigator/all.html new file mode 100644 index 0000000000..c3502068ec --- /dev/null +++ b/rustdocs/navigator/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/navigator/enum.Action.html b/rustdocs/navigator/enum.Action.html new file mode 100644 index 0000000000..e0dd3f36b9 --- /dev/null +++ b/rustdocs/navigator/enum.Action.html @@ -0,0 +1,158 @@ +Action in navigator - Rust

Enum navigator::Action

source ·
pub enum Action {
+
Show 37 variants Start, + NavbarLog, + NavbarScan, + NavbarKeys, + NavbarSettings, + GoBack, + GoForward, + SelectSeed, + SelectKey, + NewKey, + RightButtonAction, + Shield, + NewSeed, + RecoverSeed, + BackupSeed, + NetworkSelector, + CheckPassword, + TransactionFetched, + RemoveNetwork, + RemoveMetadata, + RemoveTypes, + SignNetworkSpecs, + SignMetadata, + SignTypes, + ManageNetworks, + ViewGeneralVerifier, + ManageMetadata, + RemoveKey, + RemoveSeed, + ClearLog, + CreateLogComment, + ShowLogDetails, + Increment, + ShowDocuments, + TextEntry, + PushWord, + Nothing, +
}
Expand description

All actions

+

Variants§

§

Start

§

NavbarLog

§

NavbarScan

§

NavbarKeys

§

NavbarSettings

§

GoBack

§

GoForward

§

SelectSeed

§

SelectKey

§

NewKey

§

RightButtonAction

§

Shield

§

NewSeed

§

RecoverSeed

§

BackupSeed

§

NetworkSelector

§

CheckPassword

§

TransactionFetched

§

RemoveNetwork

§

RemoveMetadata

§

RemoveTypes

§

SignNetworkSpecs

§

SignMetadata

§

SignTypes

§

ManageNetworks

§

ViewGeneralVerifier

§

ManageMetadata

§

RemoveKey

§

RemoveSeed

§

ClearLog

§

CreateLogComment

§

ShowLogDetails

§

Increment

§

ShowDocuments

§

TextEntry

§

PushWord

§

Nothing

Trait Implementations§

source§

impl Debug for Action

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<Action> for Action

source§

fn eq(&self, other: &Action) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Action

source§

impl StructuralEq for Action

source§

impl StructuralPartialEq for Action

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/enum.Error.html b/rustdocs/navigator/enum.Error.html new file mode 100644 index 0000000000..13d2cbef59 --- /dev/null +++ b/rustdocs/navigator/enum.Error.html @@ -0,0 +1,135 @@ +Error in navigator - Rust

Enum navigator::Error

source ·
pub enum Error {
+
Show 15 variants DbHandling(Error), + Definitions(Error), + TransactionParsing(Error), + Hex(FromHexError), + DbNotInitialized, + KeyNotFound(String), + MutexPoisoned, + DataPacking(String), + TxActionNotSign, + SeedsNumMismatch(usize, usize), + TransactionSigning(Error), + TransactionActionUnsupported, + NoTransactionsToSign, + NoSeedPhrase, + NoNetwork(String), +
}

Variants§

§

DbHandling(Error)

§

Definitions(Error)

§

TransactionParsing(Error)

§

Hex(FromHexError)

§

DbNotInitialized

§

KeyNotFound(String)

§

MutexPoisoned

§

DataPacking(String)

§

TxActionNotSign

§

SeedsNumMismatch(usize, usize)

§

TransactionSigning(Error)

§

TransactionActionUnsupported

§

NoTransactionsToSign

§

NoSeedPhrase

§

NoNetwork(String)

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<FromHexError> for Error

source§

fn from(source: FromHexError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/navigator/error/enum.Error.html b/rustdocs/navigator/error/enum.Error.html new file mode 100644 index 0000000000..0fb6cd53b3 --- /dev/null +++ b/rustdocs/navigator/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../navigator/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/navigator/error/type.Result.html b/rustdocs/navigator/error/type.Result.html new file mode 100644 index 0000000000..0ed8ff128f --- /dev/null +++ b/rustdocs/navigator/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../navigator/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/navigator/fn.do_action.html b/rustdocs/navigator/fn.do_action.html new file mode 100644 index 0000000000..27e2c9dd25 --- /dev/null +++ b/rustdocs/navigator/fn.do_action.html @@ -0,0 +1,8 @@ +do_action in navigator - Rust

Function navigator::do_action

source ·
pub fn do_action(
+    action: Action,
+    details_str: &str,
+    secret_seed_phrase: &str
+) -> Result<ActionResult>
Expand description

User actions handler.

+

This method is called on every user Action in the UI, performs changes in backend +and returns new UI information as ActionResult.

+
\ No newline at end of file diff --git a/rustdocs/navigator/fn.export_key_info.html b/rustdocs/navigator/fn.export_key_info.html new file mode 100644 index 0000000000..e6ed7ac2eb --- /dev/null +++ b/rustdocs/navigator/fn.export_key_info.html @@ -0,0 +1,6 @@ +export_key_info in navigator - Rust

Function navigator::export_key_info

source ·
pub fn export_key_info(
+    database: &Db,
+    seed_name: &str,
+    exported_set: ExportedSet
+) -> Result<MKeysInfoExport>
Expand description

Export key info with derivations.

+
\ No newline at end of file diff --git a/rustdocs/navigator/fn.export_signatures_bulk.html b/rustdocs/navigator/fn.export_signatures_bulk.html new file mode 100644 index 0000000000..22bce684b7 --- /dev/null +++ b/rustdocs/navigator/fn.export_signatures_bulk.html @@ -0,0 +1,4 @@ +export_signatures_bulk in navigator - Rust
pub fn export_signatures_bulk(
+    signatures: &[(MultiSignature, SignatureType)]
+) -> Result<MSignatureReady>
Expand description

Export signatures bulk.

+
\ No newline at end of file diff --git a/rustdocs/navigator/fn.init_navigation.html b/rustdocs/navigator/fn.init_navigation.html new file mode 100644 index 0000000000..13fb5d5cfa --- /dev/null +++ b/rustdocs/navigator/fn.init_navigation.html @@ -0,0 +1,2 @@ +init_navigation in navigator - Rust

Function navigator::init_navigation

source ·
pub fn init_navigation(db: Db, seed_names: Vec<String>) -> Result<()>
Expand description

Should be called in the beginning to recall things stored only by phone

+
\ No newline at end of file diff --git a/rustdocs/navigator/fn.keys_by_seed_name.html b/rustdocs/navigator/fn.keys_by_seed_name.html new file mode 100644 index 0000000000..5d9bd1826c --- /dev/null +++ b/rustdocs/navigator/fn.keys_by_seed_name.html @@ -0,0 +1,2 @@ +keys_by_seed_name in navigator - Rust
pub fn keys_by_seed_name(database: &Db, seed_name: &str) -> Result<MKeysNew>
Expand description

Get keys by seed name

+
\ No newline at end of file diff --git a/rustdocs/navigator/fn.sign_dd_transaction.html b/rustdocs/navigator/fn.sign_dd_transaction.html new file mode 100644 index 0000000000..1e659b4eed --- /dev/null +++ b/rustdocs/navigator/fn.sign_dd_transaction.html @@ -0,0 +1,6 @@ +sign_dd_transaction in navigator - Rust
pub fn sign_dd_transaction(
+    database: &Db,
+    payload_set: &[String],
+    seeds: HashMap<String, String>
+) -> Result<MSignedTransaction>
Expand description

Sign dynamic derivation transaction and return data for mobile

+
\ No newline at end of file diff --git a/rustdocs/navigator/fn.sign_sufficient_content.html b/rustdocs/navigator/fn.sign_sufficient_content.html new file mode 100644 index 0000000000..c2df08ad9d --- /dev/null +++ b/rustdocs/navigator/fn.sign_sufficient_content.html @@ -0,0 +1,7 @@ +sign_sufficient_content in navigator - Rust
pub fn sign_sufficient_content(
+    database: &Db,
+    address_key: &AddressKey,
+    sufficient_content: SufficientContent,
+    seed_phrase: &str,
+    pwd_entry: &str
+) -> Result<MSufficientCryptoReady>
\ No newline at end of file diff --git a/rustdocs/navigator/fn.update_seed_names.html b/rustdocs/navigator/fn.update_seed_names.html new file mode 100644 index 0000000000..8bb5ca2339 --- /dev/null +++ b/rustdocs/navigator/fn.update_seed_names.html @@ -0,0 +1,2 @@ +update_seed_names in navigator - Rust
pub fn update_seed_names(seed_names: Vec<String>) -> Result<()>
Expand description

Should be called when seed names are modified in native to synchronize data

+
\ No newline at end of file diff --git a/rustdocs/navigator/index.html b/rustdocs/navigator/index.html new file mode 100644 index 0000000000..b5eb57b1e2 --- /dev/null +++ b/rustdocs/navigator/index.html @@ -0,0 +1,3 @@ +navigator - Rust

Crate navigator

source ·
Expand description

This is experimental cross-platform navigation for Vault. +Ideally it should replace almost everything and become the only interface

+

Modules

Structs

  • Navigation state of the app

Enums

Functions

Type Definitions

\ No newline at end of file diff --git a/rustdocs/navigator/modals/enum.Modal.html b/rustdocs/navigator/modals/enum.Modal.html new file mode 100644 index 0000000000..28268ed627 --- /dev/null +++ b/rustdocs/navigator/modals/enum.Modal.html @@ -0,0 +1,140 @@ +Modal in navigator::modals - Rust

Enum navigator::modals::Modal

source ·
pub enum Modal {
+
Show 17 variants Backup(String), + NewSeedMenu, + NewSeedBackup(String), + SeedMenu, + NetworkSelector(NetworkSpecsKey), + PasswordConfirm, + SignatureReady(Vec<(MultiSignature, SignatureType)>), + EnterPassword, + LogComment, + LogRight, + NetworkDetailsMenu, + ManageMetadata(u32), + SufficientCryptoReady((Vec<u8>, MSCContent)), + KeyDetailsAction, + TypesInfo, + SelectSeed, + Empty, +
}

Variants§

§

Backup(String)

§

NewSeedMenu

§

NewSeedBackup(String)

§

SeedMenu

§

NetworkSelector(NetworkSpecsKey)

§

PasswordConfirm

§

SignatureReady(Vec<(MultiSignature, SignatureType)>)

§

EnterPassword

§

LogComment

§

LogRight

§

NetworkDetailsMenu

§

ManageMetadata(u32)

§

SufficientCryptoReady((Vec<u8>, MSCContent))

§

KeyDetailsAction

§

TypesInfo

§

SelectSeed

§

Empty

Implementations§

source§

impl Modal

source

pub fn get_name(&self) -> String

Trait Implementations§

source§

impl Clone for Modal

source§

fn clone(&self) -> Modal

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Modal

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<Modal> for Modal

source§

fn eq(&self, other: &Modal) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Modal

source§

impl StructuralEq for Modal

source§

impl StructuralPartialEq for Modal

Auto Trait Implementations§

§

impl RefUnwindSafe for Modal

§

impl Send for Modal

§

impl Sync for Modal

§

impl Unpin for Modal

§

impl UnwindSafe for Modal

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/navigator/modals/index.html b/rustdocs/navigator/modals/index.html new file mode 100644 index 0000000000..1612198d1f --- /dev/null +++ b/rustdocs/navigator/modals/index.html @@ -0,0 +1,2 @@ +navigator::modals - Rust

Module navigator::modals

source ·
Expand description

List of all modals

+

Enums

\ No newline at end of file diff --git a/rustdocs/navigator/modals/sidebar-items.js b/rustdocs/navigator/modals/sidebar-items.js new file mode 100644 index 0000000000..d32384f19b --- /dev/null +++ b/rustdocs/navigator/modals/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Modal"]}; \ No newline at end of file diff --git a/rustdocs/navigator/screens/enum.Screen.html b/rustdocs/navigator/screens/enum.Screen.html new file mode 100644 index 0000000000..81971d954d --- /dev/null +++ b/rustdocs/navigator/screens/enum.Screen.html @@ -0,0 +1,142 @@ +Screen in navigator::screens - Rust
pub enum Screen {
+
Show 20 variants Log, + LogDetails(u32), + Scan, + Transaction(Box<TransactionState>), + SeedSelector, + Keys(KeysState), + KeyDetails(AddressState), + KeyDetailsMulti(AddressStateMulti), + NewSeed, + RecoverSeedName(String), + RecoverSeedPhrase(RecoverSeedPhraseState), + DeriveKey(DeriveState), + Settings, + Verifier, + ManageNetworks, + NetworkDetails(NetworkSpecsKey), + SelectSeedForBackup, + SignSufficientCrypto(SufficientCryptoState), + Documents, + Nowhere, +
}
Expand description

All screens

+

Variants§

§

Log

§

LogDetails(u32)

§

Scan

§

Transaction(Box<TransactionState>)

§

SeedSelector

§

Keys(KeysState)

§

KeyDetails(AddressState)

§

KeyDetailsMulti(AddressStateMulti)

§

NewSeed

§

RecoverSeedName(String)

§

RecoverSeedPhrase(RecoverSeedPhraseState)

§

DeriveKey(DeriveState)

§

Settings

§

Verifier

§

ManageNetworks

§

NetworkDetails(NetworkSpecsKey)

§

SelectSeedForBackup

§

SignSufficientCrypto(SufficientCryptoState)

§

Documents

§

Nowhere

Implementations§

source§

impl Screen

source

pub fn get_name(&self) -> Option<String>

Encode screen name into string for UI

+
source

pub fn get_default_label(&self) -> String

source

pub fn has_back(&self) -> bool

Trait Implementations§

source§

impl Clone for Screen

source§

fn clone(&self) -> Screen

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Screen

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/enum.SpecialtyKeysState.html b/rustdocs/navigator/screens/enum.SpecialtyKeysState.html new file mode 100644 index 0000000000..e7881658f8 --- /dev/null +++ b/rustdocs/navigator/screens/enum.SpecialtyKeysState.html @@ -0,0 +1,123 @@ +SpecialtyKeysState in navigator::screens - Rust
pub enum SpecialtyKeysState {
+    None,
+    Swiped(MultiSigner),
+    MultiSelect(Vec<MultiSigner>),
+}

Variants§

§

None

§

Swiped(MultiSigner)

§

MultiSelect(Vec<MultiSigner>)

Trait Implementations§

source§

impl Clone for SpecialtyKeysState

source§

fn clone(&self) -> SpecialtyKeysState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SpecialtyKeysState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/index.html b/rustdocs/navigator/screens/index.html new file mode 100644 index 0000000000..af58f6b1a6 --- /dev/null +++ b/rustdocs/navigator/screens/index.html @@ -0,0 +1,2 @@ +navigator::screens - Rust

Module navigator::screens

source ·
Expand description

List of all screens

+

Structs

Enums

\ No newline at end of file diff --git a/rustdocs/navigator/screens/sidebar-items.js b/rustdocs/navigator/screens/sidebar-items.js new file mode 100644 index 0000000000..d3124afc43 --- /dev/null +++ b/rustdocs/navigator/screens/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Screen","SpecialtyKeysState"],"struct":["AddressState","AddressStateMulti","DeriveState","EnteredInfo","KeysState","RecoverSeedPhraseState","SufficientCryptoState"]}; \ No newline at end of file diff --git a/rustdocs/navigator/screens/struct.AddressState.html b/rustdocs/navigator/screens/struct.AddressState.html new file mode 100644 index 0000000000..3450c14abc --- /dev/null +++ b/rustdocs/navigator/screens/struct.AddressState.html @@ -0,0 +1,125 @@ +AddressState in navigator::screens - Rust
pub struct AddressState { /* private fields */ }
Expand description

State of screen with 1 key

+

Implementations§

source§

impl AddressState

source

pub fn new( + database: &Db, + details_str: &str, + keys_state: &KeysState +) -> Result<Self>

source

pub fn blank_keys_state(&self) -> KeysState

source

pub fn seed_name(&self) -> String

source

pub fn network_specs_key(&self) -> Option<NetworkSpecsKey>

If None, this is a root key.

+
source

pub fn multisigner(&self) -> MultiSigner

source

pub fn is_root(&self) -> bool

Trait Implementations§

source§

impl Clone for AddressState

source§

fn clone(&self) -> AddressState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AddressState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/struct.AddressStateMulti.html b/rustdocs/navigator/screens/struct.AddressStateMulti.html new file mode 100644 index 0000000000..2f857403f5 --- /dev/null +++ b/rustdocs/navigator/screens/struct.AddressStateMulti.html @@ -0,0 +1,125 @@ +AddressStateMulti in navigator::screens - Rust
pub struct AddressStateMulti { /* private fields */ }
Expand description

State of screen with multiple keys

+

Implementations§

source§

impl AddressStateMulti

source

pub fn new( + database: &Db, + seed_name: String, + network_specs_key: NetworkSpecsKey, + multiselect: &[MultiSigner] +) -> Result<Self>

source

pub fn blank_keys_state(&self) -> KeysState

source

pub fn seed_name(&self) -> String

source

pub fn network_specs_key(&self) -> NetworkSpecsKey

source

pub fn multisigner(&self) -> MultiSigner

source

pub fn set(&self) -> Vec<(MultiSigner, bool)>

source

pub fn next(&self) -> Self

source

pub fn previous(&self) -> Self

source

pub fn number(&self) -> usize

source

pub fn out_of(&self) -> usize

source

pub fn is_root(&self) -> bool

Trait Implementations§

source§

impl Clone for AddressStateMulti

source§

fn clone(&self) -> AddressStateMulti

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for AddressStateMulti

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/struct.DeriveState.html b/rustdocs/navigator/screens/struct.DeriveState.html new file mode 100644 index 0000000000..1c991cfd80 --- /dev/null +++ b/rustdocs/navigator/screens/struct.DeriveState.html @@ -0,0 +1,128 @@ +DeriveState in navigator::screens - Rust
pub struct DeriveState { /* private fields */ }
Expand description

State of derive key screen

+

Implementations§

source§

impl DeriveState

source

pub fn new( + entered_string: &str, + keys_state: &KeysState, + collision: Option<(MultiSigner, AddressDetails)> +) -> Self

source

pub fn blank_keys_state(&self) -> KeysState

source

pub fn seed_name(&self) -> String

source

pub fn network_specs_key(&self) -> Option<NetworkSpecsKey>

source

pub fn path(&self) -> String

source

pub fn collision(&self) -> Option<(MultiSigner, AddressDetails)>

source

pub fn update(&self, new_secret_string: &str) -> Self

source

pub fn collided_with( + &self, + multisigner: &MultiSigner, + address_details: &AddressDetails +) -> Self

Trait Implementations§

source§

impl Clone for DeriveState

source§

fn clone(&self) -> DeriveState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DeriveState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/struct.EnteredInfo.html b/rustdocs/navigator/screens/struct.EnteredInfo.html new file mode 100644 index 0000000000..69a5139e94 --- /dev/null +++ b/rustdocs/navigator/screens/struct.EnteredInfo.html @@ -0,0 +1,121 @@ +EnteredInfo in navigator::screens - Rust
pub struct EnteredInfo(pub String);
Expand description

EnteredInfo, path+pwd entered by the user, zeroizeable

+

Tuple Fields§

§0: String

Trait Implementations§

source§

impl Clone for EnteredInfo

source§

fn clone(&self) -> EnteredInfo

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for EnteredInfo

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Drop for EnteredInfo

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl Zeroize for EnteredInfo

source§

fn zeroize(&mut self)

Zero out this object from memory using Rust intrinsics which ensure the +zeroization operation is not “optimized away” by the compiler.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/struct.KeysState.html b/rustdocs/navigator/screens/struct.KeysState.html new file mode 100644 index 0000000000..27484a9d18 --- /dev/null +++ b/rustdocs/navigator/screens/struct.KeysState.html @@ -0,0 +1,123 @@ +KeysState in navigator::screens - Rust
pub struct KeysState { /* private fields */ }
Expand description

State of keys screen

+

Implementations§

source§

impl KeysState

source

pub fn new(database: &Db, seed_name: &str) -> Result<Self>

source

pub fn new_in_network( + seed_name: &str, + network_specs_key: &NetworkSpecsKey +) -> Self

source

pub fn change_network(&self, network_specs_key: &NetworkSpecsKey) -> Self

source

pub fn seed_name(&self) -> String

source

pub fn network_specs_key(&self) -> Option<NetworkSpecsKey>

source

pub fn get_specialty(&self) -> SpecialtyKeysState

source

pub fn swipe(&self, multisigner: &MultiSigner) -> Self

source

pub fn select_single(&self, multisigner: &MultiSigner) -> Self

source

pub fn select_set(&self, set: Vec<MultiSigner>) -> Self

source

pub fn get_swiped_key(&self) -> Option<MultiSigner>

source

pub fn get_multiselect_keys(&self) -> Vec<MultiSigner>

source

pub fn is_multiselect(&self) -> bool

source

pub fn deselect_specialty(&self) -> Self

Trait Implementations§

source§

impl Clone for KeysState

source§

fn clone(&self) -> KeysState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for KeysState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/struct.RecoverSeedPhraseState.html b/rustdocs/navigator/screens/struct.RecoverSeedPhraseState.html new file mode 100644 index 0000000000..155e506e96 --- /dev/null +++ b/rustdocs/navigator/screens/struct.RecoverSeedPhraseState.html @@ -0,0 +1,120 @@ +RecoverSeedPhraseState in navigator::screens - Rust
pub struct RecoverSeedPhraseState { /* private fields */ }
Expand description

State of screen recover seed phrase

+

Implementations§

source§

impl RecoverSeedPhraseState

source

pub fn new(seed_name: &str) -> Self

source

pub fn name(&self) -> String

source

pub fn draft(&self) -> &SeedDraft

source

pub fn text_entry(&mut self, details_str: &str)

source

pub fn push_word(&mut self, details_str: &str)

Trait Implementations§

source§

impl Clone for RecoverSeedPhraseState

source§

fn clone(&self) -> RecoverSeedPhraseState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RecoverSeedPhraseState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/screens/struct.SufficientCryptoState.html b/rustdocs/navigator/screens/struct.SufficientCryptoState.html new file mode 100644 index 0000000000..8d83d578af --- /dev/null +++ b/rustdocs/navigator/screens/struct.SufficientCryptoState.html @@ -0,0 +1,127 @@ +SufficientCryptoState in navigator::screens - Rust
pub struct SufficientCryptoState { /* private fields */ }
Expand description

State of screen generating sufficient crypto

+

Implementations§

source§

impl SufficientCryptoState

source

pub fn init(content: SufficientContent) -> Self

source

pub fn content(&self) -> SufficientContent

source

pub fn key_selected( + &self +) -> Option<(MultiSigner, AddressDetails, MAddressCard)>

source

pub fn update( + &self, + multisigner: &MultiSigner, + address_details: &AddressDetails, + new_secret_string: &str +) -> Self

source

pub fn seed(&self) -> String

source

pub fn plus_one(&self) -> Self

source

pub fn ok(&self) -> bool

source

pub fn counter(&self) -> u8

Trait Implementations§

source§

impl Clone for SufficientCryptoState

source§

fn clone(&self) -> SufficientCryptoState

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SufficientCryptoState

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/sidebar-items.js b/rustdocs/navigator/sidebar-items.js new file mode 100644 index 0000000000..0b6e33f139 --- /dev/null +++ b/rustdocs/navigator/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Action","Error"],"fn":["do_action","export_key_info","export_signatures_bulk","init_navigation","keys_by_seed_name","sign_dd_transaction","sign_sufficient_content","update_seed_names"],"mod":["alerts","modals","screens"],"struct":["STATE"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/navigator/struct.STATE.html b/rustdocs/navigator/struct.STATE.html new file mode 100644 index 0000000000..3eed3e6861 --- /dev/null +++ b/rustdocs/navigator/struct.STATE.html @@ -0,0 +1,216 @@ +STATE in navigator - Rust

Struct navigator::STATE

source ·
pub struct STATE { /* private fields */ }
Expand description

Navigation state of the app

+

Navigation state is unsafe either way, since it has to persist +No matter if here or beyond FFI

+

Methods from Deref<Target = Mutex<Option<State>>>§

1.0.0 · source

pub fn lock(&self) -> Result<MutexGuard<'_, T>, PoisonError<MutexGuard<'_, T>>>

Acquires a mutex, blocking the current thread until it is able to do so.

+

This function will block the local thread until it is available to acquire +the mutex. Upon returning, the thread is the only thread with the lock +held. An RAII guard is returned to allow scoped unlock of the lock. When +the guard goes out of scope, the mutex will be unlocked.

+

The exact behavior on locking a mutex in the thread which already holds +the lock is left unspecified. However, this function will not return on +the second call (it might panic or deadlock, for example).

+
Errors
+

If another user of this mutex panicked while holding the mutex, then +this call will return an error once the mutex is acquired.

+
Panics
+

This function might panic when called if the lock is already held by +the current thread.

+
Examples
+
use std::sync::{Arc, Mutex};
+use std::thread;
+
+let mutex = Arc::new(Mutex::new(0));
+let c_mutex = Arc::clone(&mutex);
+
+thread::spawn(move || {
+    *c_mutex.lock().unwrap() = 10;
+}).join().expect("thread::spawn failed");
+assert_eq!(*mutex.lock().unwrap(), 10);
+
1.0.0 · source

pub fn try_lock( + &self +) -> Result<MutexGuard<'_, T>, TryLockError<MutexGuard<'_, T>>>

Attempts to acquire this lock.

+

If the lock could not be acquired at this time, then Err is returned. +Otherwise, an RAII guard is returned. The lock will be unlocked when the +guard is dropped.

+

This function does not block.

+
Errors
+

If another user of this mutex panicked while holding the mutex, then +this call will return the Poisoned error if the mutex would +otherwise be acquired.

+

If the mutex could not be acquired because it is already locked, then +this call will return the WouldBlock error.

+
Examples
+
use std::sync::{Arc, Mutex};
+use std::thread;
+
+let mutex = Arc::new(Mutex::new(0));
+let c_mutex = Arc::clone(&mutex);
+
+thread::spawn(move || {
+    let mut lock = c_mutex.try_lock();
+    if let Ok(ref mut mutex) = lock {
+        **mutex = 10;
+    } else {
+        println!("try_lock failed");
+    }
+}).join().expect("thread::spawn failed");
+assert_eq!(*mutex.lock().unwrap(), 10);
+
1.2.0 · source

pub fn is_poisoned(&self) -> bool

Determines whether the mutex is poisoned.

+

If another thread is active, the mutex can still become poisoned at any +time. You should not trust a false value for program correctness +without additional synchronization.

+
Examples
+
use std::sync::{Arc, Mutex};
+use std::thread;
+
+let mutex = Arc::new(Mutex::new(0));
+let c_mutex = Arc::clone(&mutex);
+
+let _ = thread::spawn(move || {
+    let _lock = c_mutex.lock().unwrap();
+    panic!(); // the mutex gets poisoned
+}).join();
+assert_eq!(mutex.is_poisoned(), true);
+
source

pub fn clear_poison(&self)

🔬This is a nightly-only experimental API. (mutex_unpoison)

Clear the poisoned state from a mutex

+

If the mutex is poisoned, it will remain poisoned until this function is called. This +allows recovering from a poisoned state and marking that it has recovered. For example, if +the value is overwritten by a known-good value, then the mutex can be marked as +un-poisoned. Or possibly, the value could be inspected to determine if it is in a +consistent state, and if so the poison is removed.

+
Examples
+
#![feature(mutex_unpoison)]
+
+use std::sync::{Arc, Mutex};
+use std::thread;
+
+let mutex = Arc::new(Mutex::new(0));
+let c_mutex = Arc::clone(&mutex);
+
+let _ = thread::spawn(move || {
+    let _lock = c_mutex.lock().unwrap();
+    panic!(); // the mutex gets poisoned
+}).join();
+
+assert_eq!(mutex.is_poisoned(), true);
+let x = mutex.lock().unwrap_or_else(|mut e| {
+    **e.get_mut() = 1;
+    mutex.clear_poison();
+    e.into_inner()
+});
+assert_eq!(mutex.is_poisoned(), false);
+assert_eq!(*x, 1);
+

Trait Implementations§

source§

impl Deref for STATE

§

type Target = Mutex<Option<State>>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Mutex<Option<State>>

Dereferences the value.
source§

impl LazyStatic for STATE

Auto Trait Implementations§

§

impl RefUnwindSafe for STATE

§

impl Send for STATE

§

impl Sync for STATE

§

impl Unpin for STATE

§

impl UnwindSafe for STATE

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/navigator/type.Result.html b/rustdocs/navigator/type.Result.html new file mode 100644 index 0000000000..dd7239df3b --- /dev/null +++ b/rustdocs/navigator/type.Result.html @@ -0,0 +1 @@ +Result in navigator - Rust

Type Definition navigator::Result

source ·
pub type Result<T> = Result<T, Error>;
\ No newline at end of file diff --git a/rustdocs/parser/all.html b/rustdocs/parser/all.html new file mode 100644 index 0000000000..75ad18885c --- /dev/null +++ b/rustdocs/parser/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/parser/cards/enum.ParserCard.html b/rustdocs/parser/cards/enum.ParserCard.html new file mode 100644 index 0000000000..2818ca43c9 --- /dev/null +++ b/rustdocs/parser/cards/enum.ParserCard.html @@ -0,0 +1,169 @@ +ParserCard in parser::cards - Rust

Enum parser::cards::ParserCard

source ·
pub enum ParserCard {
+
Show 20 variants Pallet(String), + Method { + method_name: String, + docs: String, + }, + Varname(String), + Default(String), + Text(String), + Id { + id: AccountId32, + base58prefix: u16, + }, + Id20 { + id: [u8; 20], + base58prefix: u16, + }, + None, + IdentityField(String), + BitVec(String), + Balance { + number: String, + units: String, + }, + FieldName { + name: String, + docs_field_name: String, + path_type: String, + docs_type: String, + }, + FieldNumber { + number: usize, + docs_field_number: String, + path_type: String, + docs_type: String, + }, + EnumVariantName { + name: String, + docs_enum_variant: String, + }, + Era(Era), + Nonce(String), + BlockHash(H256), + Tip { + number: String, + units: String, + }, + NetworkNameVersion { + name: String, + version: String, + }, + TxVersion(String), +
}

Variants§

§

Pallet(String)

§

Method

Fields

§method_name: String
§docs: String
§

Varname(String)

§

Default(String)

§

Text(String)

§

Id

Fields

§id: AccountId32
§base58prefix: u16
§

Id20

Fields

§id: [u8; 20]
§base58prefix: u16
§

None

§

IdentityField(String)

§

BitVec(String)

§

Balance

Fields

§number: String
§units: String
§

FieldName

Fields

§name: String
§docs_field_name: String
§path_type: String
§docs_type: String
§

FieldNumber

Fields

§number: usize
§docs_field_number: String
§path_type: String
§docs_type: String
§

EnumVariantName

Fields

§name: String
§docs_enum_variant: String
§

Era(Era)

§

Nonce(String)

§

BlockHash(H256)

§

Tip

Fields

§number: String
§units: String
§

NetworkNameVersion

Fields

§name: String
§version: String
§

TxVersion(String)

Implementations§

source§

impl ParserCard

source

pub fn show_no_docs(&self, indent: u32) -> String

Trait Implementations§

source§

impl Clone for ParserCard

source§

fn clone(&self) -> ParserCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/parser/cards/index.html b/rustdocs/parser/cards/index.html new file mode 100644 index 0000000000..4ff5de046d --- /dev/null +++ b/rustdocs/parser/cards/index.html @@ -0,0 +1 @@ +parser::cards - Rust
\ No newline at end of file diff --git a/rustdocs/parser/cards/sidebar-items.js b/rustdocs/parser/cards/sidebar-items.js new file mode 100644 index 0000000000..63c29e06f9 --- /dev/null +++ b/rustdocs/parser/cards/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["ParserCard"]}; \ No newline at end of file diff --git a/rustdocs/parser/decoding_commons/fn.get_compact.html b/rustdocs/parser/decoding_commons/fn.get_compact.html new file mode 100644 index 0000000000..6520751315 --- /dev/null +++ b/rustdocs/parser/decoding_commons/fn.get_compact.html @@ -0,0 +1,5 @@ +get_compact in parser::decoding_commons - Rust
pub fn get_compact<T>(data: &[u8]) -> Result<CutCompact<T>>where
+    T: HasCompact,
+    Compact<T>: Decode,
Expand description

Function to search &[u8] for shortest compact by brute force. +Outputs CutCompact value in case of success.

+
\ No newline at end of file diff --git a/rustdocs/parser/decoding_commons/index.html b/rustdocs/parser/decoding_commons/index.html new file mode 100644 index 0000000000..3c83eeb85b --- /dev/null +++ b/rustdocs/parser/decoding_commons/index.html @@ -0,0 +1,3 @@ +parser::decoding_commons - Rust

Structs

  • Struct to store results of searching Vec<u8> for encoded compact: +consists of actual number decoded, and, if it exists, the beginning position for data after the compact

Functions

  • Function to search &[u8] for shortest compact by brute force. +Outputs CutCompact value in case of success.
\ No newline at end of file diff --git a/rustdocs/parser/decoding_commons/sidebar-items.js b/rustdocs/parser/decoding_commons/sidebar-items.js new file mode 100644 index 0000000000..5d191ad66a --- /dev/null +++ b/rustdocs/parser/decoding_commons/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["get_compact"],"struct":["CutCompact","OutputCard"]}; \ No newline at end of file diff --git a/rustdocs/parser/decoding_commons/struct.CutCompact.html b/rustdocs/parser/decoding_commons/struct.CutCompact.html new file mode 100644 index 0000000000..820325bb2f --- /dev/null +++ b/rustdocs/parser/decoding_commons/struct.CutCompact.html @@ -0,0 +1,125 @@ +CutCompact in parser::decoding_commons - Rust
pub struct CutCompact<T: HasCompact> {
+    pub compact_found: T,
+    pub start_next_unit: Option<usize>,
+}
Expand description

Struct to store results of searching Vec<u8> for encoded compact: +consists of actual number decoded, and, if it exists, the beginning position for data after the compact

+

Fields§

§compact_found: T§start_next_unit: Option<usize>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for CutCompact<T>where + T: RefUnwindSafe,

§

impl<T> Send for CutCompact<T>where + T: Send,

§

impl<T> Sync for CutCompact<T>where + T: Sync,

§

impl<T> Unpin for CutCompact<T>where + T: Unpin,

§

impl<T> UnwindSafe for CutCompact<T>where + T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/parser/decoding_commons/struct.OutputCard.html b/rustdocs/parser/decoding_commons/struct.OutputCard.html new file mode 100644 index 0000000000..dc278c7c50 --- /dev/null +++ b/rustdocs/parser/decoding_commons/struct.OutputCard.html @@ -0,0 +1,120 @@ +OutputCard in parser::decoding_commons - Rust
pub struct OutputCard {
+    pub card: ParserCard,
+    pub indent: u32,
+}

Fields§

§card: ParserCard§indent: u32

Trait Implementations§

source§

impl Clone for OutputCard

source§

fn clone(&self) -> OutputCard

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/parser/enum.Error.html b/rustdocs/parser/enum.Error.html new file mode 100644 index 0000000000..3c6db35d93 --- /dev/null +++ b/rustdocs/parser/enum.Error.html @@ -0,0 +1,156 @@ +Error in parser - Rust

Enum parser::Error

source ·
pub enum Error {
+    Metadata(MetadataError),
+    DefinitionsError(Error),
+    Codec(Error),
+    SeparateMethodExtensions,
+    Decoding(ParserDecodingError),
+    FundamentallyBadV14Metadata(ParserMetadataError),
+    WrongNetworkVersion {
+        as_decoded: String,
+        in_metadata: u32,
+    },
+    NetworkNameMismatch {
+        name_metadata: String,
+        name_network_specs: String,
+    },
+    NoTypes,
+    DefaultTypes,
+}
Expand description

Parse error.

+

Variants§

§

Metadata(MetadataError)

§

DefinitionsError(Error)

§

Codec(Error)

§

SeparateMethodExtensions

§

Decoding(ParserDecodingError)

Errors occurring during the decoding procedure.

+
§

FundamentallyBadV14Metadata(ParserMetadataError)

Errors occurring because the metadata +RuntimeMetadataV14 +has extensions not acceptable in existing safety paradigm for +signable transactions.

+
§

WrongNetworkVersion

Fields

§as_decoded: String

metadata version from transaction extensions, as found through +parsing process

+
§in_metadata: u32

metadata version actually used for parsing, from the Version +constant in System pallet of the metadata

+

While parsing transaction with certain version of network metadata, +found that the version found in signable extensions does not match +the version of the metadata used for parsing.

+

Transaction parsing in Vault is done by consecutively checking all +available metadata for a given network name, starting with the highest +available version, and looking for a matching network version in the +parsed extensions.

+

For RuntimeMetadataV12 and RuntimeMetadataV13 the extensions set +is a fixed one, whereas for RuntimeMetadataV14 is may vary and is +determined by the metadata itself.

+
§

NetworkNameMismatch

Fields

§name_metadata: String
§name_network_specs: String
§

NoTypes

§

DefaultTypes

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<MetadataError> for Error

source§

fn from(source: MetadataError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/parser/enum.MetadataBundle.html b/rustdocs/parser/enum.MetadataBundle.html new file mode 100644 index 0000000000..2b0cf8e5a2 --- /dev/null +++ b/rustdocs/parser/enum.MetadataBundle.html @@ -0,0 +1,124 @@ +MetadataBundle in parser - Rust
pub enum MetadataBundle<'a> {
+    Older {
+        older_meta: OlderMeta<'a>,
+        types: Vec<TypeEntry>,
+        network_version: u32,
+    },
+    Sci {
+        meta_v14: &'a RuntimeMetadataV14,
+        network_version: u32,
+    },
+}

Variants§

§

Older

Fields

§older_meta: OlderMeta<'a>
§network_version: u32
§

Sci

Fields

§meta_v14: &'a RuntimeMetadataV14
§network_version: u32

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for MetadataBundle<'a>

§

impl<'a> Send for MetadataBundle<'a>

§

impl<'a> Sync for MetadataBundle<'a>

§

impl<'a> Unpin for MetadataBundle<'a>

§

impl<'a> !UnwindSafe for MetadataBundle<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

\ No newline at end of file diff --git a/rustdocs/parser/error/enum.Error.html b/rustdocs/parser/error/enum.Error.html new file mode 100644 index 0000000000..ef09b71cfc --- /dev/null +++ b/rustdocs/parser/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../parser/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/parser/error/type.Result.html b/rustdocs/parser/error/type.Result.html new file mode 100644 index 0000000000..f0dd7b758a --- /dev/null +++ b/rustdocs/parser/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../parser/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/parser/fn.cut_method_extensions.html b/rustdocs/parser/fn.cut_method_extensions.html new file mode 100644 index 0000000000..ac6662460e --- /dev/null +++ b/rustdocs/parser/fn.cut_method_extensions.html @@ -0,0 +1 @@ +cut_method_extensions in parser - Rust
pub fn cut_method_extensions(data: &[u8]) -> Result<(Vec<u8>, Vec<u8>)>
\ No newline at end of file diff --git a/rustdocs/parser/fn.parse_extensions.html b/rustdocs/parser/fn.parse_extensions.html new file mode 100644 index 0000000000..cfbaf2f647 --- /dev/null +++ b/rustdocs/parser/fn.parse_extensions.html @@ -0,0 +1,6 @@ +parse_extensions in parser - Rust

Function parser::parse_extensions

source ·
pub fn parse_extensions(
+    extensions_data: Vec<u8>,
+    metadata_bundle: &MetadataBundle<'_>,
+    short_specs: &ShortSpecs,
+    optional_mortal_flag: Option<bool>
+) -> Result<Vec<OutputCard>>
\ No newline at end of file diff --git a/rustdocs/parser/fn.parse_method.html b/rustdocs/parser/fn.parse_method.html new file mode 100644 index 0000000000..06f6c92d63 --- /dev/null +++ b/rustdocs/parser/fn.parse_method.html @@ -0,0 +1,7 @@ +parse_method in parser - Rust

Function parser::parse_method

source ·
pub fn parse_method(
+    method_data: Vec<u8>,
+    metadata_bundle: &MetadataBundle<'_>,
+    short_specs: &ShortSpecs
+) -> Result<Vec<OutputCard>>
Expand description

Function intakes SCALE encoded method part of transaction as Vec<u8>, +network metadata and network specs.

+
\ No newline at end of file diff --git a/rustdocs/parser/fn.parse_set.html b/rustdocs/parser/fn.parse_set.html new file mode 100644 index 0000000000..2d3bbac92f --- /dev/null +++ b/rustdocs/parser/fn.parse_set.html @@ -0,0 +1,6 @@ +parse_set in parser - Rust

Function parser::parse_set

source ·
pub fn parse_set(
+    data: &[u8],
+    metadata_bundle: &MetadataBundle<'_>,
+    short_specs: &ShortSpecs,
+    optional_mortal_flag: Option<bool>
+) -> Result<(Result<Vec<OutputCard>>, Vec<OutputCard>, Vec<u8>, Vec<u8>)>
\ No newline at end of file diff --git a/rustdocs/parser/index.html b/rustdocs/parser/index.html new file mode 100644 index 0000000000..1d2da25ae5 --- /dev/null +++ b/rustdocs/parser/index.html @@ -0,0 +1,2 @@ +parser - Rust

Crate parser

source ·

Modules

Enums

Functions

Type Definitions

\ No newline at end of file diff --git a/rustdocs/parser/method/enum.OlderMeta.html b/rustdocs/parser/method/enum.OlderMeta.html new file mode 100644 index 0000000000..1d2c280d40 --- /dev/null +++ b/rustdocs/parser/method/enum.OlderMeta.html @@ -0,0 +1,118 @@ +OlderMeta in parser::method - Rust

Enum parser::method::OlderMeta

source ·
pub enum OlderMeta<'a> {
+    V12(&'a RuntimeMetadataV12),
+    V13(&'a RuntimeMetadataV13),
+}
Expand description

Enum to transfer around older metadata (V12 and V13)

+

Variants§

§

V12(&'a RuntimeMetadataV12)

§

V13(&'a RuntimeMetadataV13)

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for OlderMeta<'a>

§

impl<'a> Send for OlderMeta<'a>

§

impl<'a> Sync for OlderMeta<'a>

§

impl<'a> Unpin for OlderMeta<'a>

§

impl<'a> !UnwindSafe for OlderMeta<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

\ No newline at end of file diff --git a/rustdocs/parser/method/index.html b/rustdocs/parser/method/index.html new file mode 100644 index 0000000000..d4edba26e5 --- /dev/null +++ b/rustdocs/parser/method/index.html @@ -0,0 +1 @@ +parser::method - Rust

Module parser::method

source ·

Enums

  • Enum to transfer around older metadata (V12 and V13)
\ No newline at end of file diff --git a/rustdocs/parser/method/sidebar-items.js b/rustdocs/parser/method/sidebar-items.js new file mode 100644 index 0000000000..2e6532812f --- /dev/null +++ b/rustdocs/parser/method/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["OlderMeta"]}; \ No newline at end of file diff --git a/rustdocs/parser/sidebar-items.js b/rustdocs/parser/sidebar-items.js new file mode 100644 index 0000000000..b975cd884a --- /dev/null +++ b/rustdocs/parser/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Error","MetadataBundle"],"fn":["cut_method_extensions","parse_extensions","parse_method","parse_set"],"mod":["cards","decoding_commons","method"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/parser/type.Result.html b/rustdocs/parser/type.Result.html new file mode 100644 index 0000000000..3d2ea6c011 --- /dev/null +++ b/rustdocs/parser/type.Result.html @@ -0,0 +1,2 @@ +Result in parser - Rust

Type Definition parser::Result

source ·
pub type Result<T> = Result<T, Error>;
Expand description

Parse result.

+
\ No newline at end of file diff --git a/rustdocs/printing_balance/all.html b/rustdocs/printing_balance/all.html new file mode 100644 index 0000000000..61e11bf6d8 --- /dev/null +++ b/rustdocs/printing_balance/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/printing_balance/fn.convert_balance_pretty.html b/rustdocs/printing_balance/fn.convert_balance_pretty.html new file mode 100644 index 0000000000..b76654a5ba --- /dev/null +++ b/rustdocs/printing_balance/fn.convert_balance_pretty.html @@ -0,0 +1,7 @@ +convert_balance_pretty in printing_balance - Rust
pub fn convert_balance_pretty(
+    balance: &str,
+    decimals: u8,
+    units: &str
+) -> PrettyOutput
Expand description

Input balance has to be a printed number. Likely u128 or u64. +Validity of input is checked elsewhere.

+
\ No newline at end of file diff --git a/rustdocs/printing_balance/fn.print_pretty_test.html b/rustdocs/printing_balance/fn.print_pretty_test.html new file mode 100644 index 0000000000..acee2efd61 --- /dev/null +++ b/rustdocs/printing_balance/fn.print_pretty_test.html @@ -0,0 +1 @@ +print_pretty_test in printing_balance - Rust
pub fn print_pretty_test(balance: u128, decimals: u8, units: &str) -> String
\ No newline at end of file diff --git a/rustdocs/printing_balance/index.html b/rustdocs/printing_balance/index.html new file mode 100644 index 0000000000..0dd4b6432c --- /dev/null +++ b/rustdocs/printing_balance/index.html @@ -0,0 +1,2 @@ +printing_balance - Rust

Crate printing_balance

source ·

Structs

Functions

\ No newline at end of file diff --git a/rustdocs/printing_balance/sidebar-items.js b/rustdocs/printing_balance/sidebar-items.js new file mode 100644 index 0000000000..b550f2375d --- /dev/null +++ b/rustdocs/printing_balance/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["convert_balance_pretty","print_pretty_test"],"struct":["PrettyOutput"]}; \ No newline at end of file diff --git a/rustdocs/printing_balance/struct.PrettyOutput.html b/rustdocs/printing_balance/struct.PrettyOutput.html new file mode 100644 index 0000000000..db890a51b3 --- /dev/null +++ b/rustdocs/printing_balance/struct.PrettyOutput.html @@ -0,0 +1,14 @@ +PrettyOutput in printing_balance - Rust
pub struct PrettyOutput {
+    pub number: String,
+    pub units: String,
+}

Fields§

§number: String§units: String

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rustdocs/qr_reader_pc/all.html b/rustdocs/qr_reader_pc/all.html new file mode 100644 index 0000000000..f02f5b06b3 --- /dev/null +++ b/rustdocs/qr_reader_pc/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/qr_reader_pc/fn.arg_parser.html b/rustdocs/qr_reader_pc/fn.arg_parser.html new file mode 100644 index 0000000000..69b2b22e7c --- /dev/null +++ b/rustdocs/qr_reader_pc/fn.arg_parser.html @@ -0,0 +1,4 @@ +arg_parser in qr_reader_pc - Rust

Function qr_reader_pc::arg_parser

source ·
pub fn arg_parser(arguments: Vec<String>) -> Result<CameraSettings>
Expand description

The program’s argument parser. +The parser initializes the CameraSettings structure with program’s arguments +(described in the readme.md file).

+
\ No newline at end of file diff --git a/rustdocs/qr_reader_pc/fn.process_qr_image.html b/rustdocs/qr_reader_pc/fn.process_qr_image.html new file mode 100644 index 0000000000..45d23812a9 --- /dev/null +++ b/rustdocs/qr_reader_pc/fn.process_qr_image.html @@ -0,0 +1,11 @@ +process_qr_image in qr_reader_pc - Rust
pub fn process_qr_image(
+    image: &GrayImage,
+    decoding: InProgress
+) -> Result<Ready>
Expand description

Function for decoding QR grayscale image. +Returns a string with decoded QR message in HEX format or error.

+

Arguments

+
    +
  • image - Grayscale image containing QR and background
  • +
  • decoding - Stores accumulated payload data for animated QR.
  • +
+
\ No newline at end of file diff --git a/rustdocs/qr_reader_pc/fn.run_with_camera.html b/rustdocs/qr_reader_pc/fn.run_with_camera.html new file mode 100644 index 0000000000..c1fe051340 --- /dev/null +++ b/rustdocs/qr_reader_pc/fn.run_with_camera.html @@ -0,0 +1,7 @@ +run_with_camera in qr_reader_pc - Rust
pub fn run_with_camera(camera_settings: CameraSettings) -> Result<String>
Expand description

Main cycle of video capture. +Returns a string with decoded QR message in HEX format or error.

+

Arguments

+
    +
  • camera_settings - CameraSettings struct that holds the camera parameters
  • +
+
\ No newline at end of file diff --git a/rustdocs/qr_reader_pc/index.html b/rustdocs/qr_reader_pc/index.html new file mode 100644 index 0000000000..400df7a42d --- /dev/null +++ b/rustdocs/qr_reader_pc/index.html @@ -0,0 +1,8 @@ +qr_reader_pc - Rust

Crate qr_reader_pc

source ·
Expand description

QR reader crate for PC

+

qr_reader_pc is a utility to capture (via webcam) QR codes from Vault +and extracting data from it.

+

Structs

Functions

  • The program’s argument parser. +The parser initializes the CameraSettings structure with program’s arguments +(described in the readme.md file).
  • Function for decoding QR grayscale image. +Returns a string with decoded QR message in HEX format or error.
  • Main cycle of video capture. +Returns a string with decoded QR message in HEX format or error.
\ No newline at end of file diff --git a/rustdocs/qr_reader_pc/sidebar-items.js b/rustdocs/qr_reader_pc/sidebar-items.js new file mode 100644 index 0000000000..251f17cf37 --- /dev/null +++ b/rustdocs/qr_reader_pc/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["arg_parser","process_qr_image","run_with_camera"],"struct":["CameraSettings"]}; \ No newline at end of file diff --git a/rustdocs/qr_reader_pc/struct.CameraSettings.html b/rustdocs/qr_reader_pc/struct.CameraSettings.html new file mode 100644 index 0000000000..0e7250fecd --- /dev/null +++ b/rustdocs/qr_reader_pc/struct.CameraSettings.html @@ -0,0 +1,121 @@ +CameraSettings in qr_reader_pc - Rust
pub struct CameraSettings {
+    pub index: Option<i32>,
+}
Expand description

Structure for storing camera settings.

+

Fields§

§index: Option<i32>

Camera index

+

Trait Implementations§

source§

impl Debug for CameraSettings

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/all.html b/rustdocs/qr_reader_phone/all.html new file mode 100644 index 0000000000..f7ade8ee6e --- /dev/null +++ b/rustdocs/qr_reader_phone/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/enum.Error.html b/rustdocs/qr_reader_phone/enum.Error.html new file mode 100644 index 0000000000..4131176c46 --- /dev/null +++ b/rustdocs/qr_reader_phone/enum.Error.html @@ -0,0 +1,137 @@ +Error in qr_reader_phone - Rust
pub enum Error {
+
Show 16 variants RaptorqFrame(String), + LegacyFrame(String), + UnexpectedData(String), + HexDecoding(FromHexError), + BananaSplitWrongPassword, + BananaSplitError(Error), + TransactionParsingError(Error), + UnableToDecode, + ConflictingPayloads(u32, u32), + LegacyInterruptedByFountain, + LegacyInterruptedByBanana, + LengthExceeded, + FountainInterruptedByLegacy, + ConflictingLegacyLengths(u16, u16), + SameNumber, + DynamicInterruptedByStatic, +
}
Expand description

QR code handling error type.

+

Variants§

§

RaptorqFrame(String)

§

LegacyFrame(String)

§

UnexpectedData(String)

§

HexDecoding(FromHexError)

§

BananaSplitWrongPassword

§

BananaSplitError(Error)

§

TransactionParsingError(Error)

§

UnableToDecode

§

ConflictingPayloads(u32, u32)

§

LegacyInterruptedByFountain

§

LegacyInterruptedByBanana

§

LengthExceeded

§

FountainInterruptedByLegacy

§

ConflictingLegacyLengths(u16, u16)

§

SameNumber

§

DynamicInterruptedByStatic

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<FromHexError> for Error

source§

fn from(source: FromHexError) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/error/enum.Error.html b/rustdocs/qr_reader_phone/error/enum.Error.html new file mode 100644 index 0000000000..3e09129034 --- /dev/null +++ b/rustdocs/qr_reader_phone/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../qr_reader_phone/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/qr_reader_phone/error/type.Result.html b/rustdocs/qr_reader_phone/error/type.Result.html new file mode 100644 index 0000000000..98072a6313 --- /dev/null +++ b/rustdocs/qr_reader_phone/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../qr_reader_phone/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/qr_reader_phone/fn.decode_sequence.html b/rustdocs/qr_reader_phone/fn.decode_sequence.html new file mode 100644 index 0000000000..0e4fe5d679 --- /dev/null +++ b/rustdocs/qr_reader_phone/fn.decode_sequence.html @@ -0,0 +1,5 @@ +decode_sequence in qr_reader_phone - Rust
pub fn decode_sequence(
+    set: &[String],
+    password: &Option<String>,
+    cleaned: bool
+) -> Result<DecodeSequenceResult>
\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/fn.get_length.html b/rustdocs/qr_reader_phone/fn.get_length.html new file mode 100644 index 0000000000..bce1194fc4 --- /dev/null +++ b/rustdocs/qr_reader_phone/fn.get_length.html @@ -0,0 +1 @@ +get_length in qr_reader_phone - Rust
pub fn get_length(line: &str, cleaned: bool) -> Result<u32>
\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/fn.get_payload.html b/rustdocs/qr_reader_phone/fn.get_payload.html new file mode 100644 index 0000000000..e6240969bf --- /dev/null +++ b/rustdocs/qr_reader_phone/fn.get_payload.html @@ -0,0 +1 @@ +get_payload in qr_reader_phone - Rust
pub fn get_payload(line: &str, cleaned: bool) -> Result<Vec<u8>>
\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/index.html b/rustdocs/qr_reader_phone/index.html new file mode 100644 index 0000000000..a89090fc55 --- /dev/null +++ b/rustdocs/qr_reader_phone/index.html @@ -0,0 +1 @@ +qr_reader_phone - Rust
\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/enum.InProgress.html b/rustdocs/qr_reader_phone/process_payload/enum.InProgress.html new file mode 100644 index 0000000000..b61e32a79e --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/enum.InProgress.html @@ -0,0 +1,120 @@ +InProgress in qr_reader_phone::process_payload - Rust
pub enum InProgress {
+    None,
+    Fountain(Fountain),
+    LegacyMulti(LegacyMulti),
+    BananaRecovery(BananaRecovery),
+}

Variants§

§

None

§

Fountain(Fountain)

§

LegacyMulti(LegacyMulti)

§

BananaRecovery(BananaRecovery)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/enum.Ready.html b/rustdocs/qr_reader_phone/process_payload/enum.Ready.html new file mode 100644 index 0000000000..1d67eecaa1 --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/enum.Ready.html @@ -0,0 +1,120 @@ +Ready in qr_reader_phone::process_payload - Rust
pub enum Ready {
+    NotYet(InProgress),
+    Yes(Vec<u8>),
+    BananaSplitPasswordRequest,
+    BananaSplitReady(String),
+}

Variants§

§

NotYet(InProgress)

§

Yes(Vec<u8>)

§

BananaSplitPasswordRequest

§

BananaSplitReady(String)

Auto Trait Implementations§

§

impl RefUnwindSafe for Ready

§

impl Send for Ready

§

impl Sync for Ready

§

impl Unpin for Ready

§

impl UnwindSafe for Ready

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/fn.process_decoded_payload.html b/rustdocs/qr_reader_phone/process_payload/fn.process_decoded_payload.html new file mode 100644 index 0000000000..9889998563 --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/fn.process_decoded_payload.html @@ -0,0 +1,5 @@ +process_decoded_payload in qr_reader_phone::process_payload - Rust
pub fn process_decoded_payload(
+    payload: Vec<u8>,
+    password: &Option<String>,
+    decoding: InProgress
+) -> Result<Ready>
\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/index.html b/rustdocs/qr_reader_phone/process_payload/index.html new file mode 100644 index 0000000000..04719cf0c9 --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/index.html @@ -0,0 +1 @@ +qr_reader_phone::process_payload - Rust
\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/sidebar-items.js b/rustdocs/qr_reader_phone/process_payload/sidebar-items.js new file mode 100644 index 0000000000..93d15adc16 --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["InProgress","Ready"],"fn":["process_decoded_payload"],"struct":["BananaRecovery","Element","Fountain","LegacyMulti"]}; \ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/struct.BananaRecovery.html b/rustdocs/qr_reader_phone/process_payload/struct.BananaRecovery.html new file mode 100644 index 0000000000..07595a632b --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/struct.BananaRecovery.html @@ -0,0 +1,115 @@ +BananaRecovery in qr_reader_phone::process_payload - Rust
pub struct BananaRecovery { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/struct.Element.html b/rustdocs/qr_reader_phone/process_payload/struct.Element.html new file mode 100644 index 0000000000..9a79ad61c2 --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/struct.Element.html @@ -0,0 +1,117 @@ +Element in qr_reader_phone::process_payload - Rust
pub struct Element { /* private fields */ }

Trait Implementations§

source§

impl PartialEq<Element> for Element

source§

fn eq(&self, other: &Element) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Element

source§

impl StructuralEq for Element

source§

impl StructuralPartialEq for Element

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/struct.Fountain.html b/rustdocs/qr_reader_phone/process_payload/struct.Fountain.html new file mode 100644 index 0000000000..0fc0be43f3 --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/struct.Fountain.html @@ -0,0 +1,122 @@ +Fountain in qr_reader_phone::process_payload - Rust
pub struct Fountain {
+    pub total: u32,
+    /* private fields */
+}

Fields§

§total: u32

Implementations§

source§

impl Fountain

source

pub fn collected(&self) -> usize

Return the number of packets collected.

+
source

pub fn collect(&mut self, frame_index: usize)

Called to inform that the packet with the id has been collected.

+

Trait Implementations§

source§

impl PartialEq<Fountain> for Fountain

source§

fn eq(&self, other: &Fountain) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Fountain

source§

impl StructuralEq for Fountain

source§

impl StructuralPartialEq for Fountain

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/process_payload/struct.LegacyMulti.html b/rustdocs/qr_reader_phone/process_payload/struct.LegacyMulti.html new file mode 100644 index 0000000000..e1c8a06340 --- /dev/null +++ b/rustdocs/qr_reader_phone/process_payload/struct.LegacyMulti.html @@ -0,0 +1,117 @@ +LegacyMulti in qr_reader_phone::process_payload - Rust
pub struct LegacyMulti { /* private fields */ }

Trait Implementations§

source§

impl PartialEq<LegacyMulti> for LegacyMulti

source§

fn eq(&self, other: &LegacyMulti) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for LegacyMulti

source§

impl StructuralEq for LegacyMulti

source§

impl StructuralPartialEq for LegacyMulti

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/qr_reader_phone/sidebar-items.js b/rustdocs/qr_reader_phone/sidebar-items.js new file mode 100644 index 0000000000..257ca23a5b --- /dev/null +++ b/rustdocs/qr_reader_phone/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Error"],"fn":["decode_sequence","get_length","get_payload"],"mod":["process_payload"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/qr_reader_phone/type.Result.html b/rustdocs/qr_reader_phone/type.Result.html new file mode 100644 index 0000000000..86c3ba7fb0 --- /dev/null +++ b/rustdocs/qr_reader_phone/type.Result.html @@ -0,0 +1,2 @@ +Result in qr_reader_phone - Rust

Type Definition qr_reader_phone::Result

source ·
pub type Result<T> = Result<T, Error>;
Expand description

Qr code handling parsing result.

+
\ No newline at end of file diff --git a/rustdocs/qrcode_rtx/all.html b/rustdocs/qrcode_rtx/all.html new file mode 100644 index 0000000000..9357cd2156 --- /dev/null +++ b/rustdocs/qrcode_rtx/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/qrcode_rtx/fn.make_data_packs.html b/rustdocs/qrcode_rtx/fn.make_data_packs.html new file mode 100644 index 0000000000..c2db6c3e1d --- /dev/null +++ b/rustdocs/qrcode_rtx/fn.make_data_packs.html @@ -0,0 +1,6 @@ +make_data_packs in qrcode_rtx - Rust
pub fn make_data_packs(
+    input: &[u8],
+    chunk_size: u16
+) -> Result<Vec<QrData>, &'static str>
Expand description

function to take data as Vec<u8>, apply raptorq to get Vec<EncodingPacket> +and serialize it to get Vec<u8> output

+
\ No newline at end of file diff --git a/rustdocs/qrcode_rtx/fn.make_pretty_qr.html b/rustdocs/qrcode_rtx/fn.make_pretty_qr.html new file mode 100644 index 0000000000..04d80aa522 --- /dev/null +++ b/rustdocs/qrcode_rtx/fn.make_pretty_qr.html @@ -0,0 +1,6 @@ +make_pretty_qr in qrcode_rtx - Rust

Function qrcode_rtx::make_pretty_qr

source ·
pub fn make_pretty_qr<P>(
+    input: &[u8],
+    output_name: P
+) -> Result<(), Box<dyn Error>>where
+    P: AsRef<Path>,
Expand description

Function to make appropriately sized qr code, apng or static

+
\ No newline at end of file diff --git a/rustdocs/qrcode_rtx/fn.transform_into_qr_apng.html b/rustdocs/qrcode_rtx/fn.transform_into_qr_apng.html new file mode 100644 index 0000000000..ada416e651 --- /dev/null +++ b/rustdocs/qrcode_rtx/fn.transform_into_qr_apng.html @@ -0,0 +1,8 @@ +transform_into_qr_apng in qrcode_rtx - Rust
pub fn transform_into_qr_apng<P>(
+    input: &[u8],
+    chunk_size: u16,
+    fps: u16,
+    output_name: P
+) -> Result<(), Box<dyn Error>>where
+    P: AsRef<Path>,
Expand description

Function to transform input Vec<u8> into fountain qr-code

+
\ No newline at end of file diff --git a/rustdocs/qrcode_rtx/index.html b/rustdocs/qrcode_rtx/index.html new file mode 100644 index 0000000000..be05273ddd --- /dev/null +++ b/rustdocs/qrcode_rtx/index.html @@ -0,0 +1,2 @@ +qrcode_rtx - Rust

Crate qrcode_rtx

source ·

Functions

  • function to take data as Vec<u8>, apply raptorq to get Vec<EncodingPacket> +and serialize it to get Vec<u8> output
  • Function to make appropriately sized qr code, apng or static
  • Function to transform input Vec<u8> into fountain qr-code
\ No newline at end of file diff --git a/rustdocs/qrcode_rtx/sidebar-items.js b/rustdocs/qrcode_rtx/sidebar-items.js new file mode 100644 index 0000000000..fe646ab1cc --- /dev/null +++ b/rustdocs/qrcode_rtx/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["make_data_packs","make_pretty_qr","transform_into_qr_apng"]}; \ No newline at end of file diff --git a/rustdocs/qrcode_static/all.html b/rustdocs/qrcode_static/all.html new file mode 100644 index 0000000000..13dfe31d7d --- /dev/null +++ b/rustdocs/qrcode_static/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Enums

Functions

\ No newline at end of file diff --git a/rustdocs/qrcode_static/enum.DataType.html b/rustdocs/qrcode_static/enum.DataType.html new file mode 100644 index 0000000000..9bc9b5daa3 --- /dev/null +++ b/rustdocs/qrcode_static/enum.DataType.html @@ -0,0 +1,97 @@ +DataType in qrcode_static - Rust
pub enum DataType {
+    Regular,
+    Sensitive,
+}
Expand description

What kind of data goes into QR, to additionally distinguish sensitive QRs +with color

+

Variants§

§

Regular

signatures for transactions and public keys export

+
§

Sensitive

secret keys export

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rustdocs/qrcode_static/fn.png_qr.html b/rustdocs/qrcode_static/fn.png_qr.html new file mode 100644 index 0000000000..6a2aa885f6 --- /dev/null +++ b/rustdocs/qrcode_static/fn.png_qr.html @@ -0,0 +1,2 @@ +png_qr in qrcode_static - Rust

Function qrcode_static::png_qr

source ·
pub fn png_qr(input: &[u8], data_type: DataType) -> Result<Vec<u8>>
Expand description

Generate static qr code from slice &[u8]

+
\ No newline at end of file diff --git a/rustdocs/qrcode_static/fn.png_qr_from_string.html b/rustdocs/qrcode_static/fn.png_qr_from_string.html new file mode 100644 index 0000000000..a1fff1ff3b --- /dev/null +++ b/rustdocs/qrcode_static/fn.png_qr_from_string.html @@ -0,0 +1,6 @@ +png_qr_from_string in qrcode_static - Rust
pub fn png_qr_from_string(
+    string_input: &str,
+    data_type: DataType
+) -> Result<Vec<u8>>
Expand description

Generate static qr code from a string.

+

For keys export and for signature generation.

+
\ No newline at end of file diff --git a/rustdocs/qrcode_static/index.html b/rustdocs/qrcode_static/index.html new file mode 100644 index 0000000000..69f8cfc963 --- /dev/null +++ b/rustdocs/qrcode_static/index.html @@ -0,0 +1,2 @@ +qrcode_static - Rust

Crate qrcode_static

source ·

Enums

  • What kind of data goes into QR, to additionally distinguish sensitive QRs +with color

Functions

\ No newline at end of file diff --git a/rustdocs/qrcode_static/sidebar-items.js b/rustdocs/qrcode_static/sidebar-items.js new file mode 100644 index 0000000000..1c270f7f2a --- /dev/null +++ b/rustdocs/qrcode_static/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["DataType"],"fn":["png_qr","png_qr_from_string"]}; \ No newline at end of file diff --git a/rustdocs/search-index.js b/rustdocs/search-index.js new file mode 100644 index 0000000000..4417f59780 --- /dev/null +++ b/rustdocs/search-index.js @@ -0,0 +1,19 @@ +var searchIndex = JSON.parse('{\ +"constants":{"doc":"Constants used throughout in Vault and Vault-supporting …","t":"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF","n":["ADDRESS_BOOK","ADDRTREE","ALICE_SEED_PHRASE","BACK_COLOR","BORDER","CHUNK_SIZE","COLD_DB_NAME_RELEASE","COLOR","DANGER","DRV","ENABLE_DYNAMIC_DERIVATIONS","EXPORT_FOLDER","FOLDER","FPS_DEN","FPS_NOM","GENERALVERIFIER","HISTORY","HISTORY_PAGE_SIZE","HOT_DB_NAME","LIVE_SCHEMA_VERSION","MAIN_COLOR","MAIN_COLOR_DANGER","MAX_WORDS_DISPLAY","METATREE","META_HISTORY","SCALING","SCHEMA_VERSION","SECONDARY_COLOR","SETTREE","SIGN","SPECSTREE","SPECSTREEPREP","STUB","TRANSACTION","TYPES","VERIFIERS","qr_palette","qr_palette_danger","test_values","alice_sr_0","alice_sr_1","alice_sr_alice","alice_sr_alice_secret_secret","alice_sr_alice_westend","alice_sr_kusama","alice_sr_polkadot","alice_sr_root","alice_sr_secret_abracadabra","alice_sr_secret_path_multipass","alice_sr_westend","alice_sr_westend_0","alice_westend_secret_qr","bob","dock_31","ed","empty_png","id_01","id_02","id_04","id_05","kusama_9130","kusama_9151","shell_200","types_known","types_unknown","westend_9000","westend_9010","westend_9070","westend_9111","westend_9122"],"q":[[0,"constants"],[39,"constants::test_values"]],"d":["Tree name for the tree storing the address book in hot …","Tree name for the tree storing user addresses associated …","Alice seed phrase","Background color for QR codes (both static and animated …","Width of the QR code border, in QR code dots","Data chunk size for fountain QR code generation","Default folder for cold database generated during the …","Default color to be used in generating network specs with …","Key in settings tree SETTREE for Vault danger status","Key in transactions tree TRANSACTION for derivations …","Feature flag to disable dynamic derivations","Folder to save completed update messages, for …","Folder to save payloads ready for signing, for …","Denominator of the fraction of time (in seconds) for which …","Numerator of the fraction of time (in seconds) for which …","Key in settings tree SETTREE for general verifier …","Tree name for the tree storing Vault history","Number of entries on log history page","Default folder for hot database","Current database schema version","Main color for QR codes (both static and animated ones)","Main color for dangerous QR codes (static only, in Vault)","Maximum number of words displayed to user based on user …","Tree name for the tree storing the network metadata in …","Tree name for the tree storing the network block hash at …","Scaling factor for QR codes (size of QR code dot, in …","Key in settings tree SETTREE for Vault database schema …","Default secondary_color to be used in generating network …","Tree name for the tree storing database settings","Key in transactions tree TRANSACTION for signable …","Tree name for the tree storing the network specs in cold …","Tree name for the tree storing the network specs in hot …","Key in transactions tree TRANSACTION for updates data","Tree name for the tree temporarily storing transaction …","Key in settings tree SETTREE for encoded types information","Tree name for the tree storing the network verifiers …","Color palette for QR codes (both static and animated ones)","Color palette for dangerous QR codes (static only, in …","Hexadecimal strings with identicons and qr codes data, as …","Identicon for Alice key with derivation //0, Sr25519 …","Identicon for Alice key with derivation //1, Sr25519 …","Identicon for Alice key with derivation //Alice, Sr25519 …","Identicon for Alice key with derivation …","Identicon for Alice key with derivation //Alice/westend, …","Identicon for Alice key with derivation //kusama, Sr25519 …","Identicon for Alice key with derivation //polkadot, Sr25519…","Identicon for Alice root key, Sr25519 encryption","Identicon for Alice key with derivation …","Identicon for Alice key with derivation …","Identicon for Alice key with derivation //westend, Sr25519 …","Identicon for Alice key with derivation //westend//0, …","Export qr code for root Alice secret in westend network","Identicon for Alice key with derivation //Bob, aka Bob, …","Identicon for dock31 metadata hash","Identicon for Alice key with derivation //Alice, Ed25519 …","Empty 30x30 transparent PNG image, used in cases when …","Identicon for test address id_01","Identicon for test address id_02","Identicon for test address id_04","Identicon for test address id_05","Identicon for kusama9130 metadata hash","Identicon for kusama9151 metadata hash","Identicon for shell200 metadata hash","Identicon for hash of types information","Identicon for hash of unknown to the database types …","Identicon for westend9000 metadata hash","Identicon for westend9010 metadata hash","Identicon for westend9070 metadata hash","Identicon for westend9111 metadata hash","Identicon for westend9122 metadata hash"],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],[[2,[1]]]],[[],[[2,[1]]]],0,[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]],[[],[[2,[1]]]]],"c":[],"p":[[15,"u8"],[3,"Vec"]]},\ +"db_handling":{"doc":"This crate deals with standard database-related procedures …","t":"NNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNNNNNNGNNNNNNNNNNLLLLAAFFLLLLLLLLLLLLLLLLAALALLLLALLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMFFFFFFFNEDDDDDNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMDLLFMLLLLLMLLLMFFFFFFFFFLLLLLFMFFFFFFLFFFFFLLLLFLDNNEDNEDDNNDEDEDNNNNELLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFMMFMLLLLLLLLLLLLFLLLLLLLLLLLLLLMMLLLLLLLLLLLLFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFMFFFFLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFMMLFFFFMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLRDRLLFLLFLLLLLLFLLLFFFLLLLFFFLLLLLLFFFFFFLLFFFLLLLLLLLLLLFFFFFFFFFFF","n":["AddressNotFound","Bip39MnemonicType","ChecksumMismatch","Codec","CustomVerifierIsGeneral","DangerStatusNotFound","DataPacking","DbError","DbSchemaMismatch","DbTransactionError","Defaults","DefinitionsError","DerivationExists","DerivationsNotFound","DifferentBase58Specs","DifferentNamesSameGenesisHash","EmptySeed","EmptySeedName","Error","GeneralVerifierNotFound","HistoryEntryNotFound","InvalidDerivation","KeyCollision","KeyCollisionBatch","LostPwd","MetaValuesNotFound","MissingPasswordInfo","NetworkSpecsKeyForAddressNotFound","NetworkSpecsNotFound","NoKnownSeeds","NoNetworksAvailable","NoRootKeyForSeed","NoSeedForKeyPair","NoSeedFound","NoValidCurrentVerifier","Other","Qr","Result","SecretExposedMismatch","SecretStringError","SeedNameNotMatching","Sign","Stub","TimeFormat","TwoRootKeys","TypesNotFound","UnexpectedGenesisHash","WrongPassword","as_any","as_any_mut","borrow","borrow_mut","cold_default","db_transactions","default_cold_release","default_hot","deref","deref_mut","drop","fmt","fmt","from","from","from","from","from","from","from","from","from","from_mut","from_ref","helpers","identities","init","interface_signer","into","into_any","into_any_arc","into_any_rc","manage_history","source","to_string","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","address_details","address_details","address_key","address_key","base58_1","base58_2","cropped_path_existing","cropped_path_new","encryption","expected","expected_seed_name","found","genesis_hash","genesis_hash","genesis_hash","in_this_network","multisigner","multisigner","multisigner","multisigner","name","name","name1","name2","network_specs_key","network_specs_key","real_seed_name","seed_name","seed_name","seed_name_existing","seed_name_new","version","init_db","populate_cold","populate_cold_nav_test","populate_cold_no_metadata","populate_cold_no_networks","signer_init_no_cert","signer_init_with_cert","Message","SignContent","TrDbCold","TrDbColdSign","TrDbColdSignOne","TrDbColdStub","TrDbHot","Transaction","__clone_box","add_metadata","add_network_specs","add_types","apply","apply","apply","apply","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","content","decode","decode","decode","decode","decode_all","decode_all","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","default","default","default","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","encode","encode_to","encode_to","encode_to","encode_to","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_storage","from_storage","generate","has_pwd","init","init","init","init","init","init","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","multisigner","new","new","new","new_general_verifier","new_history_entry","new_network_verifier","path","remove_metadata","remove_network_specs","remove_types","set_address_book","set_addresses","set_history","set_meta_history","set_metadata","set_metadata","set_network_specs","set_network_specs_prep","set_settings","set_settings","set_transaction","set_verifiers","signing_bulk","size_hint","size_hint","size_hint","size_hint","store_and_get_checksum","store_and_get_checksum","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","using_encoded","vzip","vzip","vzip","vzip","vzip","vzip","extensions","method","SpecsInvariants","as_any","as_any_mut","assert_db_version","base58prefix","borrow","borrow_mut","deref","deref_mut","drop","first_network_specs_key","from","from_mut","from_ref","genesis_hash","genesis_hash_in_specs","get_address_details","get_all_networks","get_danger_status","get_general_verifier","get_meta_values_by_name_version","get_network_specs","get_types","get_valid_current_verifier","init","into","into_any","into_any_arc","into_any_rc","make_batch_clear_tree","name","open_tree","prep_types","remove_metadata","remove_network","remove_types_info","transfer_metadata_to_cold","try_from","try_get_address_details","try_get_meta_values_by_name_version","try_get_network_specs","try_get_types","try_get_valid_current_verifier","try_into","type_id","unchecked_into","unique_saturated_into","validate_mnemonic","vzip","AddrInfo","BadFormat","BulkOperations","DerivationCheck","DynamicDerivationTransaction","DynamicDerivations","ExportAddrs","ExportAddrsV1","ExportAddrsV2","NoPassword","Password","SeedInfo","SignaturesBulk","SignaturesBulkV1","TransactionBulk","TransactionBulkV1","V1","V1","V1","V2","VaultFeatures","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","addr","address","addrs","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","check_derivation_set","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","create_increment_set","create_key_set","cut_path","decode","decode","decode","decode","decode","decode","decode","decode","decode","decode","decode","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derivation_check","derivation_path","derivation_path","derive_single_key","derived_keys","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","dynamic_derivations_response","encode","encode","encode","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encoded_transactions","encryption","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","export_key_set_addrs","export_secret_key","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","generate_random_phrase","generate_test_identities","genesis_hash","get_addresses_by_seed_name","get_all_addresses","get_multisigner_by_address","import_all_addrs","init","init","init","init","init","init","init","init","init","init","init","init","inject_derivations_has_pwd","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_passworded","multisigner","name","new","process_dynamic_derivations_v1","remove_key","remove_keys_set","remove_seed","root_multisigner","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_create_address","try_create_seed","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","using_encoded","using_encoded","using_encoded","validate_key_password","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","BIP_CAP","SeedDraft","WORD_LENGTH","__clone_box","added","addresses_set_seed_name_network","as_any","as_any_mut","backup_prep","borrow","borrow_mut","clone","clone_into","deref","deref_mut","derive_prep","draft","drop","drop","dynamic_path_check","export_key","first_network","fmt","from","from_mut","from_ref","get_all_seed_names_with_identicons","guess","history_hex_checksum","init","initiate","into","into_any","into_any_arc","into_any_rc","keys_by_seed_name","metadata_details","network_details_by_key","print_all_identities","print_new_seed","purge_transactions","remove","remove_last","show_all_networks","show_all_networks_with_flag","show_types_status","text_field_update","to_owned","try_finalize","try_from","try_into","type_id","unchecked_into","unique_saturated_into","user_input","vzip","zeroize","clear_history","device_was_online","enter_events","events_to_batch","get_history","get_history_entry_by_order","history_entry_system","history_entry_user","history_total_pages","reset_danger_status_to_safe","seed_name_was_shown"],"q":[[0,"db_handling"],[89,"db_handling::Error"],[121,"db_handling::cold_default"],[128,"db_handling::db_transactions"],[345,"db_handling::db_transactions::SignContent"],[347,"db_handling::helpers"],[396,"db_handling::identities"],[854,"db_handling::interface_signer"],[911,"db_handling::manage_history"]],"d":["AddressDetails for AddressKey in ADDRTREE tree of the …","","Database checksum does not match the expected value.","","Network CurrentVerifier is ValidCurrentVerifier::Custom(_)…","DangerRecord information stored in SETTREE tree of the …","","","","","","","Derivation that user tried to create already exists.","Temporary database entry in TRANSACTION tree of the Vault …","Network specs entries have same genesis hash, but …","While searching for all networks with same genesis hash, …","Got empty seed phrase.","Got empty seed name.","DB handling error type.","General verifier Verifier information stored in SETTREE …","History log Entry stored in HISTORY tree of the Vault …","Received derivations update payload contains an invalid …","Same public key was produced for a different seed phrase …","Same public key was produced for a different seed phrase …","User was creating the derivation with password, and thus …","Network metadata in METATREE tree of the Vault database, …","","NetworkSpecsKey of a network in network_id field of the …","OrderedNetworkSpecs for a network in SPECSTREE tree of the …","","","","","","","","QR handling error.","DB handling result.","Found secret_exposed flag mismatch in the database: …","Error in SecretString.","To generate QR code with public address information …","Temporary database entry in TRANSACTION tree of the Vault …","Temporary database entry in TRANSACTION tree of the Vault …","","Database has two seed addresses (i.e. with empty …","DangerRecord information stored in SETTREE tree of the …","Network has no entry for CurrentVerifier under verifier_key…","User has entered a wrong password for a passworded address.","","","","","Making and restoring cold database with default content","Atomic transactions in cold and hot databases","Generate or restore “cold” database with default …","Generate or restore “hot” database with default values.","","","","","","","","","","","Returns the argument unchanged.","","","","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Common helper functions for database operations","Creating, collecting, and removing addresses in cold …","","Utils to communicate with the Vault frontend","Calls U::from(self).","","","","Displaying and updating history log","","","","","","","","","","","address key for which the export is done","","","","","","encryption algorithm for which two seed keys were found","","seed name, from the navigator","","","","","","","","","","","network name","","","","","seed name, from the AddressDetails","seed name","","","","network version","Initiate cold database and set up the database general …","Generate initiated test cold database with default …","Generate not initiated test cold database for navigator …","Generate initiated test cold database without network …","Generate initiated test cold database with no …","Initiate Vault database with general verifier set up to …","Initiate Vault database with default general verifier …","53xx03 text message","Signable transaction content","Cold database transaction data containing Batch elements …","Temporary storage for signable transaction and associated …","","Draft for cold database atomic transaction, constructed …","Hot database transaction data containing Batch elements …","53xx00 or 53xx02 transaction","","Prepare adding the metadata received as load_metadata …","Prepare adding OrderedNetworkSpecs into the cold database:","Prepare adding types information ContentLoadTypes received …","Apply constructed set of batches within TrDbCold to the …","Apply constructed set of batches within TrDbHot to the …","Transform TrDbColdStub into TrDbCold and apply to the …","Use TrDbColdSign to add history log data into the cold …","","","","","","","","","","","","","","","","","","","","","","","","","","","Get transaction content.","","","","","","","","","","","","","","","","","Default value for TrDbCold. Empty.","Default value for TrDbHot. Empty.","Default value for TrDbColdStub. Empty.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Recover TrDbColdStub from storage in the cold database.","Recover TrDbColdSign from storage in the cold database.","Construct TrDbColdSign from components.","Get has_pwd flag.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","Get MultiSigner value","Construct new empty TrDbCold.","Construct new empty TrDbHot.","Construct new empty TrDbColdStub.","Prepare adding new general verifier Verifier into the cold …","Add new Event in history_stub field of the TrDbColdStub","Prepare adding new network verifier ValidCurrentVerifier …","Get derivation path.","Prepare removing the metadata from the cold database:","Prepare removing OrderedNetworkSpecs from the cold …","Prepare removing types information from the cold database:","Set for_address_book field in TrDbHot with Batch that will …","Set for_addresses field in TrDbCold with Batch that will be","Set for_history field in TrDbCold with Batch that will be …","Set for_meta_history field in TrDbHot with Batch that will …","Set for_metadata field in TrDbCold with Batch that will be …","Set for_metadata field in TrDbHot with Batch that will be …","Set for_network_specs field in TrDbCold with Batch that …","Set for_network_specs_prep field in TrDbHot with Batch that","Set for_settings field in TrDbCold with Batch that will be …","Set for_settings field in TrDbHot with Batch that will be …","Set for_transaction field in TrDbCold with Batch that will …","Set for_verifiers field in TrDbCold with Batch that will be","Bulk of transactions to sign.","","","","","Put SCALE-encoded TrDbColdStub into storage in the …","Put SCALE-encoded TrDbColdSign into storage in the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","extensions as raw data","method as raw data","Specs invariants that are expected to stay unchanged for …","","","Check database schema version. Prevents app stash when …","","","","","","","network with lowest order, for correct navigation when …","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Search for network genesis hash in OrderedNetworkSpecs …","Get AddressDetails from the Vault database, using …","Get OrderedNetworkSpecs for all networks from the cold …","Get the danger status from the Vault database.","Get general verifier Verifier from the Vault database.","Get MetaValues, corresponding to given network name and …","Get network specs OrderedNetworkSpecs from the Vault …","Get types information as Vec<TypeEntry> from the database.","Get ValidCurrentVerifier from the Vault database for a …","","Calls U::from(self).","","","","Assemble a Batch that removes all elements from a tree.","","Open a tree in the database.","Get types information as ContentLoadTypes from the …","Remove the network metadata entry from the database.","Remove the network from the database.","User-initiated removal of the types information from the …","Transfer metadata from the hot database into the cold one.","","Try to get AddressDetails from the Vault database, using …","Try to get MetaValues, corresponding to given network name …","Try to get network specs OrderedNetworkSpecs from the …","Try to get types information from the database.","Try to get ValidCurrentVerifier from the Vault database …","","","","","","","","Derivation has bad format, UI disables proceeding with …","","Proposed derivation status.","","","","","","Derivation has no password.","Derivation has password (///<password> part).","","","","","","","","","","","","","","","","","","","","","","","Address in the network.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Check derivations before offering user to import them.","","","","","","","","","","","","","","","","","","","","","","","Add a set of new derived addresses: N+1, N+2, etc into …","Creates seed into Vault: add default addresses for …","Separate derivation path with password into non-secret …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Preliminary checks if the user-proposed derivation could …","","The derivation path of the key if user provided one","Helper function to get public key from seed phrase and …","Derived keys.","","","","","","","","","","","","","Prepare DynamicDerivationsAddressResponse for the given …","","","","","","","","","","","","","","","","The type of encryption in the network","","","","","","","","","","","","","Export info about keys and their addresses known to Vault","Prepare secret key export screen struct MKeyDetails.","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Generate random phrase with given number of words.","Generate test Alice addresses in test cold database.","Genesis hash","Get all existing addresses for a given seed name from the …","Get all existing addresses from the database.","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Check derivation format and determine if it has a password.","Public key of the root key.","Name of the seed.","","","Remove address from the Vault database.","Remove a set of addresses within a single network from the …","Remove all addresses associated with given seed name from …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Create a new address in the Vault database.","Accept seed into Vault: add default addresses for a seed …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Maximum word count in bip39 standard.","Zeroizeable seed phrase draft.","Maximum word length in bip39 standard.","","User tries to add the word to the saved field of the …","Get address-associated public data for all addresses from …","","","Prepare seed backup screen struct MBackup for given seed …","","","","","","","Prepare key derivation screen struct MDeriveKey.","Make a String with a seed phrase draft.","","","Return NavDerivationCheck with allowed action details for …","Prepare export key screen struct MKeyDetails.","Sort database networks by the order and get the network …","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Return a Vec with all seed names with seed key identicons …","Get possible options of English bip39 words that start …","Get database history tree checksum to be displayed in log …","","Start new SeedDraft","Calls U::from(self).","","","","","Return MManageMetadata with metadata details for network …","Return MNetworkDetails with network specs and metadata set …","Return a Vec with address-associated public data for all …","Generate new random seed phrase, make identicon for sr25519…","Clear transaction tree of the database.","Remove word at given position from the saved seed phrase …","Remove last word from the saved seed phrase draft.","Make Vec with network information for all networks in the …","Return Vec with network information for all networks in …","Make types status display.","Modify SeedDraft with updated user_text from the frontend.","","Combines all draft elements into seed phrase proposal, and …","","","","","","Output the user input back into user interface.","","","Clear Vault history and make a log Entry that history was …","Process the fact that the Vault device was online.","Enter Event set into the database as a single database …","Timestamp Event set and make with it a new Batch, that …","Get history log contents from the database.","Get from the database a history log Entry by u32 order …","Enter system-generated Event into the database.","Enter user-generated Event into the database.","Print total number of pages, for maximum HISTORY_PAGE_SIZE …","Acknowledge that the Vault device was online and reset the …","Record in history log that certain seed was shown on Vault …"],"i":[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,6,0,6,6,6,6,0,6,6,6,6,6,6,6,6,93,94,95,96,97,97,98,98,99,100,95,100,101,102,97,98,93,94,103,104,101,105,102,102,96,93,95,99,106,98,98,105,0,0,0,0,0,0,0,38,0,0,0,0,0,0,38,38,27,27,27,32,33,27,34,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,38,38,39,27,34,39,38,27,34,39,38,27,34,39,38,27,34,39,38,32,33,27,34,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,34,27,34,39,38,32,33,27,34,39,38,32,33,27,34,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,27,34,39,39,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,39,32,33,27,27,27,27,39,27,27,27,33,32,32,33,32,33,32,33,32,33,32,32,34,27,34,39,38,27,34,27,34,39,38,38,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,32,33,27,34,39,38,34,32,33,27,34,39,38,107,107,0,53,53,0,53,53,53,53,53,53,53,53,53,53,53,0,0,0,0,0,0,0,0,0,53,53,53,53,53,0,53,0,0,0,0,0,0,53,0,0,0,0,0,53,53,53,53,0,53,0,70,67,0,0,67,0,0,0,70,70,0,0,0,0,0,59,62,64,64,0,59,60,61,62,63,64,65,66,67,68,69,66,69,65,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,0,59,60,61,62,63,64,65,66,67,68,69,59,60,61,62,63,64,65,66,67,68,69,0,0,0,59,60,61,62,63,64,65,66,67,68,69,59,60,61,62,63,64,65,66,67,68,69,59,60,61,62,63,64,65,66,67,68,69,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,0,61,69,0,68,70,59,60,61,62,63,64,65,66,67,68,69,0,60,63,65,59,60,61,62,63,64,65,66,67,68,69,63,69,64,65,66,67,68,69,64,65,66,67,68,69,0,0,64,65,66,67,68,69,70,59,59,60,60,61,62,63,64,65,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,0,0,69,0,0,0,0,70,59,60,61,62,63,64,65,66,67,68,69,0,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,0,68,68,66,0,0,0,0,61,59,60,61,62,63,64,65,66,67,68,69,59,60,61,62,63,64,65,66,67,68,69,59,60,61,62,63,64,65,66,67,68,69,0,0,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,70,59,60,61,62,63,64,65,66,67,68,69,60,63,65,0,70,59,60,61,62,63,64,65,66,67,68,69,0,0,0,79,79,0,79,79,0,79,79,79,79,79,79,0,79,79,79,0,0,0,79,79,79,79,0,0,0,79,79,79,79,79,79,0,0,0,0,0,0,79,79,0,0,0,79,79,79,79,79,79,79,79,79,79,79,0,0,0,0,0,0,0,0,0,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[]],[[]],0,0,[[[3,[2]]],4],[[[3,[2]]],4],[5],[5],[5],[[6,7],8],[[6,7],8],[9,6],[10,6],[11,6],[12,6],[13,6],[[]],[14,6],[15,6],[16,6],[[]],[[]],0,0,[[],5],0,[[]],[[[18,[17]]],[[18,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],0,[6,[[3,[21]]]],[[],22],[[],23],[[],23],[[],24],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[2,25],4],[[2,25],4],[2,4],[[2,25],4],[[2,25],4],[2,4],[2,4],0,0,0,0,0,0,0,0,[26],[[27,28],27],[[27,2,29,30,25],[[4,[27]]]],[[27,31,25],27],[[32,2],4],[[33,2],4],[[27,2],4],[[34,2,35,36,5],[[4,[37]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[38,38],[[]],[39,38],[40,[[23,[27,16]]]],[40,[[23,[34,16]]]],[40,[[23,[39,16]]]],[40,[[23,[38,16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[],32],[[],33],[[],27],[[],34],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[34,[[43,[41]]]],[[27,[0,[44,45]]]],[[34,[0,[44,45]]]],[[39,[0,[44,45]]]],[[38,[0,[44,45]]]],[[32,7],8],[[33,7],8],[[27,7],8],[[34,7],8],[[39,7],8],[[38,7],8],[[]],[[]],[[]],[[]],[39,34],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[2,37],[[4,[27]]]],[[2,[3,[37]]],[[4,[[3,[34]]]]]],[[38,36,36,35,46,[43,[47]]],39],[39,35],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[39,46],[[],32],[[],33],[[],27],[[27,25],27],[[27,47],27],[[27,48,30,25],27],[39,22],[[27,28],27],[[27,49,30,25],27],[[27,31,25],27],[[33,50],33],[[32,50],32],[[32,50],32],[[33,50],33],[[32,50],32],[[33,50],33],[[32,50],32],[[33,50],33],[[32,50],32],[[33,50],33],[[32,50],32],[[32,50],32],0,[27,5],[34,5],[39,5],[38,5],[[27,2],[[4,[37]]]],[[34,2],[[4,[37]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[]],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[34,51]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[],1],[[],1],[2,4],0,[[]],[[]],[5],[5],[5],0,[[]],[[]],[[]],0,[[2,52],[[4,[[3,[53]]]]]],[[2,54],[[4,[55]]]],[2,[[4,[[43,[49]]]]]],[2,[[4,[35]]]],[2,[[4,[25]]]],[[2,36,37],[[4,[28]]]],[[2,56],[[4,[49]]]],[2,[[4,[[43,[57]]]]]],[[2,48],[[4,[30]]]],[[],5],[[]],[[[18,[17]]],[[18,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[2,[42,[41]]],[[4,[50]]]],0,[[2,[42,[41]]],[[4,[58]]]],[2,[[4,[31]]]],[[2,56,37],4],[[2,56],4],[2,4],[[2,2],4],[[],23],[[2,54],[[4,[[3,[55]]]]]],[[2,36,37],[[4,[[3,[28]]]]]],[[2,56],[[4,[[3,[49]]]]]],[2,[[4,[[3,[[43,[57]]]]]]]],[[2,48],[[4,[[3,[30]]]]]],[[],23],[[],24],[[]],[[]],[36,35],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[26],[26],[26],[26],[26],[26],[26],[26],[26],[26],[26],0,0,0,[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[42,[22]]],4],[59,59],[60,60],[61,61],[62,62],[63,63],[64,64],[65,65],[66,66],[67,67],[68,68],[69,69],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[2,37,46,56,36],4],[[2,36,36,[43,[22]]],4],[36,4],[40,[[23,[59,16]]]],[40,[[23,[60,16]]]],[40,[[23,[61,16]]]],[40,[[23,[62,16]]]],[40,[[23,[63,16]]]],[40,[[23,[64,16]]]],[40,[[23,[65,16]]]],[40,[[23,[66,16]]]],[40,[[23,[67,16]]]],[40,[[23,[68,16]]]],[40,[[23,[69,16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,[42,[41]]],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[[37,40],[[23,[16]]]],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[[2,36,36,56],[[4,[70]]]],0,0,[[2,[71,[22,22]],36,46,56],4],0,[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[5],[[72,36],[[4,[73]]]],[60,[[43,[41]]]],[63,[[43,[41]]]],[65,[[43,[41]]]],[[59,[0,[44,45]]]],[[60,[0,[44,45]]]],[[61,[0,[44,45]]]],[[62,[0,[44,45]]]],[[63,[0,[44,45]]]],[[64,[0,[44,45]]]],[[65,[0,[44,45]]]],[[66,[0,[44,45]]]],[[67,[0,[44,45]]]],[[68,[0,[44,45]]]],[[69,[0,[44,45]]]],0,0,[[64,64],35],[[65,65],35],[[66,66],35],[[67,67],35],[[68,68],35],[[69,69],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[2,36,74],[[4,[64]]]],[[2,36,36,36,36,[3,[22]]],[[4,[75]]]],[[64,7],8],[[65,7],8],[[66,7],8],[[67,7],8],[[68,7],8],[[69,7],8],[[]],[60,59],[[]],[[[42,[76]]],60],[[]],[[]],[[]],[[]],[[]],[[]],[66,65],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[37,[[4,[22]]]],[2,4],0,[[2,36],[[4,[43]]]],[2,[[4,[43]]]],[[2,54],[[4,[[3,[46]]]]]],[[2,[43,[77]]],4],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[],5],[[[43,[77]],[71,[22,22]]],[[4,[[43,[77]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[18,[17]]],[[18,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[36,[[4,[35]]]],0,0,[68,66],[[2,[71,[22,22]],72],[[4,[78]]]],[[2,46,56],4],[[2,[42,[46]],56],4],[[2,36],4],0,[59,5],[60,5],[61,5],[62,5],[63,5],[64,5],[65,5],[66,5],[67,5],[68,5],[69,5],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[[42,[41]]],[[43,[41,17]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[2,36,36,36,56],4],[[2,36,36,35],4],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],23],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[60,51]],[[63,51]],[[65,51]],[[2,54,36,36],[[4,[35]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[26],[[79,36,[3,[37]]],35],[[2,36,56],[[4,[43]]]],[[],1],[[],1],[[2,36],[[4,[80]]]],[[]],[[]],[79,79],[[]],[5],[5],[[2,36,3,36,35],[[4,[81]]]],[79,[[43,[22]]]],[79],[5],[[2,36,36,36],82],[[2,46,36,56],[[4,[75]]]],[2,[[4,[[3,[49]]]]]],[[79,7],8],[[]],[[]],[[]],[[2,[42,[22]]],[[4,[[43,[83]]]]]],[36,[[43,[36]]]],[2,[[4,[22]]]],[[],5],[[],79],[[]],[[[18,[17]]],[[18,[1,17]]]],[[[19,[17]]],[[19,[1,17]]]],[[[20,[17]]],[[20,[1,17]]]],[[2,36],[[4,[84]]]],[[2,56,37],[[4,[85]]]],[[2,56],[[4,[86]]]],[2,[[4,[[43,[87]]]]]],[36,[[4,[88]]]],[2,4],[[79,37]],[79],[2,[[4,[[43,[89]]]]]],[[2,56],[[4,[90]]]],[2,[[4,[91]]]],[[79,36]],[[]],[79,[[3,[22]]]],[[],23],[[],23],[[],24],[[]],[[]],[79,36],[[]],[79],[2,4],[2,4],[[2,[43,[47]]],4],[[2,[43,[47]]],[[4,[50]]]],[2,[[4,[43]]]],[[2,37],[[4,[92]]]],[[2,47],4],[[2,36],4],[2,[[4,[37]]]],[2,4],[[2,22],4]],"c":[],"p":[[8,"Any"],[3,"Db"],[4,"Option"],[6,"Result"],[15,"usize"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"Error"],[4,"TransactionError"],[4,"ErrorKind"],[4,"Error"],[4,"Format"],[4,"Error"],[3,"Error"],[3,"Error"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[8,"Error"],[3,"String"],[4,"Result"],[3,"TypeId"],[3,"Verifier"],[3,"Private"],[3,"TrDbColdStub"],[3,"MetaValues"],[3,"NetworkSpecs"],[4,"ValidCurrentVerifier"],[3,"ContentLoadTypes"],[3,"TrDbCold"],[3,"TrDbHot"],[3,"TrDbColdSign"],[15,"bool"],[15,"str"],[15,"u32"],[4,"SignContent"],[3,"TrDbColdSignOne"],[8,"Input"],[15,"u8"],[15,"slice"],[3,"Vec"],[8,"Output"],[8,"Sized"],[4,"MultiSigner"],[4,"Event"],[3,"VerifierKey"],[3,"OrderedNetworkSpecs"],[3,"Batch"],[8,"FnOnce"],[3,"H256"],[3,"SpecsInvariants"],[3,"AddressKey"],[3,"AddressDetails"],[3,"NetworkSpecsKey"],[3,"TypeEntry"],[3,"Tree"],[4,"SignaturesBulk"],[3,"SignaturesBulkV1"],[3,"DynamicDerivationTransaction"],[4,"TransactionBulk"],[3,"TransactionBulkV1"],[4,"ExportAddrs"],[3,"ExportAddrsV1"],[3,"ExportAddrsV2"],[4,"VaultFeatures"],[3,"SeedInfo"],[3,"AddrInfo"],[4,"DerivationCheck"],[3,"HashMap"],[3,"DynamicDerivationsAddressRequestV1"],[4,"DynamicDerivationsAddressResponse"],[4,"ExportedSet"],[3,"MKeyDetails"],[4,"MultiSignature"],[3,"SeedKeysPreview"],[3,"DDPreview"],[3,"SeedDraft"],[3,"MBackup"],[3,"MDeriveKey"],[3,"DerivationCheck"],[3,"SeedNameCard"],[3,"MKeysNew"],[3,"MManageMetadata"],[3,"MNetworkDetails"],[3,"MRawKey"],[3,"MNewSeedBackup"],[3,"MMNetwork"],[3,"MNetworkMenu"],[3,"MTypesInfo"],[3,"Entry"],[13,"DerivationExists"],[13,"SecretExposedMismatch"],[13,"SeedNameNotMatching"],[13,"NetworkSpecsKeyForAddressNotFound"],[13,"DifferentBase58Specs"],[13,"KeyCollisionBatch"],[13,"TwoRootKeys"],[13,"DbSchemaMismatch"],[13,"UnexpectedGenesisHash"],[13,"DifferentNamesSameGenesisHash"],[13,"NoSeedForKeyPair"],[13,"NoSeedFound"],[13,"MetaValuesNotFound"],[13,"KeyCollision"],[13,"Transaction"]]},\ +"defaults":{"doc":"Default data for Vault and Vault-supporting ecosystem.","t":"NRNENNGLLLLFFFFFFFLLLLLLLLLLLLLLLFFLFLLLLLLLMMMM","n":["Base58PrefixSpecsMismatch","DEFAULT_VERIFIER_PUBLIC","DefinitionsError","Error","IoError","OrphanMetadata","Result","as_any","as_any_mut","borrow","borrow_mut","default_address_book","default_chainspecs","default_chainspecs_to_send","default_general_verifier","default_types_content","default_types_vec","default_verifiers","deref","deref_mut","drop","fmt","fmt","from","from","from","from_mut","from_ref","init","into","into_any","into_any_arc","into_any_rc","nav_test_metadata","release_metadata","source","test_metadata","to_string","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","filename","meta","name","specs"],"q":[[0,"defaults"],[44,"defaults::Error"]],"d":["Base58 prefix from metadata (meta) does not match base58 …","Real Parity public key, with Sr25519 encryption","","","","Default metadata set contains metadata files that have no …","","","","","","Generate address book set for the default networks, for …","Generate network specs OrderedNetworkSpecs set for the …","Generate network specs NetworkSpecs set for the default …","Generate default general verifier Verifier, with Parity …","Generate default types as ContentLoadTypes","Generate default types as TypeEntry set","Generate verifiers set for the default networks, for cold …","","","","","","Returns the argument unchanged.","","","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Calls U::from(self).","","","","Read metadata set for navigation test cold database from …","Read metadata set for release cold database from …","","Read metadata set for test cold database from test_metadata…","","","","","","","","","","",""],"i":[11,0,11,0,11,11,0,11,11,11,11,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,11,0,11,11,11,11,11,11,11,26,27,26,27],"f":[0,0,0,0,0,0,0,[[],1],[[],1],[[]],[[]],[[],[[3,[2]]]],[[],[[3,[4]]]],[[],[[3,[5]]]],[[],6],[[],[[8,[7]]]],[[],[[8,[[3,[9]]]]]],[[],3],[10],[10],[10],[[11,12],13],[[11,12],13],[[]],[14,11],[15,11],[[]],[[]],[[],10],[[]],[[[17,[16]]],[[17,[1,16]]]],[[[18,[16]]],[[18,[1,16]]]],[[[19,[16]]],[[19,[1,16]]]],[[],[[8,[[3,[20]]]]]],[[],[[8,[[3,[20]]]]]],[11,[[22,[21]]]],[[],[[8,[[3,[20]]]]]],[[],23],[[],24],[[],24],[[],25],[[]],[[]],[[]],0,0,0,0],"c":[],"p":[[8,"Any"],[3,"AddressBookEntry"],[3,"Vec"],[3,"OrderedNetworkSpecs"],[3,"NetworkSpecs"],[3,"Verifier"],[3,"ContentLoadTypes"],[6,"Result"],[3,"TypeEntry"],[15,"usize"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"Error"],[3,"Error"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[3,"MetaValues"],[8,"Error"],[4,"Option"],[3,"String"],[4,"Result"],[3,"TypeId"],[13,"OrphanMetadata"],[13,"Base58PrefixSpecsMismatch"]]},\ +"definitions":{"doc":"Definitions and common methods for types used in Vault and …","t":"AAAAAAAAAAAAAAAAANNNNENNNELLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMDLLLLLLLLLLLLLLLLLLLLLLLLLLNNEDENNNNDLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLMDDDEDEDDNNLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLMMLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNENNNNNENNNNNGNNNNNENNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMENNNNNNENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNENNNNNNNNNNNNNNEEENNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMNNENLLFLLLLLFLLLFLLLLLFFFFFFFFLLLLFLLNNDENNNNDNNNDDNNNNDDNNDNNNNNNDDNNNNDDNNNNNLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMLLLLLLMMMMMMMMLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMDDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDDDLMLLLLLLLLLLMLLLLLLLLLLLLFLLLLLLLLMLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMFLLLLLLLLLLLLLLLLLLLLLLLLLMLMMMMLMMLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLMMDNNDENNNNNNNNNENNNNENDDDENDEDDNNNNNNNNNNNNNNENNENNDNENNNNNNNNNNNNNNNNNNNDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEDDDDDDDDDDDDDDDDDDDDDNNNENNNNDNNNNNCNNNNNNNNNNNDNNENNNNNNNENNEENDDNNNNNNNNENNNNNNENNNNNEDDDENNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMENNDDDDNNEDELLLLLLLLLLLLLLLLLLLLLLLMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMLMLLLLLLLLMMDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLENDENNNDNNDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLDLLLLLLLLLLLLLLLMLLLLLLLMLLLLLLLMMLLMMLLLLLLLLL","n":["crypto","danger","derivations","dynamic_derivations","error","error_active","error_signer","helpers","history","keyring","metadata","navigation","network_specs","qr_transfers","schema_version","types","users","Ecdsa","Ecdsa","Ed25519","Ed25519","Encryption","Ethereum","Sr25519","Sr25519","SufficientCrypto","__clone_box","__clone_box","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","decode","decode","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref_mut","deref_mut","drop","drop","encode_to","encode_to","eq","eq","equivalent","equivalent","fmt","fmt","from","from","from_mut","from_mut","from_ref","from_ref","identicon_style","init","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","multi_signature","show","size_hint","size_hint","to_keyed_vec","to_keyed_vec","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","type_id","type_id","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","verifier_value","vzip","vzip","public","public","public","signature","signature","signature","DangerRecord","as_any","as_any_mut","borrow","borrow_mut","deref","deref_mut","device_was_online","drop","from","from_ivec","from_mut","from_ref","init","into","into_any","into_any_arc","into_any_rc","safe","set_was_online","store","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","AlreadyExists","BadFormat","DerivedKeyError","DerivedKeyPreview","DerivedKeyStatus","Importable","Invalid","KeySetMissing","NetworkMissing","SeedKeysPreview","__clone_box","__clone_box","__clone_box","__clone_box","address","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","derivation_path","derived_keys","drop","drop","drop","drop","encryption","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","genesis_hash","has_pwd","identicon","init","init","init","init","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","multisigner","name","network_title","status","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","vzip","vzip","vzip","vzip","errors","DynamicDerivationRequestInfo","DynamicDerivationResponseInfo","DynamicDerivationsAddressRequestV1","DynamicDerivationsAddressResponse","DynamicDerivationsAddressResponseV1","DynamicDerivationsRequest","DynamicDerivationsRequestInfo","DynamicDerivationsResponseInfo","V1","V1","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","addr","addr","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","decode","decode","decode","decode","decode","decode","decode","decode","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derivation_path","derivation_path","drop","drop","drop","drop","drop","drop","drop","drop","dynamic_derivations","dynamic_derivations","encode","encode","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encryption","encryption","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","genesis_hash","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","multisigner","multisigner","public_key","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","using_encoded","using_encoded","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","AddSpecs","Base58PrefixNotDecodeable","Base58PrefixSpecsMismatch","CodecError","EncryptionMismatch","Error","HexDecodingError","Io","LibSecp","LoadMeta","LoadTypes","MetadataError","MetadataError","MetadataMismatch","NoSystemPallet","NoVersionInConstants","NotMeta","Result","RuntimeVersionNotDecodeable","SpecsGenesisHashMismatch","SpecsToSendEncryptionMismatch","SpecsToSendGenesisHash","Ss58","TransferContent","UnableToDecode","UnknownEncryption","VersionIncompatible","Wasm","WrongPublicKeyLength","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","eq","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","init","init","init","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","show","source","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","vzip","vzip","vzip","address_key","encryption","encryption","genesis_hash","genesis_hash","network_specs_key","network_specs_key","network_specs_key","that_name","that_version","this_name","this_version","meta","specs","Check","DecodingMetadata","Executor","FaultyMetadata","FaultyMetadata","File","MetadataFile","Wasm","WasmError","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","fmt","fmt","fmt","from","from","from","from","from","from","from_mut","from_mut","from_ref","from_ref","init","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","source","to_string","try_from","try_from","try_into","try_into","type_id","type_id","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","vzip","vzip","ArgumentNameError","ArgumentTypeError","BalanceNotDescribed","BitVecFailure","BlockHashTwice","DataTooShort","Decoding","Era","EraTwice","ExtensionsOlder","FundamentallyBadV14Metadata","GeneralVerifierForContent","GenesisHashMismatch","GenesisHashTwice","IdFields","ImmortalHashMismatch","MethodNotFound","Network","NoBlockHash","NoCallsInPallet","NoCompact","NoEra","NoVersionExt","NotBitOrderType","NotBitStoreType","PalletNotFound","ParserDecodingError","ParserError","ParserMetadataError","PrimitiveFailure","SeparateMethodExtensions","SomeDataNotUsedExtensions","SomeDataNotUsedMethod","SpecVersionTwice","Types","UnexpectedCompactInsides","UnexpectedEnumVariant","UnexpectedImmortality","UnexpectedMortality","UnexpectedOptionVariant","UnknownType","V14TypeNotResolved","WrongNetworkVersion","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","eq","fmt","fmt","fmt","fmt","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","init","init","init","init","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","vzip","vzip","vzip","vzip","name","method_index","pallet_name","as_decoded","in_metadata","Blockies","Dots","IdenticonStyle","Jdenticon","as_any","as_any_mut","base58_or_eth_to_multisigner","borrow","borrow_mut","deref","deref_mut","drop","ecdsa_public_to_eth_address","from","from_mut","from_ref","get_multisigner","init","into","into_any","into_any_arc","into_any_rc","make_identicon_from_account","make_identicon_from_id20","make_identicon_from_multisigner","multisigner_to_encryption","multisigner_to_public","pic_meta","pic_types","print_multisigner_as_base58_or_eth","try_from","try_into","type_id","unchecked_into","unhex","unique_saturated_into","vzip","DatabaseInitiated","DeviceWasOnline","Entry","Event","GeneralVerifierSet","HistoryCleared","IdentitiesWiped","IdentityAdded","IdentityHistory","IdentityRemoved","MessageSignError","MessageSigned","MetaValuesDisplay","MetaValuesExport","MetadataAdded","MetadataRemoved","MetadataSigned","NetworkSpecsAdded","NetworkSpecsDisplay","NetworkSpecsExport","NetworkSpecsRemoved","NetworkSpecsSigned","NetworkVerifierDisplay","NetworkVerifierSet","ResetDangerRecord","SecretWasExported","SeedCreated","SeedNameWasShown","SeedRemoved","SignDisplay","SignMessageDisplay","SystemEntry","TransactionSignError","TransactionSigned","TypesAdded","TypesDisplay","TypesExport","TypesRemoved","TypesSigned","UserEntry","Warning","WrongPassword","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","all_events_preview","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","decode","decode","decode","decode","decode","decode","decode","decode","decode","decode","decode","decode","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encryption","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","events","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","general_verifier","general_verifier","genesis_hash","get","get","get","get","get","get","get","get","get","get","init","init","init","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","message","meta_hash","meta_hash","name","name","network","network_genesis_hash","network_name","network_name","new","new","new","new","new","new","path","public_key","seed_name","signed_by","signed_by","signed_by","signed_by","signed_by","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","specs_to_send","timestamp","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","transaction","transaction","transaction_network_encryption","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","types_hash","types_hash","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","user_comment","user_comment","valid_current_verifier","valid_current_verifier","verifier","version","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","identity_history","identity_history","identity_history","meta_values_display","meta_values_display","meta_values_export","network_specs_display","network_specs_display","network_specs_export","network_verifier_display","seed_created","seed_name","seed_name_was_shown","sign_display","sign_display","sign_message_display","sign_message_display","system_entry","types_display","types_display","types_export","user_entry","verifier","warning","AddressBookKey","AddressKey","MetaKey","MetaKeyPrefix","NetworkSpecsKey","Order","VerifierKey","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","decode","decode","decode","decode_all","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","encode","encode","encode_to","encode_to","encode_to","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_hex","from_hex","from_ivec","from_ivec","from_ivec","from_ivec","from_ivec","from_ivec","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_name","from_number","from_parts","from_parts","from_parts","from_parts","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_title","genesis_hash","genesis_hash_encryption","get_hash","hash","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","key","key","key","key","key","multi_signer","name_version","new","prefix","public_key_encryption","size_hint","size_hint","size_hint","stamp","store","title","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","using_encoded","using_encoded","vzip","vzip","vzip","vzip","vzip","vzip","vzip","AddressBookEntry","MetaHistoryEntry","MetaInfo","MetaSetElement","MetaValues","__clone_box","address","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","block_hash","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","convert_wasm_into_metadata","decode","decode","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","def","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","encode_to","encode_to","encryption","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","from","from","from","from","from","from_entry","from_entry","from_entry","from_entry_checked","from_entry_name_version_checked","from_entry_with_key_parts","from_entry_with_title","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_slice_metadata","from_str_metadata","from_wasm_file","genesis_hash","info_from_metadata","init","init","init","init","init","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","meta","name","name","name","name","name","optional_base58prefix","optional_base58prefix","optional_base58prefix","process_entry","runtime_metadata","runtime_metadata_from_slice","size_hint","size_hint","to_keyed_vec","to_keyed_vec","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","version","version","version","version","vzip","vzip","vzip","vzip","vzip","warn_incomplete_extensions","warn_incomplete_extensions","ActionResult","AddSpecs","AddSpecs","Address","AlertData","All","AuthorCard","AuthorPlainCard","AuthorPublicKeyCard","BBananaSplitRecoveryResult","Back","Backup","Backup","BalanceCard","BananaSplitRecoveryResult","BitVecCard","BlockHashCard","Blockies","CallCard","Card","Confirm","DDDetail","DDKeySet","DDPreview","DecodeSequenceResult","DefaultCard","DerivationCheck","DerivationDestination","DerivationEntry","DerivationPack","Derivations","DerivationsCard","DeriveKey","Documents","Done","Dots","DynamicDerivationTransaction","DynamicDerivations","EnterPassword","EnumVariantNameCard","EraImmortalCard","EraMortalCard","ErrorCard","ErrorData","ExportedSet","FieldNameCard","FieldNumberCard","FooterButton","H1","H4","History","IdCard","Identicon","IdentityFieldCard","ImportDerivations","Jdenticon","KeyDetails","KeyDetailsAction","KeyDetailsMulti","KeyMenu","Keys","Keys","LoadMeta","LoadMetadata","LoadTypes","LoadTypes","Log","Log","LogComment","LogDetails","LogRight","LogRight","LogScreenEntry","MAddressCard","MBackup","MDeriveKey","MEnterPassword","MEventMaybeDecoded","MKeyAndNetworkCard","MKeyDetails","MKeyDetailsMulti","MKeysCard","MKeysInfoExport","MKeysNew","MLog","MLogDetails","MLogRight","MMMNetwork","MMNetwork","MManageMetadata","MManageNetworks","MMetadataRecord","MNetworkCard","MNetworkDetails","MNetworkMenu","MNewSeed","MNewSeedBackup","MPasswordConfirm","MRawKey","MRecoverSeedName","MRecoverSeedPhrase","MSCCall","MSCContent","MSCCurrency","MSCEnumVariantName","MSCEraMortal","MSCFieldName","MSCFieldNumber","MSCId","MSCNameVersion","MSCNetworkInfo","MSCTip","MSCTxSpecPlain","MSeedMenu","MSeeds","MSettings","MSignSufficientCrypto","MSignatureReady","MSignedTransaction","MSufficientCryptoReady","MTransaction","MTypesInfo","MVerifier","MVerifierDetails","ManageMetadata","ManageNetworks","MetaCard","ModalData","MultiSelect","NDMenu","NNetworkDetails","NameVersionCard","Network","NetworkDetailsMenu","NetworkGenesisHashCard","NetworkInfoCard","NetworkNameCard","NetworkSelector","NetworkSpecs","NewSeed","NewSeed","NewSeedBackup","NewSeedMenu","NewSpecsCard","NonceCard","NoneCard","Other","PalletCard","PasswordConfirm","Past","PathAndNetwork","Pin","Pwd","QrData","Read","Read","RecoverSeedName","RecoverSeedPhrase","RecoveredSeed","Regular","RequestPassword","RightButton","Scan","Scan","ScreenData","ScreenNameType","SeedMenu","SeedNameCard","SeedNameWithIdenticon","SeedSelector","SelectSeed","SelectSeedForBackup","Selected","Sensitive","Settings","Settings","Shield","ShieldAlert","Sign","Sign","SignSufficientCrypto","SignatureReady","Stub","Stub","StubNav","SufficientCryptoReady","TextCard","TipCard","TipPlainCard","Transaction","TransactionAction","TransactionCard","TransactionCardSet","TransactionSignAction","TransactionType","TxSpecCard","TxSpecPlainCard","TypesInfo","TypesInfo","TypesInfoCard","VVerifier","VarNameCard","VerifierCard","WarningCard","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","address","address","address","address","address_key","address_key","address_key","alert_data","amount","amount","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","author","author_info","author_info","author_info","author_info","back","base58","base58","base58","base58","base58","base58prefix","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","button_good","card","checksum","clear","clear","clear","clear","clear","clear","clear","clear","clear","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","collision","color","content","content","content","counter","cropped_path","current_number","current_on_screen","current_verifier","data","decimals","decoded","default","default","default","default","default","default","default","default","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derivation","derivations","derivations","derived_keys_count","details","docs","docs_enum_variant","docs_field_name","docs_field_number","docs_type","docs_type","draft","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","encryption","encryption","encryption","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","era","error","error","error","event","events","events","events","extensions","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","footer","footer_button","frames","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","genesis_hash","guess_set","has_pwd","has_pwd","has_pwd","id_set","identicon","identicon","identicon","identicon","identicon","identicon","identicon","identicon","identities","importing_derivations","indent","index","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_clear","is_clear","is_clear","is_clear","is_clear","is_clear","is_clear","is_clear","is_clear","is_empty","is_some_already_imported","is_some_network_missing","key","key","key","key_details","key_set","keyboard","keyboard","keyboard","len","log","logo","logo","logo","logo","logo","message","meta","meta","meta_hash","meta_hash","meta_id_pic","meta_id_pic","method","method_name","modal_data","name","name","name","name","name","network","network_genesis_hash","network_info","network_info","network_info","network_info","network_logo","network_logo","network_logo","network_logo","network_logo","network_order","network_specs_key","network_specs_key","network_specs_key","network_title","network_title","networks","networks","networks","new_specs","number","order","order","order","order","order","out_of","path","path","path","path_id","path_id","path_type","path_type","period","phase","pubkey","public_key","public_key","public_key","pwd","qr","qr","ready_seed","right_button","root","screen_data","screen_label","screen_name_type","secondary_color","secret_exposed","seed","seed","seed_name","seed_name","seed_name","seed_name","seed_name","seed_name","seed_name","seed_name","seed_name","seed_name_cards","seed_phrase","selected","set","signature","signatures","signed_by","specname","specs_version","sufficient","swiped","timestamp","timestamp","timestamp","title","title","title","title","title","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","transaction","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","ttype","ttype","tx_version","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","types_hash","types_id_pic","types_info","types_on_file","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unit","units","units","used_in_networks","user_input","verifier","verifier_details","version","version","version","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","warning","where_to","f","f","s","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","b","s","s","s","s","identity","identity","identity","f","name","pic","types","version","f","f","f","f","f","f","f","f","f","f","f","f","data","data","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","f","l","n","actions","checksum","content","r","s","stub","u","CurrentVerifier","Custom","General","NetworkProperties","NetworkSpecs","OrderedNetworkSpecs","ShortSpecs","Standard","Valid","ValidCurrentVerifier","Verifier","VerifierValue","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","base58prefix","base58prefix","base58prefix","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","color","decimals","decimals","decimals","decode","decode","decode","decode","decode","decode","decode","decode","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","drop","drop","encode","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encode_to","encryption","eq","eq","eq","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_entry_checked","from_entry_checked","from_entry_with_key_checked","from_entry_with_key_checked","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","genesis_hash","genesis_hash","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","logo","name","name","order","path_id","secondary_color","short","show_card","show_card","show_error","show_error","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","size_hint","specs","title","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_store","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unit","unit","unit","using_encoded","v","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","v","m","ContentAddSpecs","ContentLoadMeta","ContentLoadTypes","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","decode","decode","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","encode","encode","encode_to","encode_to","from","from","from","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_slice","from_slice","from_slice","generate","generate","generate","genesis_hash","init","init","init","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","meta","meta_genhash","show","size_hint","size_hint","specs","store","to_keyed_vec","to_keyed_vec","to_sign","to_sign","to_sign","to_transfer","to_transfer","to_transfer","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","types","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","using_encoded","using_encoded","vzip","vzip","vzip","write","write","write","SchemaVersion","as_any","as_any_mut","borrow","borrow_mut","current","decode","decode_all","decode_all_with_depth_limit","decode_with_depth_limit","deref","deref","deref_mut","drop","encode","encode_to","from","from_ivec","from_mut","from_ref","init","into","into_any","into_any_arc","into_any_rc","size_hint","store_current","to_keyed_vec","try_from","try_into","type_id","unchecked_into","unique_saturated_into","using_encoded","vzip","Description","Enum","EnumVariant","EnumVariantType","None","Struct","Struct","StructField","Type","Type","TypeEntry","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","decode","decode","decode","decode","decode","decode_all","decode_all","decode_all","decode_all","decode_all","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_all_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","decode_with_depth_limit","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","description","drop","drop","drop","drop","drop","encode_to","encode_to","encode_to","encode_to","encode_to","eq","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","equivalent","field_name","field_type","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","init","init","init","init","init","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","name","size_hint","size_hint","size_hint","size_hint","size_hint","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_keyed_vec","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","variant_name","variant_type","vzip","vzip","vzip","vzip","vzip","AddressDetails","__clone_box","as_any","as_any_mut","borrow","borrow_mut","clone","clone_into","decode","decode_all","decode_all_with_depth_limit","decode_with_depth_limit","deref","deref_mut","drop","encode_to","encryption","eq","equivalent","fmt","from","from_entry_with_key_checked","from_mut","from_ref","has_pwd","identicon_style","init","into","into_any","into_any_arc","into_any_rc","is_root","network_id","path","process_entry_checked","process_entry_with_key_checked","secret_exposed","seed_name","size_hint","to_keyed_vec","to_owned","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip"],"q":[[0,"definitions"],[17,"definitions::crypto"],[101,"definitions::crypto::SufficientCrypto"],[107,"definitions::danger"],[134,"definitions::derivations"],[267,"definitions::derivations::DerivedKeyStatus"],[268,"definitions::dynamic_derivations"],[574,"definitions::error"],[683,"definitions::error::Error"],[695,"definitions::error::MetadataError"],[697,"definitions::error_active"],[757,"definitions::error_signer"],[889,"definitions::error_signer::GeneralVerifierForContent"],[890,"definitions::error_signer::ParserDecodingError"],[892,"definitions::error_signer::ParserError"],[894,"definitions::helpers"],[931,"definitions::history"],[1446,"definitions::history::Event"],[1470,"definitions::keyring"],[1720,"definitions::metadata"],[1894,"definitions::navigation"],[4723,"definitions::navigation::AlertData"],[4725,"definitions::navigation::BananaSplitRecoveryResult"],[4726,"definitions::navigation::Card"],[4759,"definitions::navigation::DecodeSequenceResult"],[4763,"definitions::navigation::ExportedSet"],[4764,"definitions::navigation::Identicon"],[4767,"definitions::navigation::MSCContent"],[4772,"definitions::navigation::ModalData"],[4784,"definitions::navigation::QrData"],[4786,"definitions::navigation::ScreenData"],[4803,"definitions::navigation::StubNav"],[4805,"definitions::navigation::TransactionAction"],[4812,"definitions::network_specs"],[5134,"definitions::network_specs::ValidCurrentVerifier"],[5135,"definitions::network_specs::VerifierValue"],[5136,"definitions::qr_transfers"],[5242,"definitions::schema_version"],[5277,"definitions::types"],[5464,"definitions::users"]],"d":["Encryption-related types with public information","Record of the Vault exposure to dangerous events","","","","Errors occurring on the active side, i.e. while operating …","Errors occurring in Vault","Common helper functions","Types used in Vault history log","Key types and key generation for hot and cold databases","Network metadata and related types","","Network specs, verifiers, and related types","Information that could be send and received through …","Record of the Vault database schema version","Types description needed to decode transactions generated …","Address key associated non-secret information stored in …","","Ecdsa encryption algorithm","","Ed25519 encryption algorithm","Encryption algorithm","","","Sr25519 encryption algorithm","Data sufficient to generate signed update","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","The style to use for identicons.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","Get MultiSignature from signature part of SufficientCrypto","Display the encryption","","","","","","","","","","","","","","","","","","Get VerifierValue from public key part of SufficientCrypto","","","public key of the signature author","public key of the signature author","public key of the signature author","signature for the data","signature for the data","signature for the data","Danger status in the Vault database","","","","","","","Get the value of device_was_online flag from DangerRecord.","","Returns the argument unchanged.","Get DangerRecord with content from the encoded value, as …","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Calls U::from(self).","","","","Set danger record to “safe”.","Set device_was_online exposure flag to true.","Transform DangerRecord into Vec<u8> to put in the …","","","","","","","Key is already into the Vault. Unable to determine for a …","Bad format of the derivation path","","","","Key can be imported into the Vault","","Seed is not in the Vault","Network specs were not imported into the Vault","","","","","","Address in the network.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The derivation path of the key if user provided one","Derived keys.","","","","","The type of encryption in the network","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Genesis hash","Has to be calculated using inject_derivations_has_pwd. …","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","Public key of the root key.","Name of the seed.","Might be None if network specs were not imported into the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Dynamic derivation path","Dynamic derivation path","","","","","","","","","","","","","","","","","","","","","The type of encryption in the network","The type of encryption in the network","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Genesis hash of the network for the dynamic derivation","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","Public key of the root key","Public key of the root key","Public key of the derivation path. The address may be …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","add_specs message content","Metadata has SS58Prefix constant in System pallet, but its …","Base58 prefix from metadata (meta) does not match base58 …","","Error when there is encryption mismatch between one of …","","","","","load_metadata message content","load_types message content","Intrinsic problems of the metadata making it unsuitable …","","Network name and/or network version in MetaKey do not …","Metadata does not have System pallet, i.e. there is no …","Metadata does not have Version constant in System pallet, …","Metadata first 4 bytes are not expected b"meta" prelude","","Vec<u8> retrieved from Version constant in System pallet …","NetworkSpecsKey is built using network genesis hash and …","NetworkSpecsKey is built using network genesis hash and …","NetworkSpecsKey is built using network genesis hash and …","","Error decoding transfer content","Metadata body (after b"meta" prelude) could not be decoded …","","Supported are V12, V13, and V14 versions of RuntimeMetadata…","","Received public key length is different from the one …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","Display TransferContent in readable form","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Error checking metadata file","Metadata extracted from wasm file could not be decoded.","Failed to make Metadata_metadata call on data extracted …","Metadata extracted from wasm file is not suitable to be …","Metadata extracted from the metadata file is not suitable …","Error reading wasm file.","Unable to read directory with default metadata","Errors with wasm files processing","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","Only for RuntimeMetadataV12 and RuntimeMetadataV13. …","Only for RuntimeMetadataV12 and RuntimeMetadataV13. …","Parser processes certain types as balance (i.e. transforms …","Only for RuntimeMetadataV14. Parser failed to decode …","Metadata extensions have more than one block hash","Parser was expecting more data.","Errors occurring during the decoding procedure.","Only for RuntimeMetadataV14. Parser failed to decode data …","Metadata extensions have more than one Era","Error decoding the extensions using metadata with …","Errors occurring because the metadata RuntimeMetadataV14 …","Content that should have been verified by the general …","Genesis hash cut from the end of the transaction does not …","Metadata extensions have more than one genesis hash","Only for RuntimeMetadataV12 and RuntimeMetadataV13. …","In immortal transaction the block hash from the extensions …","Used only for RuntimeMetadataV12 or RuntimeMetadataV13, …","Network data. Associated data is the network name.","Metadata extensions have no block hash","Only for entry call in RuntimeMetadataV14. Pallet found …","Parser was trying to find an encoded compact, in the bytes …","Metadata extensions have no Era","Metadata extensions have no network metadata version","Only for RuntimeMetadataV14. While decoding BitVec<T,O>, …","Only for RuntimeMetadataV14. While decoding BitVec<T,O>, …","Used only for all calls in RuntimeMetadataV12 or …","Errors directly related to transaction parsing","Errors in transaction parsing","Errors occurring because the network metadata …","Parser was unable to decode the data piece into a …","","Only for RuntimeMetadataV14. Parser expects to use all …","Parser expects to use all data in decoding. This error …","Metadata extensions have more than one network metadata …","Types information.","Parser found that type declared as a compact has inner …","SCALE-encoded enum can have as a first byte only correct …","Transaction was announced by the prelude to be mortal (…","Transaction was announced by the prelude to be immortal (…","SCALE-encoded Option<_> can have as a first byte:","Only for RuntimeMetadataV12 and RuntimeMetadataV13. Parser …","Only for RuntimeMetadataV14. Found type index could not be …","While parsing transaction with certain version of network …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","index of the method, second byte of the call data","name of the pallet, found from the first byte of the call …","metadata version from transaction extensions, as found …","metadata version actually used for parsing, from the …","Blockies style used in Ethereum networks.","Default style for substrate-based networks, dots in a …","","Jdenticon style used to identify key sets.","","","","","","","","","Turn a ecdsa::Public addr into an Ethereum address.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get MultiSigner from public key and Encryption","","Calls U::from(self).","","","","","","Print identicon from MultiSigner ","Get Encryption from MultiSigner ","Get Vec<u8> public key from MultiSigner ","Print id pic for metadata hash","Print id pic for hash of SCALE-encoded types data","Print MultiSigner in base58 format","","","","","Decode hexadecimal &str into Vec<u8>, with descriptive …","","","Database was initiated","Vault was online, i.e. the air-gap was broken","History log individual entry","Events that could be recorded in the history log","General verifier was set up","History was cleared","All identities were wiped","User generated a new address","Event content for address generation or removal.","User removed an address","User tried to generate signature for a message, but failed …","User has generated signature for a message","Event content for importing or removing metadata of a …","Event content for generating SufficientCrypto QR code for …","Network metadata was added","Network metadata was removed","User has generated SufficientCrypto with one of Vault …","Network specs were added","Event content for importing or removing network specs ","Event content for generating SufficientCrypto QR code for …","Network specs were removed","User has generated SufficientCrypto with one of Vault …","Event content for setting network verifier","Network verifier with ValidCurrentVerifier was set for …","User has acknowledged the dangers detected and has reset …","User has generated QR code for secret key export","New seed was created (stored value here is the seed name)","User opened seed backup, and seed phrase for shortly shown …","User removed a seed","History log information about transactions, both …","History log information about messages, both successfully …","System-generated entry into history log","User tried to generate signature for a transaction, but …","User has generated signature for a transaction","Types information was added","Event content for importing or removing types information","Event content for generating SufficientCrypto QR code for …","Types information was removed","User has generated SufficientCrypto with one of Vault …","User has manually added entry to history log","A warning was produces and displayed to user","User has entered wrong password","","","","","","","","","","","","","Test function generating a set of all possible events","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Encryption scheme of the seed.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","Generate MetaValuesDisplay from MetaValues","Generate MetaValuesExport from MetaValues and VerifierValue","Generate NetworkSpecsDisplay from OrderedNetworkSpecs, …","Generate NetworkSpecsExport from NetworkSpecs and …","Generate NetworkVerifierDisplay from VerifierKey, …","Generate TypesDisplay from ContentLoadTypes and types …","Generate TypesExport from ContentLoadTypes and …","Generate IdentityHistory from parts ","Generate SignDisplay from parts ","Generate SignMessageDisplay from parts ","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","decoded message","","","","","","genesis hash of the network within which the address is ","name for the network in which transaction is generated, as …","name for the network in which message transaction is …","","","","","","","path with soft (/) and hard (//) derivations only, without …","Public key.","The name of the seed.","","","VerifierValue of address","address that has generated and signed the transaction ","address that has generated and signed the message ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get raw transaction from SignDisplay ","raw Vec<u8> transaction that user either tried to sign or …","Get raw transaction, network name, and Encryption from …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Hash of SCALE-encoded types data","","","","","","","","","","","","","","","","","","","","","","","","","user entered comment for transaction","user entered comment for message","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Key in ADDRESS_BOOK tree (hot database)","Key in ADDRTREE tree (cold database)","Key in METATREE (cold and hot database) and in META_HISTORY…","Prefix for searching in METATREE (cold and hot database) …","Key in SPECSTREE tree (cold database) and in SPECSPREPTREE …","Key in HISTORY tree (cold database)","Key in VERIFIERS tree (cold database)","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Transform hexadecimal String into NetworkSpecsKey","Transform hexadecimal String into AddressKey","Transform database IVec key into NetworkSpecsKey prior to …","Transform database IVec key into VerifierKey ","Transform database IVec key into AddressKey prior to …","Transform database IVec key into MetaKey prior to …","Transform database IVec key into Order.","Transform database IVec key into AddressBookKey prior to …","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Generate MetaKeyPrefix from network name","Generate Order from u32 number","Generate NetworkSpecsKey from parts: network genesis hash …","Generate VerifierKey from network genesis hash","Generate AddressKey from parts: raw public key and …","Generate MetaKey from parts: network name and network …","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Generate AddressBookKey from network address book title","Get genesis hash from the VerifierKey","Get genesis hash as H256 and Encryption from …","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","Transform NetworkSpecsKey into Vec<u8> database key ","Transform VerifierKey into Vec<u8> database key ","Transform AddressKey into Vec<u8> database key ","Transform MetaKey into Vec<u8> database key ","Transform AddressBookKey into Vec<u8> database key ","Get MultiSigner from the AddressKey ","Get network name and network version from the MetaKey","Generate AddressKey from corresponding MultiSigner value …","Transform MetaKeyPrefix into Vec<u8> database key prefix ","Get public key and Encryption from the AddressKey ","","","","Produce u32 number from the Order.","Transform Order into Vec<u8> database key","Get the network address book title from the AddressBookKey","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Network information needed for RPC calls in the network …","META_HISTORY tree entry","Network information extracted from the metadata: name, …","Metadata as checked RuntimeMetadata with network info …","Metadata values: name, version, optional base58 prefix, …","","URL address for RPC calls, with or without preferred port","","","","","","","","","","","block hash at which the metadata was fetched, from value","","","","","","","","","","","","","Extracts raw metadata in Vec<u8> format from wasm file.","","","","","","","","","Address book entry is the default one","","","","","","","","","","","","","","","","","","Encryption that is supported by the network ","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Generates MetaSetElement from Vault database tree METATREE …","Gets AddressBookEntry from from hot database tree …","From the whole entry","Gets MetaValues from either cold or hot database tree …","Generates MetaValues from value extracted from database …","From the entry with already known key parts","Gets AddressBookEntry from network address book title and …","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Gets MetaValues from raw metadata in Vec<u8> format","Gets MetaValues from raw hexadecimal metadata","Gets MetaValues from wasm file","Network genesis hash","Get MetaInfo from RuntimeMetadata","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","raw metadata","Gets network name","Network name, from metadata Version constant ","Network name, from metadata Version constant ","Network name, as it appears in Version constant in metadata","network name, from key","Gets optional base58 prefix, if there is one in the …","Network base58 prefix, could be encountered in metadata …","Network base58 prefix, could be encountered in metadata …","Gets network address book title and AddressBookEntry as a …","Gets runtime metadata, to be used in transcation decoding","Get RuntimeMetadata from slice of raw Vec<u8> metadata","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Gets network version","Network version, from in metadata Version constant ","Network version, from in metadata Version constant ","network metadata version, from key","","","","","","Flag to indicate that extrinsic set from metadata with …","Flag to indicate that extrinsic set from metadata with …","","","","","","","","","","","","","","","","","","","","","","","","Dynamic deprivations model","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Data about signatures that are ready.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Enum describing Stub content. Is used for proper …","","","","","","Enum containing card sets for four different outcomes: …","","","A single transaction signing action.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Information about the signing key of this transaction.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Parsed contents of the transaction.","","","","","","","","Get a reference to the underlying data.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","If this transaction should be signed with a passworded key.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If the underlying data is empty.","","","","","","","","","","","Get the length of the underlying data","","","","","","","","","","","","","","","","","","","","","","","","Info about the network this tx happens on.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Frames of the animated QR code that should be displayed by …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Current network verifier","Network has some other verifier, different from the …","Network has general verifier","Network properties that must be fetched with RPC call for …","Network parameters stored SCALE-encoded in the hot database","Network parameters stored SCALE-encoded in the cold …","Network parameters needed to decode and display transaction","public key for standard substrate-compatible encryption …","Verifier is valid, Vault can use the network","Possible variants of valid current network verifier","Verifier information","Information on known and existing verifier","","","","","","","","","","","","","","","","","","","","","","","","Network-specific prefix for address representation in …","Network-specific prefix for address representation in …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Network-associated color. Historically is there, not doing …","Order of magnitude, by which the token unit exceeds the …","Order of magnitude, by which the token unit exceeds the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Encryption algorithm the network uses ","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Gets OrderedNetworkSpecs from cold database tree SPECSTREE …","Gets NetworkSpecs from hot database tree SPECSTREEPREP …","Gets OrderedNetworkSpecs from NetworkSpecsKey and …","Gets NetworkSpecs from NetworkSpecsKey and associated …","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Network genesis hash ","Network genesis hash ","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","Network associated logo ","Network name, as it appears in network metadata ","Network name, as it appears in network metadata ","Order in which the network is displayed by Vault","Default derivation path for addresses in this network ","Network-associated secondary color. Historically is there, …","Makes ShortSpecs from NetworkSpecs","Get the MVerifierDetails for UI to show.","Get the MVerifierDetails for UI to show.","Display Verifier in human-readable format, for errors ","Display VerifierValue in human-readable format, for errors …","","","","","","","","","","Network title, as it appears in Vault menus.","","","","","","","","","","","","","","","","Makes OrderedNetworkSpecs from NetworkSpecs, needs order …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Token name, to display balance-related values properly. ","Token name, to display balance-related values properly. ","","","","","","","","","","","","","","add_specs QR code content","load_metadata QR code content","load_types QR code content","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Transform &[u8] slice into ContentLoadMeta.","Transform &[u8] slice into ContentAddSpecs.","Transform &[u8] slice into ContentLoadTypes. ","Generate ContentLoadMeta from metadata &[u8] slice and …","Generate ContentAddSpecs from network specs NetworkSpecs.","Generate ContentLoadTypes from types information …","Get genesis hash [u8; 32] from ContentLoadMeta.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","Get metadata Vec<u8> from ContentLoadMeta.","Get metadata Vec<u8> and genesis hash [u8; 32] from …","Generate types information hash and corresponding id pic","","","Get network specs NetworkSpecs from ContentAddSpecs.","Transform ContentLoadTypes into Vec<u8> to be put in the …","","","Transform ContentLoadMeta into Vec<u8> that could be …","Transform ContentAddSpecs into Vec<u8> that could be …","Transform ContentLoadTypes into Vec<u8> that could be …","Transform ContentLoadMeta into Vec<u8> that is …","Transform ContentAddSpecs into Vec<u8> that is …","Transform ContentLoadTypes into Vec<u8> that is …","","","","","","","","","","Get types information Vec<TypeEntry> from ContentLoadTypes…","","","","","","","","","","","","Write ContentLoadMeta into file that could be signed by …","Write ContentAddSpecs into file that could be signed by …","Write ContentLoadTypes into file that could be signed by …","","","","","","Get the current schema version","","","","","","","","","","","Returns the argument unchanged.","Get SchemaVersion with content from the encoded value, as …","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Calls U::from(self).","","","","","","","","","","","","","","Type description","type is an enum","Enum variant description","Types of enum variants","","type is a struct","","Struct field description","type is a type alias","","Information each type has to have: type name and …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","type description","","","","","","","","","","","","","","","","","","","","","struct field name, if it exists, it will be displayed …","field type","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","type name, as it appears in the metadata","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","enum variant name, will be displayed during the parsing if …","variant type","","","","","","Address key associated non-secret information stored in …","","","","","","","","","","","","","","","","encryption algorithm associated with the address key and …","","","","Returns the argument unchanged.","Gets AddressDetails from AddressKey and associated value …","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","whether the address key has an associated password","The style to use for identicons.","","Calls U::from(self).","","","","Checks if the AddressDetails have empty derivation path …","set of networks, identified through NetworkSpecsKey, that …","derivation path, only with soft (/) and hard (//) …","Gets (MultiSigner, AddressDetails) tuple from database …","Gets (MultiSigner, AddressDetails) tuple from AddressKey …","address, or its parent address, had or could have secret …","seed name (as it is known to the Vault device)","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,3,4,0,3,3,4,0,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,4,3,3,4,3,4,3,4,3,4,3,4,4,3,3,4,3,4,3,4,3,3,4,3,4,3,4,3,4,3,4,4,3,4,201,202,203,201,202,203,0,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,32,33,0,0,0,32,32,33,33,0,30,31,32,33,31,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,31,30,30,31,32,33,31,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,31,31,31,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,30,31,31,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,30,31,32,33,204,0,0,0,0,0,0,0,0,34,38,34,35,36,37,38,39,40,41,35,39,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,37,41,34,35,36,37,38,39,40,41,36,40,35,39,34,35,36,37,38,39,40,41,37,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,37,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,36,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,34,35,36,37,38,39,40,41,35,39,34,35,36,37,38,39,40,41,45,43,43,44,44,0,44,44,44,45,45,0,44,44,43,43,43,0,43,44,44,44,44,0,43,44,43,44,44,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,43,44,44,45,43,43,44,44,44,44,44,44,44,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,45,44,44,43,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,44,45,43,205,205,206,207,208,207,206,208,209,209,209,209,210,210,0,46,46,46,53,46,53,0,46,46,53,46,53,46,53,46,53,46,53,46,53,46,53,46,46,53,46,46,46,46,46,53,46,53,46,53,46,53,46,53,46,53,46,53,46,53,46,46,46,53,46,53,46,53,46,53,46,53,46,53,58,58,58,58,59,58,57,58,59,58,57,0,58,59,58,58,58,56,59,58,58,59,59,58,58,58,0,0,0,58,57,58,58,59,56,58,58,58,58,58,58,58,57,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,56,57,58,59,211,212,212,213,213,17,17,0,17,17,17,0,17,17,17,17,17,0,17,17,17,0,17,17,17,17,17,0,0,0,0,0,0,0,0,17,17,17,17,0,17,17,68,68,0,0,68,68,68,68,0,68,68,68,0,0,68,68,68,68,0,0,68,68,0,68,68,68,68,68,68,0,0,68,68,68,68,0,0,68,68,68,68,68,69,70,71,72,73,74,75,76,77,78,68,79,0,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,76,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,71,73,73,69,70,71,72,73,74,75,76,77,78,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,78,69,70,69,70,71,76,77,78,69,70,74,75,76,77,76,76,76,70,72,75,77,78,69,70,71,72,73,74,75,76,77,78,68,79,72,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,77,77,77,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,74,75,69,70,71,72,73,74,75,76,77,78,68,79,69,70,71,72,73,74,75,76,77,78,68,79,77,78,71,73,74,69,70,69,70,71,72,73,74,75,76,77,78,68,79,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,0,0,0,0,0,0,0,88,85,89,90,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,91,92,88,85,89,90,91,92,88,85,89,88,85,89,88,85,89,88,85,89,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,88,85,89,88,85,89,91,88,85,89,91,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,89,88,85,89,90,91,92,88,85,89,90,93,91,92,93,91,88,85,89,90,88,85,89,90,93,91,92,92,85,88,88,88,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,92,89,90,89,93,89,88,85,89,91,91,92,88,85,89,88,85,89,90,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,89,90,93,91,92,88,85,88,85,89,90,93,91,92,0,0,0,0,0,80,99,101,98,80,99,100,101,98,80,99,100,100,101,98,80,99,100,101,98,80,99,100,80,80,0,98,99,98,99,98,99,98,99,99,101,98,80,99,100,101,98,80,99,100,101,98,80,99,100,98,99,99,98,80,99,100,98,80,99,100,80,99,100,101,98,80,99,100,101,99,100,80,80,100,99,101,98,80,99,100,101,98,80,99,100,80,80,80,99,0,101,98,80,99,100,101,98,80,99,100,101,98,80,99,100,101,98,80,99,100,101,98,80,99,100,80,101,98,80,99,100,101,98,80,99,101,0,98,99,98,99,80,101,98,80,99,100,101,98,80,99,100,101,98,80,99,100,101,98,80,99,100,101,98,80,99,100,101,98,80,100,101,98,80,99,100,98,80,0,106,153,0,0,151,186,186,186,127,107,108,170,186,0,186,186,65,186,0,111,0,0,0,0,186,0,0,0,0,105,186,114,114,124,65,127,127,170,186,186,186,186,111,0,186,186,0,109,109,0,186,0,186,124,65,114,170,114,108,107,114,106,153,106,153,107,114,170,114,108,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,170,114,186,0,108,108,114,186,0,170,186,186,186,170,0,108,114,170,170,186,186,186,127,186,170,110,0,140,140,0,105,124,114,114,126,154,126,0,107,114,0,0,170,0,0,114,170,114,151,154,107,114,111,0,105,124,114,170,105,124,0,170,186,186,186,114,0,0,0,0,0,186,186,108,170,186,114,186,186,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,115,133,139,146,115,139,146,112,172,183,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,128,104,129,155,165,112,115,133,139,177,182,145,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,137,125,166,115,118,119,128,137,138,142,143,65,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,137,145,104,129,155,165,163,148,167,145,154,145,122,115,118,119,128,137,138,142,143,65,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,152,158,181,131,143,171,173,175,176,175,176,136,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,119,142,145,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,174,119,128,137,122,113,120,123,128,104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,112,112,185,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,145,136,104,138,156,157,103,119,131,138,142,160,177,182,147,128,125,125,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,115,118,119,128,137,138,142,143,65,154,180,180,117,149,161,148,180,134,135,136,154,121,118,145,149,161,167,128,128,145,144,168,144,168,128,171,112,145,168,173,175,178,117,184,104,129,133,165,146,155,157,179,182,157,152,179,182,157,179,150,162,168,128,176,120,145,149,161,167,148,138,156,182,145,149,175,176,174,174,133,119,142,146,163,133,180,136,112,116,112,112,112,145,138,159,160,103,131,135,136,138,141,158,163,181,132,160,161,116,130,164,122,144,144,155,115,113,120,123,118,145,149,161,167,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,130,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,129,143,184,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,169,169,128,169,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,145,172,183,131,136,128,122,168,178,184,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,65,177,178,179,180,181,182,183,184,185,186,128,137,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,284,283,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,318,319,320,321,321,321,0,82,82,0,0,0,0,26,188,0,0,0,81,84,187,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,84,187,189,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,83,26,188,82,81,84,187,83,26,188,82,84,84,187,189,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,83,81,84,187,189,83,26,188,82,84,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,81,84,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,84,187,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,84,84,187,81,84,84,84,83,26,83,26,81,84,187,189,83,26,188,82,81,84,81,84,187,189,83,26,188,82,81,84,187,83,26,188,82,84,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,81,84,187,189,83,26,188,82,84,187,189,83,83,81,84,187,189,83,26,188,82,322,323,0,0,0,191,190,86,191,190,86,191,190,86,191,190,86,190,86,190,86,190,86,190,86,191,190,86,191,190,86,191,190,86,190,86,190,86,191,190,86,191,190,86,191,190,86,191,190,86,191,190,86,191,191,190,86,191,190,86,191,190,86,191,190,86,191,190,86,191,191,86,190,86,190,86,190,86,191,190,86,191,190,86,191,190,86,191,190,86,191,190,86,86,191,190,86,191,190,86,190,86,191,190,86,191,190,86,0,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,0,196,0,0,198,196,198,0,196,198,0,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,199,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,192,196,197,198,199,197,197,192,196,197,198,199,0,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[1],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[3,3],[4,4],[[]],[[]],[5,[[7,[3,6]]]],[5,[[7,[4,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[11],[11],[11],[[3,[0,[12,13]]]],[[4,[0,[12,13]]]],[[3,3],14],[[4,4],14],[[],14],[[],14],[[3,15],16],[[4,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[3,17],[[],11],[[],11],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[4,22],[3,23],[3,11],[4,11],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[]],[[]],[[],7],[23,[[7,[3]]]],[[],7],[[],7],[[],7],[[],25],[[],25],[[]],[[]],[[]],[[]],[4,26],[[]],[[]],0,0,0,0,0,0,0,[[],2],[[],2],[[]],[[]],[11],[11],[27,[[28,[14]]]],[11],[[]],[29,27],[[]],[[]],[[],11],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[],27],[[],27],[27,[[24,[8]]]],[[],7],[[],7],[[],25],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[1],[1],[1],[1],0,[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[30,30],[31,31],[32,32],[33,33],[[]],[[]],[[]],[[]],[11],[11],[11],[11],[11],[11],[11],[11],0,0,[11],[11],[11],[11],0,[[30,30],14],[[31,31],14],[[32,32],14],[[33,33],14],[[],14],[[],14],[[],14],[[],14],[[30,15],16],[[31,15],16],[[32,15],16],[[33,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],0,0,0,0,[[]],[[]],[[]],[[]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,[1],[1],[1],[1],[1],[1],[1],[1],0,0,[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[34,34],[35,35],[36,36],[37,37],[38,38],[39,39],[40,40],[41,41],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[5,[[7,[34,6]]]],[5,[[7,[35,6]]]],[5,[[7,[36,6]]]],[5,[[7,[37,6]]]],[5,[[7,[38,6]]]],[5,[[7,[39,6]]]],[5,[[7,[40,6]]]],[5,[[7,[41,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],0,0,[11],[11],[11],[11],[11],[11],[11],[11],0,0,[35,[[24,[8]]]],[39,[[24,[8]]]],[[34,[0,[12,13]]]],[[35,[0,[12,13]]]],[[36,[0,[12,13]]]],[[37,[0,[12,13]]]],[[38,[0,[12,13]]]],[[39,[0,[12,13]]]],[[40,[0,[12,13]]]],[[41,[0,[12,13]]]],0,0,[[34,34],14],[[35,35],14],[[36,36],14],[[37,37],14],[[38,38],14],[[39,39],14],[[40,40],14],[[41,41],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[34,15],16],[[35,15],16],[[36,15],16],[[37,15],16],[[38,15],16],[[39,15],16],[[40,15],16],[[41,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],0,0,0,[34,11],[35,11],[36,11],[37,11],[38,11],[39,11],[40,11],[41,11],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[35,42]],[[39,42]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[[43,43],14],[[44,15],16],[[44,15],16],[[45,15],16],[[43,15],16],[[43,15],16],[46,44],[43,44],[47,44],[48,44],[[]],[6,44],[49,44],[50,44],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[45,23],[44,[[52,[51]]]],[[],23],[[],23],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[11],[11],[11],[11],[11],[11],[[46,15],16],[[46,15],16],[[53,15],16],[54,46],[48,46],[55,46],[[]],[43,46],[[]],[[]],[[]],[[]],[[]],[[],11],[[],11],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[46,[[52,[51]]]],[[],23],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[[56,56],14],[[56,15],16],[[57,15],16],[[58,15],16],[[59,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,[[],2],[[],2],[[60,3],[[28,[61]]]],[[]],[[]],[11],[11],[11],[62,[[28,[63]]]],[[]],[[]],[[]],[[[9,[8]],3],[[28,[61]]]],[[],11],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[64,65],[[[66,[8]]],65],[[61,17],65],[61,3],[61,[[24,[8]]]],[[[9,[8]]],65],[[[9,[8]]],65],[[61,[52,[67]],3],23],[[],7],[[],7],[[],25],[[]],[60,[[28,[[24,[8]]]]]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[[],[[24,[68]]]],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[69,69],[70,70],[71,71],[72,72],[73,73],[74,74],[75,75],[76,76],[77,77],[78,78],[68,68],[79,79],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[5,[[7,[69,6]]]],[5,[[7,[70,6]]]],[5,[[7,[71,6]]]],[5,[[7,[72,6]]]],[5,[[7,[73,6]]]],[5,[[7,[74,6]]]],[5,[[7,[75,6]]]],[5,[[7,[76,6]]]],[5,[[7,[77,6]]]],[5,[[7,[78,6]]]],[5,[[7,[68,6]]]],[5,[[7,[79,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[[69,[0,[12,13]]]],[[70,[0,[12,13]]]],[[71,[0,[12,13]]]],[[72,[0,[12,13]]]],[[73,[0,[12,13]]]],[[74,[0,[12,13]]]],[[75,[0,[12,13]]]],[[76,[0,[12,13]]]],[[77,[0,[12,13]]]],[[78,[0,[12,13]]]],[[68,[0,[12,13]]]],[[79,[0,[12,13]]]],0,[[69,69],14],[[70,70],14],[[71,71],14],[[72,72],14],[[73,73],14],[[74,74],14],[[75,75],14],[[76,76],14],[[77,77],14],[[78,78],14],[[68,68],14],[[79,79],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],0,[[69,15],16],[[70,15],16],[[71,15],16],[[72,15],16],[[73,15],16],[[74,15],16],[[75,15],16],[[76,15],16],[[77,15],16],[[78,15],16],[[68,15],16],[[79,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[80,69],[[80,26],70],[[81,82,83],71],[[84,26],72],[[85,82,83],73],[[86,83],74],[[86,26],75],[[60,3,[9,[8]],60,87],76],[[[9,[8]],60,26,60],77],[[60,60,26,60],78],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],0,0,0,0,0,0,0,0,0,[[23,10,87],69],[[23,10,87,26],70],[[87,83],74],[[87,26],75],[[23,3,[24,[8]],23,87],76],[[[24,[8]],23,26,23],77],0,0,0,0,0,0,0,0,[69,11],[70,11],[71,11],[72,11],[73,11],[74,11],[75,11],[76,11],[77,11],[78,11],[68,11],[79,11],0,0,[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[77,[[24,[8]]]],0,[77],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[1],[1],[1],[1],[1],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[88,88],[85,85],[89,89],[90,90],[91,91],[92,92],[[]],[[]],[[]],[[]],[[]],[[]],[5,[[7,[88,6]]]],[5,[[7,[85,6]]]],[5,[[7,[89,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[88,[[24,[8]]]],[85,[[24,[8]]]],[[88,[0,[12,13]]]],[[85,[0,[12,13]]]],[[89,[0,[12,13]]]],[[88,88],14],[[85,85],14],[[89,89],14],[[91,91],14],[[],14],[[],14],[[],14],[[],14],[[88,15],16],[[85,15],16],[[89,15],16],[[90,15],16],[[93,15],16],[[91,15],16],[[92,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[60,[[28,[88]]]],[60,[[28,[89]]]],[29,88],[29,[[28,[85]]]],[29,[[28,[89]]]],[29,90],[29,[[28,[91]]]],[29,92],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[60,93],[10,91],[[87,3],88],[87,85],[[[9,[8]],3,[52,[87]]],[[28,[89]]]],[[60,10],90],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[60,92],[85,87],[88,28],[[[0,[94,13]],95],96],[[88,97]],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[88,[[24,[8]]]],[85,[[24,[8]]]],[89,[[24,[8]]]],[90,[[24,[8]]]],[92,[[24,[8]]]],[89,61],[90,28],[[61,[52,[87]]],89],[93,[[24,[8]]]],[89,28],[88,11],[85,11],[89,11],[91,10],[91,[[24,[8]]]],[92,[[28,[23]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[88,42]],[[85,42]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,[1],0,[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[80,80],[[]],[60,[[28,[[24,[8]]]]]],[5,[[7,[98,6]]]],[5,[[7,[99,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],0,[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[[98,[0,[12,13]]]],[[99,[0,[12,13]]]],0,[[98,98],14],[[80,80],14],[[99,99],14],[[100,100],14],[[],14],[[],14],[[],14],[[],14],[[80,15],16],[[99,15],16],[[100,15],16],[[]],[[]],[[]],[[]],[[]],[[],[[28,[101]]]],[[],[[28,[99]]]],[[],[[28,[100]]]],[[],[[28,[80]]]],[[60,10,29],[[28,[80]]]],[[60,10,29],[[28,[100]]]],[[60,29],[[28,[99]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[9,[8]]],[[28,[80]]]],[60,[[28,[80]]]],[60,[[28,[80]]]],0,[102,[[28,[98]]]],[[],11],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],0,[101,23],0,0,0,0,[101,[[52,[67]]]],0,0,[[],28],[101,102],[[[9,[8]]],[[28,[102]]]],[98,11],[99,11],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[101,10],0,0,0,[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],0,0,0,0,0,0,0,0,0,0,[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[103,103],[104,104],[105,105],[106,106],[107,107],[108,108],[109,109],[110,110],[111,111],[112,112],[113,113],[114,114],[115,115],[116,116],[117,117],[118,118],[119,119],[120,120],[121,121],[122,122],[123,123],[124,124],[125,125],[126,126],[127,127],[128,128],[129,129],[130,130],[131,131],[132,132],[133,133],[134,134],[135,135],[136,136],[137,137],[138,138],[139,139],[140,140],[141,141],[142,142],[143,143],[144,144],[145,145],[146,146],[147,147],[148,148],[149,149],[150,150],[151,151],[152,152],[153,153],[154,154],[155,155],[156,156],[157,157],[158,158],[159,159],[160,160],[161,161],[162,162],[163,163],[164,164],[165,165],[166,166],[167,167],[168,168],[169,169],[170,170],[171,171],[172,172],[173,173],[174,174],[175,175],[176,176],[65,65],[177,177],[178,178],[179,179],[180,180],[181,181],[182,182],[183,183],[184,184],[185,185],[186,186],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[154,[[9,[8]]]],0,0,[[],115],[[],118],[[],119],[[],128],[[],137],[[],138],[[],142],[[],143],[[],65],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],0,0,0,0,0,0,0,0,0,0,0,0,[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],0,0,0,[[103,103],14],[[104,104],14],[[105,105],14],[[106,106],14],[[107,107],14],[[108,108],14],[[109,109],14],[[110,110],14],[[111,111],14],[[112,112],14],[[113,113],14],[[114,114],14],[[115,115],14],[[116,116],14],[[117,117],14],[[118,118],14],[[119,119],14],[[120,120],14],[[121,121],14],[[122,122],14],[[123,123],14],[[124,124],14],[[125,125],14],[[126,126],14],[[127,127],14],[[128,128],14],[[129,129],14],[[130,130],14],[[131,131],14],[[132,132],14],[[133,133],14],[[134,134],14],[[135,135],14],[[136,136],14],[[137,137],14],[[138,138],14],[[139,139],14],[[140,140],14],[[141,141],14],[[142,142],14],[[143,143],14],[[144,144],14],[[145,145],14],[[146,146],14],[[147,147],14],[[148,148],14],[[149,149],14],[[150,150],14],[[151,151],14],[[152,152],14],[[153,153],14],[[154,154],14],[[155,155],14],[[156,156],14],[[157,157],14],[[158,158],14],[[159,159],14],[[160,160],14],[[161,161],14],[[162,162],14],[[163,163],14],[[164,164],14],[[165,165],14],[[166,166],14],[[167,167],14],[[168,168],14],[[169,169],14],[[170,170],14],[[171,171],14],[[172,172],14],[[173,173],14],[[174,174],14],[[175,175],14],[[176,176],14],[[65,65],14],[[177,177],14],[[178,178],14],[[179,179],14],[[180,180],14],[[181,181],14],[[182,182],14],[[183,183],14],[[184,184],14],[[185,185],14],[[186,186],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],0,0,0,0,0,0,0,0,0,[[104,15],16],[[105,15],16],[[106,15],16],[[107,15],16],[[108,15],16],[[109,15],16],[[110,15],16],[[111,15],16],[[112,15],16],[[114,15],16],[[115,15],16],[[116,15],16],[[117,15],16],[[118,15],16],[[119,15],16],[[120,15],16],[[121,15],16],[[122,15],16],[[123,15],16],[[124,15],16],[[125,15],16],[[126,15],16],[[127,15],16],[[128,15],16],[[129,15],16],[[130,15],16],[[131,15],16],[[132,15],16],[[133,15],16],[[134,15],16],[[135,15],16],[[136,15],16],[[137,15],16],[[138,15],16],[[139,15],16],[[140,15],16],[[141,15],16],[[142,15],16],[[143,15],16],[[144,15],16],[[145,15],16],[[146,15],16],[[147,15],16],[[148,15],16],[[149,15],16],[[150,15],16],[[151,15],16],[[152,15],16],[[153,15],16],[[154,15],16],[[155,15],16],[[156,15],16],[[157,15],16],[[158,15],16],[[159,15],16],[[160,15],16],[[161,15],16],[[162,15],16],[[163,15],16],[[164,15],16],[[165,15],16],[[166,15],16],[[167,15],16],[[168,15],16],[[169,15],16],[[170,15],16],[[171,15],16],[[172,15],16],[[173,15],16],[[174,15],16],[[175,15],16],[[176,15],16],[[65,15],16],[[177,15],16],[[178,15],16],[[179,15],16],[[180,15],16],[[181,15],16],[[182,15],16],[[183,15],16],[[184,15],16],[[185,15],16],[[186,15],16],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[81,161],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[81,179],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[154,14],0,0,0,0,0,0,0,0,0,0,[154,11],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],0,0,0,[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[1],[1],[1],[1],[1],[1],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[81,81],[84,84],[187,187],[83,83],[26,26],[188,188],[82,82],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[5,[[7,[81,6]]]],[5,[[7,[84,6]]]],[5,[[7,[187,6]]]],[5,[[7,[189,6]]]],[5,[[7,[83,6]]]],[5,[[7,[26,6]]]],[5,[[7,[188,6]]]],[5,[[7,[82,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],[83,[[24,[8]]]],[[81,[0,[12,13]]]],[[84,[0,[12,13]]]],[[187,[0,[12,13]]]],[[189,[0,[12,13]]]],[[83,[0,[12,13]]]],[[26,[0,[12,13]]]],[[188,[0,[12,13]]]],[[82,[0,[12,13]]]],0,[[81,81],14],[[84,84],14],[[187,187],14],[[189,189],14],[[83,83],14],[[26,26],14],[[188,188],14],[[82,82],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[81,15],16],[[84,15],16],[[187,15],16],[[189,15],16],[[83,15],16],[[26,15],16],[[188,15],16],[[82,15],16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],[[28,[81]]]],[[],[[28,[84]]]],[[88,29],[[28,[81]]]],[[88,29],[[28,[84]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],0,0,0,0,0,0,[84,187],[83,142],[26,142],[83,23],[26,23],[81,11],[84,11],[187,11],[189,11],[83,11],[26,11],[188,11],[82,11],0,0,[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[84,8],81],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[83,42]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[5,[[7,[190,6]]]],[5,[[7,[86,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[190,[[24,[8]]]],[86,[[24,[8]]]],[[190,[0,[12,13]]]],[[86,[0,[12,13]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[9,[8]]],191],[[[9,[8]]],190],[[[9,[8]]],86],[[[9,[8]],87],191],[84,190],[[[9,[192]]],86],[191,[[28,[87]]]],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[191,[[28,[[24,[8]]]]]],[191,28],[86],[190,11],[86,11],[190,[[28,[84]]]],[86,[[24,[8]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[191,[[24,[8]]]],[190,[[24,[8]]]],[86,[[24,[8]]]],[191,[[24,[8]]]],[190,[[24,[8]]]],[86,[[24,[8]]]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[86,[[28,[[24,[192]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[190,42]],[[86,42]],[[]],[[]],[[]],[[191,[194,[193]]],28],[[190,[194,[193]]],28],[[86,[194,[193]]],28],0,[[],2],[[],2],[[]],[[]],[[],195],[5,[[7,[195,6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[195],[11],[11],[11],[195,[[24,[8]]]],[[195,[0,[12,13]]]],[[]],[29,[[28,[195]]]],[[]],[[]],[[],11],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[195,11],[[],[[24,[8]]]],[[[9,[8]]],[[24,[8,18]]]],[[],7],[[],7],[[],25],[[]],[[]],[[195,42]],[[]],0,0,0,0,0,0,0,0,0,0,0,[1],[1],[1],[1],[1],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[192,192],[196,196],[197,197],[198,198],[199,199],[[]],[[]],[[]],[[]],[[]],[5,[[7,[192,6]]]],[5,[[7,[196,6]]]],[5,[[7,[197,6]]]],[5,[[7,[198,6]]]],[5,[[7,[199,6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[11],[11],[11],[11],[11],[11],[11],0,[11],[11],[11],[11],[11],[[192,[0,[12,13]]]],[[196,[0,[12,13]]]],[[197,[0,[12,13]]]],[[198,[0,[12,13]]]],[[199,[0,[12,13]]]],[[192,192],14],[[196,196],14],[[197,197],14],[[198,198],14],[[199,199],14],[[],14],[[],14],[[],14],[[],14],[[],14],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],11],[[],11],[[],11],[[],11],[[],11],[[]],[[]],[[]],[[]],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],0,[192,11],[196,11],[197,11],[198,11],[199,11],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[[9,[8]]],[[24,[8,18]]]],[[]],[[]],[[]],[[]],[[]],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],7],[[],25],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[]],[[]],[[]],[[]],[[]],0,[1],[[],2],[[],2],[[]],[[]],[200,200],[[]],[5,[[7,[200,6]]]],[[[9,[8]]],[[7,[6]]]],[[10,[9,[8]]],[[7,[6]]]],[[10,5],[[7,[6]]]],[11],[11],[11],[[200,[0,[12,13]]]],0,[[200,200],14],[[],14],[[200,15],16],[[]],[[89,29],[[28,[200]]]],[[]],[[]],0,[200,17],[[],11],[[]],[[[19,[18]]],[[19,[2,18]]]],[[[20,[18]]],[[20,[2,18]]]],[[[21,[18]]],[[21,[2,18]]]],[200,14],0,0,[[],28],[[89,29],28],0,0,[200,11],[[[9,[8]]],[[24,[8,18]]]],[[]],[[],7],[[],7],[[],25],[[]],[[]],[[]]],"c":[],"p":[[3,"Private"],[8,"Any"],[4,"Encryption"],[4,"SufficientCrypto"],[8,"Input"],[3,"Error"],[4,"Result"],[15,"u8"],[15,"slice"],[15,"u32"],[15,"usize"],[8,"Output"],[8,"Sized"],[15,"bool"],[3,"Formatter"],[6,"Result"],[4,"IdenticonStyle"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[4,"MultiSignature"],[3,"String"],[3,"Vec"],[3,"TypeId"],[4,"VerifierValue"],[3,"DangerRecord"],[6,"Result"],[3,"IVec"],[3,"SeedKeysPreview"],[3,"DerivedKeyPreview"],[4,"DerivedKeyStatus"],[4,"DerivedKeyError"],[4,"DynamicDerivationsRequest"],[3,"DynamicDerivationsAddressRequestV1"],[3,"DynamicDerivationsRequestInfo"],[3,"DynamicDerivationRequestInfo"],[4,"DynamicDerivationsAddressResponse"],[3,"DynamicDerivationsAddressResponseV1"],[3,"DynamicDerivationsResponseInfo"],[3,"DynamicDerivationResponseInfo"],[8,"FnOnce"],[4,"MetadataError"],[4,"Error"],[4,"TransferContent"],[4,"Wasm"],[4,"PublicError"],[3,"Error"],[4,"Error"],[4,"FromHexError"],[8,"Error"],[4,"Option"],[4,"Check"],[4,"Error"],[4,"WasmError"],[4,"GeneralVerifierForContent"],[4,"ParserError"],[4,"ParserDecodingError"],[4,"ParserMetadataError"],[15,"str"],[4,"MultiSigner"],[3,"Public"],[3,"H160"],[3,"AccountId32"],[4,"Identicon"],[15,"array"],[15,"u16"],[4,"Event"],[3,"MetaValuesDisplay"],[3,"MetaValuesExport"],[3,"NetworkSpecsDisplay"],[3,"NetworkSpecsExport"],[3,"NetworkVerifierDisplay"],[3,"TypesDisplay"],[3,"TypesExport"],[3,"IdentityHistory"],[3,"SignDisplay"],[3,"SignMessageDisplay"],[3,"Entry"],[3,"MetaValues"],[3,"OrderedNetworkSpecs"],[4,"ValidCurrentVerifier"],[3,"Verifier"],[3,"NetworkSpecs"],[3,"VerifierKey"],[3,"ContentLoadTypes"],[3,"H256"],[3,"NetworkSpecsKey"],[3,"AddressKey"],[3,"MetaKey"],[3,"Order"],[3,"AddressBookKey"],[3,"MetaKeyPrefix"],[8,"Hash"],[8,"BuildHasher"],[15,"u64"],[8,"Hasher"],[3,"MetaInfo"],[3,"AddressBookEntry"],[3,"MetaHistoryEntry"],[3,"MetaSetElement"],[4,"RuntimeMetadata"],[3,"SeedNameWithIdenticon"],[3,"TransactionSignAction"],[4,"TransactionAction"],[4,"StubNav"],[4,"FooterButton"],[4,"RightButton"],[4,"ScreenNameType"],[4,"ShieldAlert"],[4,"AlertData"],[3,"ActionResult"],[3,"LogScreenEntry"],[4,"ScreenData"],[3,"MKeysCard"],[3,"MKeysNew"],[3,"MKeyAndNetworkCard"],[3,"MNetworkCard"],[3,"MSettings"],[3,"History"],[3,"MLog"],[3,"MEventMaybeDecoded"],[3,"MLogDetails"],[4,"TransactionType"],[3,"TransactionCard"],[4,"BananaSplitRecoveryResult"],[4,"DecodeSequenceResult"],[3,"TransactionCardSet"],[3,"MTransaction"],[3,"MSignedTransaction"],[3,"SeedNameCard"],[3,"MSeeds"],[3,"MKeyDetails"],[3,"MNewSeed"],[3,"MRecoverSeedName"],[3,"MRecoverSeedPhrase"],[3,"DerivationCheck"],[3,"Address"],[3,"MAddressCard"],[4,"DerivationDestination"],[3,"MDeriveKey"],[3,"MVerifierDetails"],[3,"MVerifier"],[3,"MMetadataRecord"],[3,"MNetworkDetails"],[3,"MRawKey"],[3,"MSignSufficientCrypto"],[3,"MKeyDetailsMulti"],[3,"MMNetwork"],[3,"MManageNetworks"],[4,"ExportedSet"],[3,"PathAndNetwork"],[4,"MSCContent"],[4,"QrData"],[3,"MSufficientCryptoReady"],[3,"DerivationEntry"],[3,"DerivationPack"],[3,"MBackup"],[3,"MSeedMenu"],[3,"MNewSeedBackup"],[3,"Network"],[3,"MNetworkMenu"],[3,"MPasswordConfirm"],[3,"MSignatureReady"],[3,"MEnterPassword"],[3,"MLogRight"],[3,"MMMNetwork"],[3,"MManageMetadata"],[3,"MTypesInfo"],[4,"ModalData"],[3,"MSCCall"],[3,"MSCCurrency"],[3,"MSCEnumVariantName"],[3,"MSCEraMortal"],[3,"MSCFieldName"],[3,"MSCFieldNumber"],[3,"MSCId"],[3,"MSCNameVersion"],[3,"MSCNetworkInfo"],[3,"DDPreview"],[3,"DDKeySet"],[3,"DDDetail"],[3,"MSCTip"],[3,"MSCTxSpecPlain"],[3,"MKeysInfoExport"],[4,"Card"],[3,"ShortSpecs"],[4,"CurrentVerifier"],[3,"NetworkProperties"],[3,"ContentAddSpecs"],[3,"ContentLoadMeta"],[3,"TypeEntry"],[3,"Path"],[8,"AsRef"],[3,"SchemaVersion"],[4,"Description"],[3,"EnumVariant"],[4,"EnumVariantType"],[3,"StructField"],[3,"AddressDetails"],[13,"Ed25519"],[13,"Sr25519"],[13,"Ecdsa"],[13,"Invalid"],[13,"EncryptionMismatch"],[13,"SpecsToSendEncryptionMismatch"],[13,"SpecsGenesisHashMismatch"],[13,"SpecsToSendGenesisHash"],[13,"MetadataMismatch"],[13,"Base58PrefixSpecsMismatch"],[13,"Network"],[13,"MethodNotFound"],[13,"WrongNetworkVersion"],[13,"IdentityAdded"],[13,"IdentityRemoved"],[13,"SecretWasExported"],[13,"MetadataAdded"],[13,"MetadataRemoved"],[13,"MetadataSigned"],[13,"NetworkSpecsAdded"],[13,"NetworkSpecsRemoved"],[13,"NetworkSpecsSigned"],[13,"NetworkVerifierSet"],[13,"SeedCreated"],[13,"SeedRemoved"],[13,"SeedNameWasShown"],[13,"TransactionSigned"],[13,"TransactionSignError"],[13,"MessageSigned"],[13,"MessageSignError"],[13,"SystemEntry"],[13,"TypesAdded"],[13,"TypesRemoved"],[13,"TypesSigned"],[13,"UserEntry"],[13,"GeneralVerifierSet"],[13,"Warning"],[13,"Shield"],[13,"ErrorData"],[13,"RecoveredSeed"],[13,"AuthorCard"],[13,"AuthorPlainCard"],[13,"AuthorPublicKeyCard"],[13,"BalanceCard"],[13,"BitVecCard"],[13,"BlockHashCard"],[13,"CallCard"],[13,"DefaultCard"],[13,"DerivationsCard"],[13,"EnumVariantNameCard"],[13,"EraMortalCard"],[13,"ErrorCard"],[13,"FieldNameCard"],[13,"FieldNumberCard"],[13,"IdCard"],[13,"IdentityFieldCard"],[13,"MetaCard"],[13,"NameVersionCard"],[13,"NetworkGenesisHashCard"],[13,"NetworkNameCard"],[13,"NetworkInfoCard"],[13,"NewSpecsCard"],[13,"NonceCard"],[13,"PalletCard"],[13,"TextCard"],[13,"TipCard"],[13,"TipPlainCard"],[13,"TxSpecCard"],[13,"TxSpecPlainCard"],[13,"TypesInfoCard"],[13,"VarNameCard"],[13,"VerifierCard"],[13,"WarningCard"],[13,"BBananaSplitRecoveryResult"],[13,"DynamicDerivations"],[13,"DynamicDerivationTransaction"],[13,"Other"],[13,"Selected"],[13,"Dots"],[13,"Blockies"],[13,"Jdenticon"],[13,"AddSpecs"],[13,"LoadMetadata"],[13,"LoadTypes"],[13,"SufficientCryptoReady"],[13,"Backup"],[13,"SeedMenu"],[13,"NewSeedBackup"],[13,"NetworkSelector"],[13,"PasswordConfirm"],[13,"SignatureReady"],[13,"EnterPassword"],[13,"LogRight"],[13,"TypesInfo"],[13,"ManageMetadata"],[13,"SelectSeed"],[13,"Regular"],[13,"Sensitive"],[13,"Keys"],[13,"Settings"],[13,"Log"],[13,"LogDetails"],[13,"Transaction"],[13,"SeedSelector"],[13,"KeyDetails"],[13,"NewSeed"],[13,"RecoverSeedName"],[13,"RecoverSeedPhrase"],[13,"DeriveKey"],[13,"VVerifier"],[13,"ManageNetworks"],[13,"NNetworkDetails"],[13,"SignSufficientCrypto"],[13,"SelectSeedForBackup"],[13,"KeyDetailsMulti"],[13,"LoadMeta"],[13,"AddSpecs"],[13,"Sign"],[13,"Derivations"],[13,"Read"],[13,"Stub"],[13,"Custom"],[13,"Standard"]]},\ +"generate_message":{"doc":"This crate is intended to support the Vault from the active","t":"NNNNNNNNNENNNNNNNNNNNGNNNNNNNNNNNNNNNNNNNNLLLLLLLALLLLLLLLLLLLFALALLLALLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDDLLLLMLLLLLLLLLLFFFLLLLLLMMLLLLLLLLLLMMMLLLLLLLLLLLLNDDDNNDELFFFLLLLLLLLLLMMLLLLLLLLLLLLLFFFLLLLLLLLLLLLLLLFFLLLLLLLLLLLLLLLFFFMMFFFLLLLLLLLLLLLLLLLLLLLLLLLLFFFFMMMFFMMFFFLLLLLLLFLLLLLLLLLLLLLLLLLLLLFFLLLLLNNNELLLLFLLLLLLLFLLLLLLLLLLMMNNNNNNNNDEEDENDNNEDDNNNNNDNNNNNENNNDNNENNEDENNDNNNDNNNNDNNNDLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMMLMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMLMMMMMMMMMMMMLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM","n":["AddressBookEmpty","AddressBookEntryWithName","AddressBookSpecsName","BadSignature","BlockHashLength","Codec","Database","Definitions","EarlierVersion","Error","FaultySpecs","HotDatabaseMetadataOverTwoEntries","HotDatabaseMetadataSameVersionTwice","Io","JsonRPC","Metadata","NetworkSpecs","NotFound","NotSupported","PublicKeyWrongLength","Qr","Result","SameVersionDifferentMetadata","SignatureWrongLength","Sled","Specs","SpecsInDb","TwoBase58ForName","TwoGenesisHashVariantsForName","TwoNamesForUrl","TwoUrlVariantsForName","UKeyHashInDb","UKeyUrlInDb","UnexpectedBlockHashFormat","UnexpectedFetchedBlockHashFormat","UnexpectedFetchedGenesisHashFormat","UnexpectedGenesisHashFormat","UnexpectedMetadataFormat","UnexpectedPubKeyLength","UnexpectedSignatureLength","UnexpectedSystemPropertiesFormat","ValuesChanged","as_any","as_any_mut","borrow","borrow_mut","deref","deref_mut","drop","fetch_metadata","fmt","fmt","from","from","from","from","from","from","from","from","from_mut","from_ref","full_run","helpers","init","interpret_specs","into","into_any","into_any_rc","parser","source","to_string","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","address_book_entry","address_book_name","block_hash_in_db","block_hash_in_fetch","encryption","error","name","name","name","name","name","name","name","name","name","new_version","old_version","specs_name","title","url","url","url","url","url","value","value","version","version","what","FetchedInfo","FetchedInfoWithNetworkSpecs","as_any","as_any","as_any_mut","as_any_mut","block_hash","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","fetch_info","fetch_info_with_network_specs","fetch_meta_at_block","from","from","from_mut","from_mut","from_ref","from_ref","genesis_hash","genesis_hash","init","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","meta","meta","properties","try_from","try_from","try_into","try_into","type_id","type_id","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","vzip","vzip","All","MetaFetched","MetaShortCut","MetaValuesStamped","None","OnlyNew","SortedMetaValues","Write","__clone_box","add_new_metadata","add_specs_print","address_book_content","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","at_block_hash","block_hash","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","cut","db_upd_metadata","db_upd_network","debug_meta_at_block","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","error_occured","filter_address_book_by_url","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","generate_bulk_transaction_qr","generate_key_info_export_to_qr","generate_qr_code","genesis_hash","genesis_hash","genesis_hash_in_hot_db","get_address_book_entry","get_network_specs_to_send","init","init","init","init","init","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_specname_in_db","load_metadata_print","meta_fetch","meta_history_content","meta_values","meta_values","meta_values","network_specs_from_entry","network_specs_from_title","newer","older","prepare_metadata","read_metadata_database","specs_agnostic","stamped","to_owned","try_from","try_from","try_from","try_from","try_from","try_get_network_specs_to_send","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","update_known_specs","update_modify_encryption_specs","vzip","vzip","vzip","vzip","vzip","Array","None","Single","TokenFetch","as_any","as_any_mut","borrow","borrow_mut","check_specs","deref","deref_mut","drop","from","from_mut","from_ref","init","interpret_properties","into","into_any","into_any_arc","into_any_rc","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","decimals","unit","AddSpecs","Address","Alice","All","BlockHistory","Both","BulkTransactionTestPayload","CheckFile","Cli","Command","Content","ContentArgs","Crypto","D","Derivations","EncodeToQr","F","Goal","InstructionMeta","InstructionSpecs","K","KeyInfoExportToQr","Load","LoadMetadata","LoadTypes","Make","Make","MakeColdRelease","MetaAtBlock","MetaDefaultFile","Metadata","Msg","Name","Networks","None","Override","P","Qr","Remove","Remove","RestoreDefaults","Set","SetFlags","Show","Show","Sign","Signature","SpecNameVersion","Specs","Specs","Sufficient","Sufficient","T","Text","Title","Token","TransferMetaToColdRelease","Types","Unwasm","Verifier","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","address","all","all_empty","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","augment_args","augment_args","augment_args","augment_args","augment_args","augment_args","augment_args","augment_args","augment_args","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","command","command","command_for_update","content","content","crypto","crypto","d","db","db","db","decimals","default","default","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","derivations","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","encryption","export_dir","f","files_dir","files_dir","files_dir","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","goal","goal","group_id","group_id","group_id","group_id","group_id","group_id","group_id","group_id","group_id","group_id","group_id","has_subcommand","has_subcommand","has_subcommand","has_subcommand","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","k","msg","name","name","over","p","pass_errors","payload","payload","set","set","signature","signature_file","signature_hex","sufficient","sufficient_file","sufficient_hex","t","title","title","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_possible_value","to_possible_value","to_possible_value","to_string","to_string","token","token_decimals","token_unit","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unit","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","value_variants","value_variants","value_variants","verifier","verifier_alice","verifier_file","verifier_hex","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","block_hash","chunk_size","chunk_size","chunk_size","cold_db","db_path","db_path","db_path","db_path","db_path","db_path","dst_file","dst_file","dst_file","export_dir","export_dir","filename","files_dir","files_dir","fps","from","hex","hot_db","keys_num","name","output_format","path","path","r","s","s","tx_count","update_db","url","version","pass_errors","s","s","e","s","name","t","version","s","s"],"q":[[0,"generate_message"],[78,"generate_message::Error"],[107,"generate_message::fetch_metadata"],[160,"generate_message::helpers"],[314,"generate_message::interpret_specs"],[341,"generate_message::interpret_specs::TokenFetch"],[343,"generate_message::parser"],[1057,"generate_message::parser::Command"],[1092,"generate_message::parser::Content"],[1095,"generate_message::parser::Crypto"],[1097,"generate_message::parser::Remove"],[1100,"generate_message::parser::Show"]],"d":["ADDRESS_BOOK tree of the hot database has no entries to …","AddressBookEntry searched in ADDRESS_BOOK tree of the hot …","AddressBookEntry in hot database contains encryption and …","Provided data signature (entered separately or as a part of","User-entered block hash has invalid length","","","","Fetched network metadata version is lower than the one …","Generate Message error.","Fetched network specs are not suitable for use in Vault.","METATREE of the hot database should contain at most two …","METATREE of the hot database has two entries for a network …","","","","","","","","","Generate Message result.","Fetched network metadata is different from the one already …","","","","Network specs are already in the database","SPECSTREEPREP tree of the hot database contains …","ADDRESS_BOOK tree of the hot database contains …","ADDRESS_BOOK tree of the hot database contains …","ADDRESS_BOOK tree of the hot database contains …","Tried to fetch with -u key using address not known to the …","Tried to fetch with -u key using address already known to …","","Fetched block hash could not be transformed in expected …","Fetched genesis hash could not be transformed in expected …","","","","","","Fetched data is different from the one already in the hot …","","","","","","","","Fetch network information from a node using RPC calls","","","","","","","","Returns the argument unchanged.","","","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Process incoming command as interpreted by parser.","Helpers","","Fit network properties fetched via RPC call into data in …","Calls U::from(self).","","","Command line parser for the client","","","","","","","","","address book entry with exactly matching genesis hash","name in AddressBookEntry","optionally recorded block hash for which the metadata was …","block hash for which the metadata is fetched now","network supported encryption","what exactly is wrong with the network specs","network name","network name","network name","network name","network name","network name","network name","network name","","network version just fetched","network version in hot database, higher than the one just …","name in NetworkSpecs","network address book title","URL address","URL address used for fetch","URL address, for which two condlicting names were found","URL address used for RPC call","URL address used for RPC cal","genesis hash value as received through RPC call","block hash value as received through RPC call","network version","network version","what exactly has changed","Data from RPC calls for load_metadata update payload.","Data from RPC calls for add_specs update payload.","","","","","Block hash, at which the metadata was fetched, as a …","","","","","","","","","","","Fetch data for load_metadata update payload through RPC …","Fetch data for add_specs update payload through RPC calls.","Fetch network metadata from given URL address at given …","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Fetched genesis hash, as a hexadecimal string","Fetched genesis hash, as a hexadecimal string","","","Calls U::from(self).","Calls U::from(self).","","","","","","","Fetched metadata, as a hexadecimal string","Fetched metadata, as a hexadecimal string","Fetched network properties, as a Map","","","","","","","","","","","","","all payloads, -t key or no setting key was used","Fetched and interpreted data for load_metadata payload and …","Data needed to output load_metadata update payload file.","MetaValues with corresponding block hash at the time of …","no payloads, -p setting key was used","only new payloads, -k setting key was used","MetaValuesStamped sorted into sets of newer and older, by …","Content to print during load-metadata<-k/-p/-t> processing.","","Try updating SortedMetaValues with new MetaValuesStamped.","Write to file add_specs update payload as raw bytes.","Get all ADDRESS_BOOK entries with address book titles.","","","","","","","","","","","","","","","","","","","","","","","","","","Update the database after load-metadata run.","Update the database after add-specs run.","Get network metadata file from given URL address at …","","","","","","","","","","","","","","","","Process error depending on pass errors flag -s.","Get all ADDRESS_BOOK entries with address book titles, for …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Generate Bulk Transaction Signing payload for testing","","Generate with data into a specified file.","","","Search for any ADDRESS_BOOK entry with given genesis hash.","Get AddressBookEntry from the database for given address …","Get network specs NetworkSpecs from the hot database.","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","Check if ADDRESS_BOOK has entries with given name and …","Write to file load_metadata update payload as raw bytes.","Get network information through RPC calls at address and …","Get all entries from META_HISTORY.","","","","Get NetworkSpecs corresponding to the given …","Get NetworkSpecs from the database for given address book …","Set of the metadata entries with latest version known to …","Other metadata entries. Since there are maximum two …","Collect and sort MetaValuesStamped from the hot database","Collect all MetaValuesStamped from the hot database.","Fetch data and assemble NetworkSpecs with only URL address …","","","","","","","","Try to get network specs NetworkSpecs from the hot …","","","","","","","","","","","","","","","","","","","","","Update NetworkSpecs already existing in the database with …","Modify NetworkSpecs existing in the database only with …","","","","","","Equal size arrays for decimals and units.","No decimals and no unit.","Single decimals parameter and single unit.","Accepted token from system_properties RPC call","","","","","Get from system_properties RPC call results the network …","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Transform system_properties RPC call results into …","Calls U::from(self).","","","","","","","","","","","","add-specs payload","Process only the network referred to by URL address","Alice key","Deal with all relevant database entries","Show all entries from META_HISTORY tree","Both QR code and text file, default","Produce a bulk tx signing QR","Check that external file is valid network metadata and …","Polkadot Vault data manipulation tool.","","Reference key for load-metadata and add-specs commands.","","Verifier-to-be, for make and sign commands.","Key -d: do not update the database, make RPC calls, and …","Data to process derivations command.","Encode payload to multiframe QR","Key -f: do not run RPC calls, produce output files from …","Target output format for derivations, make and sign …","Command details for load-metadata.","Command details for add-specs.","Key -k: update database through RPC calls, produce output …","Produce a test key info export QR","Prepare payload for load-metadata update","load-metadata payload","load-types payload","Data to process make and sign commands.","Complete update generation according","Generate release cold database at optionally provided path","Create file with network metadata at block hash","Make file with hexadecimal metadata for defaults release …","Show all hot database entries","Payload for make and sign commands.","Process only a specified network","Show all hot database entries","No verifier, to make unsigned updates.","Overrides for add-specs command.","Key -p: update database through RPC calls, do not produce …","Only QR code","Data to process remove command.","Remove all data associated with a network","Restore hot database to default state","Setting key for load-metadata and add-specs commands.","","Display data commands.","Display content of the a given tree of the hot database","Sign","","Remove specified network metadata entry.","Prepare payload for add-specs update","Show network specs from entry.","","Real verifier, SufficientCrypto is either assembled from …","Key -t (no setting key defaults here): update database …","Only text file with hexadecimal string (used for tests)","Removing all network data by network address book title.","Data from command line for token override.","Transfer metadata from hot database to release cold …","Prepare payload for load-types update","Prepare payload for load_metadata update from .wasm file","Verifier-to-be, for make and sign commands.","","","","","","","","","","","","Process only the network referred to by URL address","Deal with all relevant database entries","Flag to indicate that no overrides were invoked.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Reference key, as read from command line","","","who is signing the payload","do not update the database, make RPC calls, and produce …","Path to the hot database","Path to the hot database","Path to the hot database","Decimals of the token","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Contents of the payload file","","","","","","","","","","","","","","","","","","","","","Encryption override to specify encryption algorithm used …","Folder to save completed update messages","do not run RPC calls, produce output files from database …","Folder to save payloads ready for signing","Folder to save payloads ready for signing","Folder to save payloads ready for signing","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","target output format","Target output format","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","update database through RPC calls, produce output files …","payload","Process only a specified network","output name override","Overrides, relevant only for add-specs command","update database through RPC calls, do not produce any …","Skip errors","","","Setting key, as read from command line","","","Read signature from a file","Supply signature in hex format as command line argument","","Read signature from a file","Supply signature in hex format as command line argument","(no setting key defaults here): update database through RPC","Address book title for network in which addresses with …","Network title override, so that user can specify the …","","","","","","","","","","","","","","","","","","Token override to specify decimals used to display balance …","Token override to specify units used to display balance in …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Units of the token","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Use Alice key with a specified encryption scheme","Read Verifier from a file","Specify Verifier as a hex string argument","","","","","","","","","","","","","","","","","","","","","Hash of the block at which meta is asked","Size of a chunk in a multiframe RaptorQ encoding.","Size of a chunk in a multiframe RaptorQ encoding.","Size of a chunk in a multiframe RaptorQ encoding","Path to release db","Path to the hot database","Path to the hot database","Path to hot db","Hot database path","Hot database path","Path to hot db","","","Destination file to write qr code to","Folder to save completed update messages","Folder to save completed update messages","WASM file","Folder to save payloads ready for signing","Folder to save payloads ready for signing","FPS of a multiframe RaptorQ encoding","AccountId of transaction in hex form.","Hex-encoded payload to encode","Path to hot db","Number of keys to generate and export","File name","Qr or File","Path to release db","Path to a file to encode","","","","Number of transactions in a bulk.","update the DB.","URL of the chain RPC point","Version","Skip errors","network name or network address book title","Network address","Encryption scheme to use","","","","","Address book title","Path to metadata file"],"i":[3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,0,3,3,3,0,3,3,3,3,3,3,3,3,73,74,75,75,76,77,76,78,79,80,81,82,83,75,84,83,83,74,85,85,73,86,87,77,88,89,82,75,87,0,0,24,25,24,25,24,24,25,24,25,24,25,24,25,24,25,0,0,0,24,25,24,25,24,25,24,25,24,25,24,25,24,25,24,25,24,25,24,25,25,24,25,24,25,24,25,24,25,24,25,24,25,90,0,0,0,90,90,0,0,29,0,0,0,90,30,38,37,29,90,30,38,37,29,29,37,90,30,38,37,29,90,30,38,37,29,29,29,37,0,0,0,90,30,38,37,29,90,30,38,37,29,90,30,38,37,29,0,0,90,30,38,37,29,90,30,38,37,29,90,30,38,37,29,0,0,0,38,37,0,0,0,90,30,38,37,29,90,30,38,37,29,90,30,38,37,29,90,30,38,37,29,90,30,38,37,29,0,0,0,0,38,37,29,0,0,30,30,0,0,0,37,29,90,30,38,37,29,0,90,30,38,37,29,90,30,38,37,29,90,30,38,37,29,90,30,38,37,29,0,0,90,30,38,37,29,91,91,91,0,91,91,91,91,0,91,91,91,91,91,91,91,0,91,91,91,91,91,91,91,91,91,91,92,92,60,68,64,68,53,40,13,53,0,0,0,0,0,55,0,13,55,0,0,0,55,13,13,60,60,0,13,13,13,13,53,0,68,53,64,0,55,40,0,13,13,0,0,0,13,13,0,61,13,53,0,64,55,40,61,0,13,13,13,0,53,54,55,56,40,57,58,59,60,61,62,54,54,51,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,65,66,67,54,56,63,57,58,59,62,51,65,66,67,54,56,63,57,58,59,62,51,13,53,68,61,13,53,68,61,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,53,54,55,56,40,57,58,59,60,61,62,53,54,55,56,40,57,58,59,60,61,62,65,65,65,66,67,63,63,56,66,67,62,47,54,56,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,62,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,51,63,56,66,67,63,65,13,53,66,67,54,68,55,55,56,63,40,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,68,55,55,56,63,40,57,58,59,60,61,62,51,47,65,13,53,66,67,54,68,56,63,57,58,59,61,62,51,65,13,53,66,67,54,68,56,63,57,58,59,61,62,51,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,63,62,65,66,67,54,56,63,57,58,59,62,51,13,53,68,61,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,56,63,54,63,67,56,54,63,63,66,67,63,58,58,63,59,59,56,62,51,53,54,55,56,40,57,58,59,60,61,62,55,40,60,55,40,51,51,51,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,47,65,13,53,66,67,54,68,56,63,57,58,59,61,62,51,65,13,53,66,67,54,68,56,63,57,58,59,61,62,51,55,40,60,63,57,57,57,64,65,13,53,66,67,54,68,55,56,63,40,57,58,59,60,61,62,51,47,93,94,95,96,97,98,99,100,101,102,103,94,95,96,102,93,101,101,103,94,95,96,97,94,102,95,104,96,99,98,105,95,101,93,102,106,107,108,109,110,111,112,111,113,114],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[]],[[]],[2],[2],[2],0,[[3,4],5],[[3,4],5],[6,3],[7,3],[8,3],[9,3],[10,3],[[]],[11,3],[12,3],[[]],[[]],[13,14],0,[[],2],0,[[]],[[[16,[15]]],[[16,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],0,[3,[[19,[18]]]],[[],20],[[],21],[[],21],[[],22],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],0,[[]],[[]],[[]],[[]],[2],[2],[2],[2],[2],[2],[23,[[14,[24]]]],[23,[[14,[25]]]],[[23,26],[[14,[20]]]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],2],[[],2],[[]],[[]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],0,0,0,[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[28],[[29,30],[[14,[31]]]],[[32,[34,[33]]],14],[35,[[14,[36]]]],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[29,29],[[]],[37,38],[[35,30],14],[[35,23,32],14],[[23,23,[34,[33]]],14],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[[3,31],14],[[35,23],[[14,[36]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[34,[33]],2,39,20,40],14],[[[34,[33]],39,39,2],14],[[[42,[41]],39,39,[34,[33]]],14],0,0,[[35,26],[[14,[[19,[43]]]]]],[[35,23],[[14,[43]]]],[[35,44],[[14,[32]]]],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[35,23,23],[[14,[31]]]],[[38,[34,[33]]],14],[23,[[14,[37]]]],[35,[[14,[[36,[45]]]]]],0,0,0,[[35,43],[[14,[32]]]],[[35,23],[[14,[32]]]],0,0,[35,[[14,[30]]]],[35,[[14,[[36,[29]]]]]],[[23,46,[19,[47]],[19,[20]]],[[14,[32]]]],[37,29],[[]],[[],21],[[],21],[[],21],[[],21],[[],21],[[35,44],[[14,[[19,[32]]]]]],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[23,32,[19,[20]],[19,[47]]],[[14,[31]]]],[[23,32,46,[19,[20]],[19,[47]]],14],[[]],[[]],[[]],[[]],[[]],0,0,0,0,[[],1],[[],1],[[]],[[]],[[[49,[20,48]],[19,[39]]],14],[2],[2],[2],[[]],[[]],[[]],[[],2],[[[49,[20,48]],[19,[39]],[19,[47]]],[[14,[50]]]],[[]],[[[16,[15]]],[[16,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[],21],[[],21],[[],22],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[28],[28],[28],[28],[28],[28],[28],[28],[28],[28],[28],0,0,[51,31],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[52,52],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[53,53],[54,54],[55,55],[56,56],[40,40],[57,57],[58,58],[59,59],[60,60],[61,61],[62,62],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],52],0,[[],52],0,0,[63,[[14,[64]]]],0,0,0,0,0,0,[[],54],[[],56],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],0,[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],0,0,0,0,0,0,[[65,4],5],[[13,4],5],[[53,4],5],[[66,4],5],[[67,4],5],[[54,4],5],[[68,4],5],[[55,4],5],[[55,4],5],[[56,4],5],[[63,4],5],[[40,4],5],[[40,4],5],[[57,4],5],[[58,4],5],[[59,4],5],[[60,4],5],[[61,4],5],[[62,4],5],[[51,4],5],[[47,4],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[54,68],[[]],[56,55],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[69,[[21,[65,70]]]],[69,[[21,[13,70]]]],[69,[[21,[53,70]]]],[69,[[21,[66,70]]]],[69,[[21,[67,70]]]],[69,[[21,[54,70]]]],[69,[[21,[68,70]]]],[69,[[21,[56,70]]]],[69,[[21,[63,70]]]],[69,[[21,[57,70]]]],[69,[[21,[58,70]]]],[69,[[21,[59,70]]]],[69,[[21,[61,70]]]],[69,[[21,[62,70]]]],[69,[[21,[51,70]]]],[69,[[21,[65,70]]]],[69,[[21,[13,70]]]],[69,[[21,[53,70]]]],[69,[[21,[66,70]]]],[69,[[21,[67,70]]]],[69,[[21,[54,70]]]],[69,[[21,[68,70]]]],[69,[[21,[56,70]]]],[69,[[21,[63,70]]]],[69,[[21,[57,70]]]],[69,[[21,[58,70]]]],[69,[[21,[59,70]]]],[69,[[21,[61,70]]]],[69,[[21,[62,70]]]],[69,[[21,[51,70]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[[],[[19,[71]]]],[23,31],[23,31],[23,31],[23,31],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[16,[15]]],[[16,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[27,[15]]],[[27,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],[[[17,[15]]],[[17,[1,15]]]],0,0,0,0,0,0,0,[63,[[14,[[36,[41]]]]]],0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[55,[[19,[72]]]],[40,[[19,[72]]]],[60,[[19,[72]]]],[[],20],[[],20],[51,[[19,[47]]]],0,0,[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],21],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[65,69],[[21,[70]]]],[[13,69],[[21,[70]]]],[[53,69],[[21,[70]]]],[[66,69],[[21,[70]]]],[[67,69],[[21,[70]]]],[[54,69],[[21,[70]]]],[[68,69],[[21,[70]]]],[[56,69],[[21,[70]]]],[[63,69],[[21,[70]]]],[[57,69],[[21,[70]]]],[[58,69],[[21,[70]]]],[[59,69],[[21,[70]]]],[[61,69],[[21,[70]]]],[[62,69],[[21,[70]]]],[[51,69],[[21,[70]]]],[[65,69],[[21,[70]]]],[[13,69],[[21,[70]]]],[[53,69],[[21,[70]]]],[[66,69],[[21,[70]]]],[[67,69],[[21,[70]]]],[[54,69],[[21,[70]]]],[[68,69],[[21,[70]]]],[[56,69],[[21,[70]]]],[[63,69],[[21,[70]]]],[[57,69],[[21,[70]]]],[[58,69],[[21,[70]]]],[[59,69],[[21,[70]]]],[[61,69],[[21,[70]]]],[[62,69],[[21,[70]]]],[[51,69],[[21,[70]]]],[[],[[42,[55]]]],[[],[[42,[40]]]],[[],[[42,[60]]]],0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"c":[],"p":[[8,"Any"],[15,"usize"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"MetadataError"],[4,"Error"],[4,"Error"],[4,"Error"],[3,"Error"],[3,"Error"],[4,"Error"],[4,"Command"],[6,"Result"],[3,"Global"],[3,"Box"],[3,"Rc"],[8,"Error"],[4,"Option"],[3,"String"],[4,"Result"],[3,"TypeId"],[15,"str"],[3,"FetchedInfo"],[3,"FetchedInfoWithNetworkSpecs"],[3,"H256"],[3,"Arc"],[3,"Private"],[3,"MetaValuesStamped"],[3,"SortedMetaValues"],[15,"bool"],[3,"NetworkSpecs"],[3,"Path"],[8,"AsRef"],[3,"Db"],[3,"Vec"],[3,"MetaFetched"],[3,"MetaShortCut"],[15,"u16"],[4,"Goal"],[15,"u8"],[15,"slice"],[3,"AddressBookEntry"],[3,"NetworkSpecsKey"],[3,"MetaHistoryEntry"],[4,"Encryption"],[3,"Token"],[4,"Value"],[3,"Map"],[3,"NetworkProperties"],[3,"Override"],[3,"Command"],[4,"Show"],[3,"ContentArgs"],[4,"Set"],[3,"SetFlags"],[3,"Verifier"],[3,"Signature"],[3,"Sufficient"],[4,"Msg"],[4,"Remove"],[3,"Derivations"],[3,"Make"],[4,"Crypto"],[3,"Cli"],[3,"InstructionMeta"],[3,"InstructionSpecs"],[4,"Content"],[3,"ArgMatches"],[6,"Error"],[3,"Id"],[3,"PossibleValue"],[13,"UKeyHashInDb"],[13,"AddressBookSpecsName"],[13,"SameVersionDifferentMetadata"],[13,"SpecsInDb"],[13,"FaultySpecs"],[13,"TwoGenesisHashVariantsForName"],[13,"TwoUrlVariantsForName"],[13,"TwoBase58ForName"],[13,"HotDatabaseMetadataOverTwoEntries"],[13,"HotDatabaseMetadataSameVersionTwice"],[13,"EarlierVersion"],[13,"AddressBookEntryWithName"],[13,"UKeyUrlInDb"],[13,"TwoNamesForUrl"],[13,"ValuesChanged"],[13,"UnexpectedFetchedGenesisHashFormat"],[13,"UnexpectedFetchedBlockHashFormat"],[4,"Write"],[4,"TokenFetch"],[13,"Array"],[13,"MetaAtBlock"],[13,"KeyInfoExportToQr"],[13,"BulkTransactionTestPayload"],[13,"EncodeToQr"],[13,"TransferMetaToColdRelease"],[13,"Show"],[13,"Remove"],[13,"RestoreDefaults"],[13,"Unwasm"],[13,"MetaDefaultFile"],[13,"Types"],[13,"MakeColdRelease"],[13,"Specs"],[13,"All"],[13,"Name"],[13,"Address"],[13,"Alice"],[13,"Sufficient"],[13,"SpecNameVersion"],[13,"Title"],[13,"Specs"],[13,"CheckFile"]]},\ +"navigator":{"doc":"This is experimental cross-platform navigation for Vault. …","t":"ENNNNNNNNENNNNNNNNNNNNNNNNNNNNNNNNNNGNDNNNNNNNNNNNNNNNNNALLLLLLLLLLLLLLLLLLLFLLLLLFFLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLFAAFFLLLLLLLLLLLLLLLLLFLLLENNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNENNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDNDNDNNNDNNNNNNNNNNDNENNNNEDNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Action","BackupSeed","CheckPassword","ClearLog","CreateLogComment","DataPacking","DbHandling","DbNotInitialized","Definitions","Error","GoBack","GoForward","Hex","Increment","KeyNotFound","ManageMetadata","ManageNetworks","MutexPoisoned","NavbarKeys","NavbarLog","NavbarScan","NavbarSettings","NetworkSelector","NewKey","NewSeed","NoNetwork","NoSeedPhrase","NoTransactionsToSign","Nothing","PushWord","RecoverSeed","RemoveKey","RemoveMetadata","RemoveNetwork","RemoveSeed","RemoveTypes","Result","RightButtonAction","STATE","SeedsNumMismatch","SelectKey","SelectSeed","Shield","ShowDocuments","ShowLogDetails","SignMetadata","SignNetworkSpecs","SignTypes","Start","TextEntry","TransactionActionUnsupported","TransactionFetched","TransactionParsing","TransactionSigning","TxActionNotSign","ViewGeneralVerifier","alerts","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","do_action","drop","drop","drop","eq","equivalent","export_key_info","export_signatures_bulk","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","init","init","init","init_navigation","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","keys_by_seed_name","modals","screens","sign_dd_transaction","sign_sufficient_content","source","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","update_seed_names","vzip","vzip","vzip","Alert","Empty","Error","ErrorDisplay","Shield","__clone_box","as_any","as_any_mut","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","equivalent","fmt","from","from_mut","from_ref","get_name","init","into","into_any","into_any_arc","into_any_rc","to_owned","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","Backup","Empty","EnterPassword","KeyDetailsAction","LogComment","LogRight","ManageMetadata","Modal","NetworkDetailsMenu","NetworkSelector","NewSeedBackup","NewSeedMenu","PasswordConfirm","SeedMenu","SelectSeed","SignatureReady","SufficientCryptoReady","TypesInfo","__clone_box","as_any","as_any_mut","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","eq","equivalent","fmt","from","from_mut","from_ref","get_name","init","into","into_any","into_any_arc","into_any_rc","to_owned","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","AddressState","AddressStateMulti","DeriveKey","DeriveState","Documents","EnteredInfo","KeyDetails","KeyDetailsMulti","Keys","KeysState","Log","LogDetails","ManageNetworks","MultiSelect","NetworkDetails","NewSeed","None","Nowhere","RecoverSeedName","RecoverSeedPhrase","RecoverSeedPhraseState","Scan","Screen","SeedSelector","SelectSeedForBackup","Settings","SignSufficientCrypto","SpecialtyKeysState","SufficientCryptoState","Swiped","Transaction","Verifier","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","__clone_box","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","blank_keys_state","blank_keys_state","blank_keys_state","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_network","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","collided_with","collision","content","counter","deref","deref","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deselect_specialty","draft","drop","drop","drop","drop","drop","drop","drop","drop","drop","drop","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","get_default_label","get_multiselect_keys","get_name","get_specialty","get_swiped_key","has_back","init","init","init","init","init","init","init","init","init","init","into","into","into","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","is_multiselect","is_root","is_root","key_selected","multisigner","multisigner","name","network_specs_key","network_specs_key","network_specs_key","network_specs_key","new","new","new","new","new","new_in_network","next","number","ok","out_of","path","plus_one","previous","push_word","seed","seed_name","seed_name","seed_name","seed_name","select_set","select_single","set","swipe","text_entry","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","update","update","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","zeroize"],"q":[[0,"navigator"],[143,"navigator::alerts"],[177,"navigator::modals"],[224,"navigator::screens"]],"d":["All actions","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Navigation state of the app","","","","","","","","","","","","","","","","","","List of all alerts","","","","","","","","","","","","","","","","","","","","User actions handler.","","","","","","Export key info with derivations.","Export signatures bulk.","","","","","Returns the argument unchanged.","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","Should be called in the beginning to recall things stored …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","Get keys by seed name","List of all modals","List of all screens","Sign dynamic derivation transaction and return data for …","","","","","","","","","","","","","","","","","","","Should be called when seed names are modified in native to …","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","","Calls U::from(self).","","","","","","","","","","","State of screen with 1 key","State of screen with multiple keys","","State of derive key screen","","EnteredInfo, path+pwd entered by the user, zeroizeable","","","","State of keys screen","","","","","","","","","","","State of screen recover seed phrase","","All screens","","","","","","State of screen generating sufficient crypto","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","Encode screen name into string for UI","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","If None, this is a root key.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,6,6,6,6,16,16,16,16,0,6,6,16,6,16,6,6,16,6,6,6,6,6,6,6,16,16,16,6,6,6,6,6,6,6,6,0,6,0,16,6,6,6,6,6,6,6,6,6,6,16,6,16,16,16,6,0,16,6,3,16,6,3,16,6,3,16,6,3,16,6,3,3,16,6,3,0,16,6,3,6,6,0,0,16,16,6,16,16,16,16,16,16,6,3,16,6,3,16,6,3,16,6,3,0,16,6,3,16,6,3,16,6,3,16,6,3,0,0,0,0,0,16,16,16,6,3,16,6,3,16,6,3,16,6,3,16,6,3,0,16,6,3,0,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,41,41,41,41,41,41,41,0,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,0,0,47,0,47,0,47,47,47,0,47,47,47,48,47,47,48,47,47,47,0,47,0,47,47,47,47,0,0,48,47,47,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,42,44,45,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,43,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,45,45,49,49,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,43,50,47,48,43,42,44,45,49,50,51,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,43,47,43,43,47,47,48,43,42,44,45,49,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,43,42,44,49,42,44,50,43,42,44,45,43,42,44,45,50,43,44,44,49,44,45,49,44,50,49,43,42,44,45,43,43,44,43,50,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,47,48,43,42,44,45,49,50,51,45,49,47,48,43,42,44,45,49,50,51,51],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[2],[2],[2],[3,[[5,[[4,[0]]]]]],[2],[2],[2],[[6,7,7],[[9,[8]]]],[2],[2],[2],[[6,6],10],[[],10],[[11,7,12],[[9,[13]]]],[14,[[9,[15]]]],[[16,17],18],[[16,17],18],[[6,17],18],[19,16],[[]],[20,16],[21,16],[22,16],[23,16],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],2],[[],2],[[],2],[[11,[25,[24]]],9],[[]],[[]],[[]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[11,7],[[9,[30]]]],0,0,[[11,[14,[24]],[31,[24,24]]],[[9,[32]]]],[[11,33,34,7,7],[[9,[35]]]],[16,[[4,[36]]]],[[],24],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],38],[[],38],[[],38],[[]],[[]],[[]],[[]],[[]],[[]],[[[25,[24]]],9],[[]],[[]],[[]],0,0,0,0,0,[39],[[],1],[[],1],[[]],[[]],[40,40],[[]],[2],[2],[2],[[40,40],10],[[],10],[[40,17],18],[[]],[[]],[[]],[40,24],[[],2],[[]],[[[27,[26]]],[[27,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[]],[[],37],[[],37],[[],38],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[39],[[],1],[[],1],[[]],[[]],[41,41],[[]],[2],[2],[2],[[41,41],10],[[],10],[[41,17],18],[[]],[[]],[[]],[41,24],[[],2],[[]],[[[27,[26]]],[[27,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[]],[[],37],[[],37],[[],38],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[39],[39],[39],[39],[39],[39],[39],[39],[39],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[42,43],[44,43],[45,43],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[43,46],43],[47,47],[48,48],[43,43],[42,42],[44,44],[45,45],[49,49],[50,50],[51,51],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[45,52,53],45],[45,4],[49,34],[49,54],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[2],[43,43],[50,55],[2],[2],[2],[2],[2],[2],[2],[2],[2],[51],[[47,17],18],[[48,17],18],[[43,17],18],[[42,17],18],[[44,17],18],[[45,17],18],[[49,17],18],[[50,17],18],[[51,17],18],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[47,24],[43,[[25,[52]]]],[47,[[4,[24]]]],[43,48],[43,[[4,[52]]]],[47,10],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[34,49],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[27,[26]]],[[27,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[28,[26]]],[[28,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[[[29,[26]]],[[29,[1,26]]]],[43,10],[42,10],[44,10],[49,4],[42,52],[44,52],[50,24],[43,[[4,[46]]]],[42,[[4,[46]]]],[44,46],[45,[[4,[46]]]],[[11,7],[[9,[43]]]],[[11,7,43],[[9,[42]]]],[[11,24,46,[14,[52]]],[[9,[44]]]],[[7,43,4],45],[7,50],[[7,46],43],[44,44],[44,2],[49,10],[44,2],[45,24],[49,49],[44,44],[[50,7]],[49,24],[43,24],[42,24],[44,24],[45,24],[[43,[25,[52]]],43],[[43,52],43],[44,25],[[43,52],43],[[50,7]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],37],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[],38],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[45,7],45],[[49,52,53,7],49],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[51]],"c":[],"p":[[8,"Any"],[15,"usize"],[3,"STATE"],[4,"Option"],[3,"Mutex"],[4,"Action"],[15,"str"],[3,"ActionResult"],[6,"Result"],[15,"bool"],[3,"Db"],[4,"ExportedSet"],[3,"MKeysInfoExport"],[15,"slice"],[3,"MSignatureReady"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"FromHexError"],[4,"Error"],[3,"String"],[3,"Vec"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[3,"MKeysNew"],[3,"HashMap"],[3,"MSignedTransaction"],[3,"AddressKey"],[4,"SufficientContent"],[3,"MSufficientCryptoReady"],[8,"Error"],[4,"Result"],[3,"TypeId"],[3,"Private"],[4,"Alert"],[4,"Modal"],[3,"AddressState"],[3,"KeysState"],[3,"AddressStateMulti"],[3,"DeriveState"],[3,"NetworkSpecsKey"],[4,"Screen"],[4,"SpecialtyKeysState"],[3,"SufficientCryptoState"],[3,"RecoverSeedPhraseState"],[3,"EnteredInfo"],[4,"MultiSigner"],[3,"AddressDetails"],[15,"u8"],[3,"SeedDraft"]]},\ +"parser":{"doc":"","t":"NNNNENNENNNGNNNLLLLLLLLAFALLLLLLLLLLLLLLLLLLLLLLLLLLLAFFFLLLLLLLLLLLLLLMMMMMMMMMNNNNNNNNNNNNNNNNENNNNLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMDDLLLLLLLLLMLLMLLLLLLLLLLLLFMLLLLLLLLLLMLLLLLLLLLLLLLENNLLLLLLLLLLLLLLLLLLLLL","n":["Codec","Decoding","DefaultTypes","DefinitionsError","Error","FundamentallyBadV14Metadata","Metadata","MetadataBundle","NetworkNameMismatch","NoTypes","Older","Result","Sci","SeparateMethodExtensions","WrongNetworkVersion","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","cards","cut_method_extensions","decoding_commons","deref","deref","deref_mut","deref_mut","drop","drop","fmt","fmt","from","from","from","from","from","from_mut","from_mut","from_ref","from_ref","init","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","method","parse_extensions","parse_method","parse_set","source","to_string","try_from","try_from","try_into","try_into","type_id","type_id","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","vzip","vzip","as_decoded","in_metadata","name_metadata","name_network_specs","meta_v14","network_version","network_version","older_meta","types","Balance","BitVec","BlockHash","Default","EnumVariantName","Era","FieldName","FieldNumber","Id","Id20","IdentityField","Method","NetworkNameVersion","Nonce","None","Pallet","ParserCard","Text","Tip","TxVersion","Varname","__clone_box","as_any","as_any_mut","borrow","borrow_mut","clone","clone_into","deref","deref_mut","drop","from","from_mut","from_ref","init","into","into_any","into_any_arc","into_any_rc","show_no_docs","to_owned","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","base58prefix","base58prefix","docs","docs_enum_variant","docs_field_name","docs_field_number","docs_type","docs_type","id","id","method_name","name","name","name","number","number","number","path_type","path_type","units","units","version","CutCompact","OutputCard","__clone_box","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","card","clone","clone_into","compact_found","deref","deref","deref_mut","deref_mut","drop","drop","from","from","from_mut","from_mut","from_ref","from_ref","get_compact","indent","init","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","start_next_unit","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","vzip","vzip","OlderMeta","V12","V13","as_any","as_any_mut","borrow","borrow_mut","deref","deref_mut","drop","from","from_mut","from_ref","init","into","into_any","into_any_arc","into_any_rc","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip"],"q":[[0,"parser"],[71,"parser::Error"],[75,"parser::MetadataBundle"],[80,"parser::cards"],[127,"parser::cards::ParserCard"],[149,"parser::decoding_commons"],[202,"parser::method"]],"d":["","Errors occurring during the decoding procedure.","","","Parse error.","Errors occurring because the metadata RuntimeMetadataV14 …","","","","","","Parse result.","","","While parsing transaction with certain version of network …","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","Function intakes SCALE encoded method part of transaction …","","","","","","","","","","","","","","","","metadata version from transaction extensions, as found …","metadata version actually used for parsing, from the …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Struct to store results of searching Vec<u8> for encoded …","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Function to search &[u8] for shortest compact by brute …","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","Enum to transfer around older metadata (V12 and V13)","","","","","","","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Calls U::from(self).","","","","","","","","",""],"i":[6,6,6,6,0,6,6,0,6,6,17,0,17,6,6,17,6,17,6,17,6,17,6,0,0,0,17,6,17,6,17,6,6,6,17,6,6,6,6,17,6,17,6,17,6,17,6,17,6,17,6,17,6,0,0,0,0,6,6,17,6,17,6,17,6,17,6,17,6,17,6,31,31,32,32,33,34,33,34,34,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,0,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,35,36,37,38,39,40,39,40,35,36,37,39,38,41,42,40,43,39,40,42,43,41,0,0,21,30,21,30,21,30,21,30,21,21,21,21,30,30,21,30,21,30,21,30,21,30,21,30,21,0,21,30,21,30,21,30,21,30,21,30,21,30,21,30,21,30,21,30,21,30,21,30,21,30,21,0,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],0,[[[3,[2]]],4],0,[5],[5],[5],[5],[5],[5],[[6,7],8],[[6,7],8],[[]],[9,6],[10,6],[11,6],[[]],[[]],[[]],[[]],[[]],[[],5],[[],5],[[]],[[]],[[[13,[12]]],[[13,[1,12]]]],[[[13,[12]]],[[13,[1,12]]]],[[[14,[12]]],[[14,[1,12]]]],[[[14,[12]]],[[14,[1,12]]]],[[[15,[12]]],[[15,[1,12]]]],[[[15,[12]]],[[15,[1,12]]]],0,[[[16,[2]],17,18,[20,[19]]],[[4,[[16,[21]]]]]],[[[16,[2]],17,18],[[4,[[16,[21]]]]]],[[[3,[2]],17,18,[20,[19]]],4],[6,[[20,[22]]]],[[],23],[[],24],[[],24],[[],24],[[],24],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[26],[[],1],[[],1],[[]],[[]],[27,27],[[]],[5],[5],[5],[[]],[[]],[[]],[[],5],[[]],[[[13,[12]]],[[13,[1,12]]]],[[[14,[12]]],[[14,[1,12]]]],[[[15,[12]]],[[15,[1,12]]]],[[27,28],23],[[]],[[],24],[[],24],[[],25],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[26],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],0,[21,21],[[]],0,[5],[5],[5],[5],[5],[5],[[]],[[]],[[]],[[]],[[]],[[]],[[[3,[2]]],[[4,[[30,[29]]]]]],0,[[],5],[[],5],[[]],[[]],[[[13,[12]]],[[13,[1,12]]]],[[[13,[12]]],[[13,[1,12]]]],[[[14,[12]]],[[14,[1,12]]]],[[[14,[12]]],[[14,[1,12]]]],[[[15,[12]]],[[15,[1,12]]]],[[[15,[12]]],[[15,[1,12]]]],0,[[]],[[],24],[[],24],[[],24],[[],24],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[],1],[[],1],[[]],[[]],[5],[5],[5],[[]],[[]],[[]],[[],5],[[]],[[[13,[12]]],[[13,[1,12]]]],[[[14,[12]]],[[14,[1,12]]]],[[[15,[12]]],[[15,[1,12]]]],[[],24],[[],24],[[],25],[[]],[[]],[[]]],"c":[],"p":[[8,"Any"],[15,"u8"],[15,"slice"],[6,"Result"],[15,"usize"],[4,"Error"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"Error"],[4,"MetadataError"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[3,"Vec"],[4,"MetadataBundle"],[3,"ShortSpecs"],[15,"bool"],[4,"Option"],[3,"OutputCard"],[8,"Error"],[3,"String"],[4,"Result"],[3,"TypeId"],[3,"Private"],[4,"ParserCard"],[15,"u32"],[8,"HasCompact"],[3,"CutCompact"],[13,"WrongNetworkVersion"],[13,"NetworkNameMismatch"],[13,"Sci"],[13,"Older"],[13,"Id"],[13,"Id20"],[13,"Method"],[13,"EnumVariantName"],[13,"FieldName"],[13,"FieldNumber"],[13,"NetworkNameVersion"],[13,"Balance"],[13,"Tip"],[4,"OlderMeta"]]},\ +"printing_balance":{"doc":"","t":"DLLFLLMFLLLM","n":["PrettyOutput","borrow","borrow_mut","convert_balance_pretty","from","into","number","print_pretty_test","try_from","try_into","type_id","units"],"q":[[0,"printing_balance"]],"d":["","","","Input balance has to be a printed number. Likely u128 or …","Returns the argument unchanged.","Calls U::from(self).","","","","","",""],"i":[0,3,3,0,3,3,3,0,3,3,3,3],"f":[0,[[]],[[]],[[1,2,1],3],[[]],[[]],0,[[4,2,1],5],[[],6],[[],6],[[],7],0],"c":[],"p":[[15,"str"],[15,"u8"],[3,"PrettyOutput"],[15,"u128"],[3,"String"],[4,"Result"],[3,"TypeId"]]},\ +"qr_reader_pc":{"doc":"QR reader crate for PC","t":"DFLLLLLLLLLLLMLLLLLFFLLLLLL","n":["CameraSettings","arg_parser","as_any","as_any_mut","borrow","borrow_mut","deref","deref_mut","drop","fmt","from","from_mut","from_ref","index","init","into","into_any","into_any_arc","into_any_rc","process_qr_image","run_with_camera","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip"],"q":[[0,"qr_reader_pc"]],"d":["Structure for storing camera settings.","The program’s argument parser. The parser initializes …","","","","","","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Camera index","","Calls U::from(self).","","","","Function for decoding QR grayscale image. Returns a string …","Main cycle of video capture. Returns a string with decoded …","","","","","",""],"i":[0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3],"f":[0,[[[2,[1]]],[[4,[3]]]],[[],5],[[],5],[[]],[[]],[6],[6],[6],[[3,7],8],[[]],[[]],[[]],0,[[],6],[[]],[[[10,[9]]],[[10,[5,9]]]],[[[11,[9]]],[[11,[5,9]]]],[[[12,[9]]],[[12,[5,9]]]],[[13,14],[[4,[15]]]],[3,[[4,[1]]]],[[],16],[[],16],[[],17],[[]],[[]],[[]]],"c":[],"p":[[3,"String"],[3,"Vec"],[3,"CameraSettings"],[6,"Result"],[8,"Any"],[15,"usize"],[3,"Formatter"],[6,"Result"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[6,"GrayImage"],[4,"InProgress"],[4,"Ready"],[4,"Result"],[3,"TypeId"]]},\ +"qr_reader_phone":{"doc":"","t":"NNNNNENNNNNNNGNNNNLLLLFLLLLLLLLLLLFFLLLLLALLLLLLLLDNNNDDNEDNNNENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["BananaSplitError","BananaSplitWrongPassword","ConflictingLegacyLengths","ConflictingPayloads","DynamicInterruptedByStatic","Error","FountainInterruptedByLegacy","HexDecoding","LegacyFrame","LegacyInterruptedByBanana","LegacyInterruptedByFountain","LengthExceeded","RaptorqFrame","Result","SameNumber","TransactionParsingError","UnableToDecode","UnexpectedData","as_any","as_any_mut","borrow","borrow_mut","decode_sequence","deref","deref_mut","drop","fmt","fmt","from","from","from","from","from_mut","from_ref","get_length","get_payload","init","into","into_any","into_any_arc","into_any_rc","process_payload","source","to_string","try_from","try_into","type_id","unchecked_into","unique_saturated_into","vzip","BananaRecovery","BananaRecovery","BananaSplitPasswordRequest","BananaSplitReady","Element","Fountain","Fountain","InProgress","LegacyMulti","LegacyMulti","None","NotYet","Ready","Yes","as_any","as_any","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","collect","collected","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","drop","drop","eq","eq","eq","equivalent","equivalent","equivalent","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","from_ref","from_ref","init","init","init","init","init","init","into","into","into","into","into","into","into_any","into_any","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","process_decoded_payload","total","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","vzip","vzip","vzip","vzip","vzip","vzip"],"q":[[0,"qr_reader_phone"],[50,"qr_reader_phone::process_payload"]],"d":["","","","","","QR code handling error type.","","","","","","","","Qr code handling parsing result.","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Called to inform that the packet with the id has been …","Return the number of packets collected.","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[9,9,9,9,9,0,9,9,9,9,9,9,9,0,9,9,9,9,9,9,9,9,0,9,9,9,9,9,9,9,9,9,9,9,0,0,9,9,9,9,9,0,9,9,9,9,9,9,9,9,0,29,30,30,0,0,29,0,0,29,29,30,0,30,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,26,26,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,26,27,28,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,0,26,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28,31,29,30,26,27,28],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[]],[[]],[[[3,[2]],[4,[2]],5],[[7,[6]]]],[8],[8],[8],[[9,10],11],[[9,10],11],[12,9],[13,9],[14,9],[[]],[[]],[[]],[[15,5],[[7,[16]]]],[[15,5],[[7,[[18,[17]]]]]],[[],8],[[]],[[[20,[19]]],[[20,[1,19]]]],[[[21,[19]]],[[21,[1,19]]]],[[[22,[19]]],[[22,[1,19]]]],0,[9,[[4,[23]]]],[[],2],[[],24],[[],24],[[],25],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[26,8]],[26,8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[[26,26],5],[[27,27],5],[[28,28],5],[[],5],[[],5],[[],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],8],[[],8],[[],8],[[],8],[[],8],[[],8],[[]],[[]],[[]],[[]],[[]],[[]],[[[20,[19]]],[[20,[1,19]]]],[[[20,[19]]],[[20,[1,19]]]],[[[20,[19]]],[[20,[1,19]]]],[[[20,[19]]],[[20,[1,19]]]],[[[20,[19]]],[[20,[1,19]]]],[[[20,[19]]],[[20,[1,19]]]],[[[21,[19]]],[[21,[1,19]]]],[[[21,[19]]],[[21,[1,19]]]],[[[21,[19]]],[[21,[1,19]]]],[[[21,[19]]],[[21,[1,19]]]],[[[21,[19]]],[[21,[1,19]]]],[[[21,[19]]],[[21,[1,19]]]],[[[22,[19]]],[[22,[1,19]]]],[[[22,[19]]],[[22,[1,19]]]],[[[22,[19]]],[[22,[1,19]]]],[[[22,[19]]],[[22,[1,19]]]],[[[22,[19]]],[[22,[1,19]]]],[[[22,[19]]],[[22,[1,19]]]],[[[18,[17]],[4,[2]],29],[[7,[30]]]],0,[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],24],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]]],"c":[],"p":[[8,"Any"],[3,"String"],[15,"slice"],[4,"Option"],[15,"bool"],[4,"DecodeSequenceResult"],[6,"Result"],[15,"usize"],[4,"Error"],[3,"Formatter"],[6,"Result"],[4,"Error"],[4,"FromHexError"],[4,"Error"],[15,"str"],[15,"u32"],[15,"u8"],[3,"Vec"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[8,"Error"],[4,"Result"],[3,"TypeId"],[3,"Fountain"],[3,"LegacyMulti"],[3,"Element"],[4,"InProgress"],[4,"Ready"],[3,"BananaRecovery"]]},\ +"qrcode_rtx":{"doc":"","t":"FFF","n":["make_data_packs","make_pretty_qr","transform_into_qr_apng"],"q":[[0,"qrcode_rtx"]],"d":["function to take data as Vec<u8>, apply raptorq to get …","Function to make appropriately sized qr code, apng or …","Function to transform input Vec<u8> into fountain qr-code"],"i":[0,0,0],"f":[[[[2,[1]],3],[[7,[[5,[4]],6]]]],[[[2,[1]],[9,[8]]],[[7,[[11,[10]]]]]],[[[2,[1]],3,3,[9,[8]]],[[7,[[11,[10]]]]]]],"c":[],"p":[[15,"u8"],[15,"slice"],[15,"u16"],[4,"QrData"],[3,"Vec"],[15,"str"],[4,"Result"],[3,"Path"],[8,"AsRef"],[8,"Error"],[3,"Box"]]},\ +"qrcode_static":{"doc":"","t":"ENNLLLLFFLLL","n":["DataType","Regular","Sensitive","borrow","borrow_mut","from","into","png_qr","png_qr_from_string","try_from","try_into","type_id"],"q":[[0,"qrcode_static"]],"d":["What kind of data goes into QR, to additionally …","signatures for transactions and public keys export","secret keys export","","","Returns the argument unchanged.","Calls U::from(self).","Generate static qr code from slice &[u8]","Generate static qr code from a string.","","",""],"i":[0,3,3,3,3,3,3,0,0,3,3,3],"f":[0,0,0,[[]],[[]],[[]],[[]],[[[2,[1]],3],[[5,[[4,[1]]]]]],[[6,3],[[5,[[4,[1]]]]]],[[],7],[[],7],[[],8]],"c":[],"p":[[15,"u8"],[15,"slice"],[4,"DataType"],[3,"Vec"],[6,"Result"],[15,"str"],[4,"Result"],[3,"TypeId"]]},\ +"signer":{"doc":"This crate serves as interface between native frontend and …","t":"NNNNENNNNNNENNNNLLLLLLLLLLLLLLFFFFLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLOLLLLMMMMMMMMMMMMMM","n":["BananaSplit","BananaSplitWrongPassword","DbNotInitialized","DbSchemaMismatch","ErrorDisplayed","GenericError","LoadMetaUnknownNetwork","MetadataKnown","MetadataOutdated","MutexPoisoned","NoMetadata","QrSequenceDecodeError","SpecsKnown","Str","UnknownNetwork","WrongPassword","as_any","as_any","as_any_mut","as_any_mut","borrow","borrow","borrow_mut","borrow_mut","deref","deref","deref_mut","deref_mut","drop","drop","ffi_signer_efd6_rustbuffer_alloc","ffi_signer_efd6_rustbuffer_free","ffi_signer_efd6_rustbuffer_from_bytes","ffi_signer_efd6_rustbuffer_reserve","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_mut","from_mut","from_ref","from_ref","from_str","init","init","into","into","into_any","into_any","into_any_arc","into_any_arc","into_any_rc","into_any_rc","signer_destroy_string","to_string","to_string","try_from","try_from","try_into","try_into","type_id","type_id","unchecked_into","unchecked_into","uniffi_reexport_scaffolding","unique_saturated_into","unique_saturated_into","vzip","vzip","encryption","encryption","genesis_hash","have","name","name","name","name","name","s","version","want","s","s"],"q":[[0,"signer"],[76,"signer::ErrorDisplayed"],[88,"signer::QrSequenceDecodeError"]],"d":["","","","Database schema mismatch","Container for severe error message","","Tried to load metadata for unknown network.","The metadata with this network version already in db.","Do not have an up-to-date version of metadata in db","","No metadata for a known network found in store","An error type for QR sequence decoding errors.","Tried to add specs already present in Vault.","String description of error","Tried to sign transaction with an unknown network","Provided password is incorrect","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","Returns the argument unchanged.","","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","Public destructor for strings managed by the other side of …","","","","","","","","","","","","","","","","","","","","Name of the network not known to the Vault.","","","","","Error description","","","",""],"i":[10,10,7,7,0,10,7,7,7,7,7,0,7,7,7,7,7,10,7,10,7,10,7,10,7,10,7,10,7,10,0,0,0,0,7,7,10,10,7,7,7,7,7,10,10,7,10,7,10,7,7,10,7,10,7,10,7,10,7,10,0,7,10,7,10,7,10,7,10,7,10,0,7,10,7,10,24,25,25,26,27,24,28,26,29,30,28,26,31,32],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],1],[[],1],[[],1],[[],1],[[]],[[]],[[]],[[]],[2],[2],[2],[2],[2],[2],[[3,4],5],[[5,4]],[[6,4],5],[[5,3,4],5],[[7,8],9],[[7,8],9],[[10,8],9],[[10,8],9],[[]],[11,7],[12,7],[13,7],[14,7],[[]],[15,10],[[]],[[]],[[]],[[]],[16,[[17,[7]]]],[[],2],[[],2],[[]],[[]],[[[19,[18]]],[[19,[1,18]]]],[[[19,[18]]],[[19,[1,18]]]],[[[20,[18]]],[[20,[1,18]]]],[[[20,[18]]],[[20,[1,18]]]],[[[21,[18]]],[[21,[1,18]]]],[[[21,[18]]],[[21,[1,18]]]],[22],[[],12],[[],12],[[],17],[[],17],[[],17],[[],17],[[],23],[[],23],[[]],[[]],0,[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0],"c":[],"p":[[8,"Any"],[15,"usize"],[15,"i32"],[3,"RustCallStatus"],[3,"RustBuffer"],[3,"ForeignBytes"],[4,"ErrorDisplayed"],[3,"Formatter"],[6,"Result"],[4,"QrSequenceDecodeError"],[4,"Error"],[3,"String"],[3,"Error"],[4,"Error"],[4,"Error"],[15,"str"],[4,"Result"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[6,"c_char"],[3,"TypeId"],[13,"SpecsKnown"],[13,"UnknownNetwork"],[13,"MetadataOutdated"],[13,"LoadMetaUnknownNetwork"],[13,"MetadataKnown"],[13,"NoMetadata"],[13,"Str"],[13,"BananaSplit"],[13,"GenericError"]]},\ +"transaction_parsing":{"doc":"","t":"NNNNNNNNNNNNENNNNNNNNNNNNNNNNNNNNNNNNNGNNNNNNNENENNLLLLLLLLLLLLLLAALLLLFLLLLLLLLLACLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLAFFLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDLLLLLLLLLLLLLLLMFMLLLLLMLFFFF","n":["AddSpecs","AddSpecsDifferentBase58","AddSpecsDifferentName","AddSpecsVerifierChanged","AddrNotFound","AllExtensionsParsingFailed","BadSignature","Codec","DbError","Definitions","Derivations","EncryptionNotSupported","Error","GeneralVerifierChanged","HistoricalMetadata","HistoryNetworkSpecs","ImportantSpecsChanged","LoadMeta","LoadMetaGeneralVerifierChanged","LoadMetaNoSpecs","LoadMetaSetGeneralVerifier","LoadMetaSetVerifier","LoadMetaUnknownNetwork","LoadMetaVerifierChanged","LoadMetaWrongGenesisHash","LoadTypes","Metadata","MetadataKnown","NeedGeneralVerifier","NeedVerifier","NetworkForDerivationsImport","NoMetadata","NotSubstrate","NotUtf8","Parser","ParserError","PayloadNotSupported","Read","Result","SameNameVersionDifferentMeta","SeparateMethodExtensions","Sign","Sled","SpecsCollision","SpecsKnown","Stub","StubNav","TooShort","TransactionAction","TypesKnown","UnknownNetwork","__clone_box","__clone_box","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","cards","check_signature","clone","clone","clone_into","clone_into","decode_payload","deref","deref","deref","deref_mut","deref_mut","deref_mut","drop","drop","drop","dynamic_derivations","entry_to_transactions_with_decoding","eq","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","init","init","init","into","into","into","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","parse_transaction","prepare_derivations_preview","produce_output","source","to_owned","to_owned","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","vzip","vzip","vzip","base58_database","base58_input","content","content","encryption","encryption","encryption","encryption","encryption","errors","general_verifier","genesis_hash","genesis_hash","genesis_hash","genesis_hash","genesis_hash","name","name","name","name","name","name","name","name","name","name","name","name","name","name","name","name","name_database","name_input","name_metadata","name_specs","network_name","new_general_verifier_value","new_general_verifier_value","new_general_verifier_value","new_verifier_value","new_verifier_value","new_verifier_value","old_general_verifier_value","old_general_verifier_value","old_verifier_value","old_verifier_value","valid_current_verifier","verifier_value","verifier_value","version","version","l","n","actions","checksum","content","r","s","stub","u","InfoPassedCrypto","as_any","as_any_mut","borrow","borrow_mut","deref","deref_mut","drop","from","from_mut","from_ref","init","into","into_any","into_any_arc","into_any_rc","message","pass_crypto","tail","try_from","try_into","type_id","unchecked_into","unique_saturated_into","verifier","vzip","dd_transaction_msg_genesis_encryption","process_dynamic_derivations","entry_to_transactions_with_decoding","parse_dd_transaction"],"q":[[0,"transaction_parsing"],[147,"transaction_parsing::Error"],[199,"transaction_parsing::StubNav"],[201,"transaction_parsing::TransactionAction"],[208,"transaction_parsing::check_signature"],[234,"transaction_parsing::dynamic_derivations"],[236,"transaction_parsing::parse_transaction"]],"d":["","NetworkSpecs received in add_specs payload are for a …","NetworkSpecs received in add_specs payload are for a …","Received add_specs update payload is signed by …","Key corresponding to the address was not found in the db","Error parsing extensions of a signable transaction with …","Update payload signature is invalid for given public key, …","","DB error.","","","There is a limited number of encryption algorithms …","Transaction parsing error.","Received add_specs or load_types is signed by …","Network metadata needed to parse historical transaction, …","OrderedNetworkSpecs needed to parse historical …","NetworkSpecs received in add_specs payload are for a …","","Received load_metadata update payload is signed by …","User attempted to load into Vault the metadata for the …","Received load_metadata update payload is signed by …","Received load_metadata update payload is signed.","User attempted to load into Vault the metadata for the …","Received load_metadata update payload is signed by …","User attempted to load into Vault the metadata for the …","","","Network name and version from metadata received in …","Received update payload is not verified, although the …","Received add_specs or load_metadata update payload is not …","OrderedNetworkSpecs for network in which the imported …","Received transaction that should be parsed prior to …","All transactions are expected to be the Substrate ones, …","","","","There is a limited number of payloads supported by the …","","Transaction parsing result.","Network name and version from metadata received in …","Can not separate method from extensions, bad transaction.","","","More than one entry found for network specs with given name…","NetworkSpecs from the received add_specs payload already …","","Enum describing Stub content. Is used for proper …","Received transaction is unexpectedly short, more bytes …","Enum containing card sets for four different outcomes: …","Types information received in the load_types payload is …","Received signable transaction (with prelude 53xx00, 53xx02 …","","","","","","","","","","","","","","","","","","","","","Decode content of payload enable_dynamic_derivations is a …","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","payload that requires general verifier","payload that requires general verifier","","","","network Encryption","network supported encryption","","Vault general verifier","","","","genesis hash from the load_metadata payload, that was used …","network genesis hash","","","","","","","network name","network name","network name","network name as it is in the received metadata","network name as it is in the received metadata","network name","network name","network name","network name","network name (identical for received and for stored …","","","network name as it is in the received metadata","network name as it is in the network specs for genesis hash","","VerifierValue that was used to sign the update","VerifierValue that has signed the payload instead of the …","VerifierValue that was used to sign the update","VerifierValue for the payload","VerifierValue that has signed the update payload","VerifierValue for the payload","general verifier associated VerifierValue in the database","general verifier associated VerifierValue in the database","VerifierValue for the network in the database","VerifierValue for the network in the database","network-associated ValidCurrentVerifier","expected verifier for this network","VerifierValue currently associated with the general …","","network version (identical for received and for stored …","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","","Calls U::from(self).","","","","","","","","","","","","","","Partially parses dynamic derivation transaction to make it …","Parses dynamic derivation request and returns preview of …","",""],"i":[4,10,10,10,10,10,10,10,10,10,3,10,0,10,10,10,10,4,10,10,10,10,10,10,10,4,10,10,10,10,10,10,10,10,10,10,10,3,0,10,10,3,10,10,10,3,0,10,0,10,10,3,4,10,3,4,10,3,4,10,3,4,10,3,4,0,0,3,4,3,4,0,10,3,4,10,3,4,10,3,4,0,0,3,4,3,4,10,10,3,4,10,10,10,10,10,10,10,10,3,4,10,3,4,10,3,4,10,3,4,10,3,4,10,3,4,10,3,4,10,3,4,0,0,0,10,3,4,10,10,3,4,10,3,4,10,3,4,10,3,4,10,3,4,10,3,4,40,40,41,42,43,44,45,46,47,48,49,45,40,50,51,47,52,43,44,53,54,40,46,55,56,57,49,58,59,60,61,62,50,50,51,51,48,42,60,61,56,58,59,42,61,56,59,49,55,41,53,62,63,64,65,65,66,67,68,68,68,0,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,0,35,35,35,35,35,35,35,35,0,0,0,0],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[1],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],0,0,[3,3],[4,4],[[]],[[]],[[5,6],[[8,[7]]]],[9],[9],[9],[9],[9],[9],[9],[9],[9],0,0,[[3,3],6],[[4,4],6],[[],6],[[],6],[[10,11],12],[[10,11],12],[[3,11],[[14,[13]]]],[[4,11],[[14,[13]]]],[15,10],[[]],[16,10],[17,10],[18,10],[19,10],[20,10],[21,10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],9],[[],9],[[],9],[[]],[[]],[[]],[[[23,[22]]],[[23,[2,22]]]],[[[23,[22]]],[[23,[2,22]]]],[[[23,[22]]],[[23,[2,22]]]],[[[24,[22]]],[[24,[2,22]]]],[[[24,[22]]],[[24,[2,22]]]],[[[24,[22]]],[[24,[2,22]]]],[[[25,[22]]],[[25,[2,22]]]],[[[25,[22]]],[[25,[2,22]]]],[[[25,[22]]],[[25,[2,22]]]],0,[[26,27],[[8,[[29,[28]]]]]],[[26,5],[[8,[3]]]],[10,[[31,[30]]]],[[]],[[]],[[],32],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],33],[[],33],[[],33],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],2],[[],2],[[]],[[]],[9],[9],[9],[[]],[[]],[[]],[[],9],[[]],[[[23,[22]]],[[23,[2,22]]]],[[[24,[22]]],[[24,[2,22]]]],[[[25,[22]]],[[25,[2,22]]]],0,[[5,34],[[8,[35]]]],0,[[],14],[[],14],[[],33],[[]],[[]],0,[[]],[5,8],[[26,[36,[32,32]],5],[[8,[37]]]],[[26,38],[[8,[[29,[39]]]]]],[[26,5,[36,[32,32]]],[[8,[3]]]]],"c":[],"p":[[3,"Private"],[8,"Any"],[4,"TransactionAction"],[4,"StubNav"],[15,"str"],[15,"bool"],[4,"DecodeSequenceResult"],[6,"Result"],[15,"usize"],[4,"Error"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"Result"],[4,"Error"],[4,"Error"],[4,"Error"],[4,"MetadataError"],[4,"Error"],[3,"Utf8Error"],[3,"Error"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[3,"Db"],[4,"ExportAddrs"],[3,"SeedKeysPreview"],[3,"Vec"],[8,"Error"],[4,"Option"],[3,"String"],[3,"TypeId"],[4,"TransferContent"],[3,"InfoPassedCrypto"],[3,"HashMap"],[3,"DDPreview"],[3,"Entry"],[3,"MEventMaybeDecoded"],[13,"AddSpecsDifferentBase58"],[13,"NeedGeneralVerifier"],[13,"GeneralVerifierChanged"],[13,"SpecsCollision"],[13,"HistoryNetworkSpecs"],[13,"UnknownNetwork"],[13,"SpecsKnown"],[13,"NetworkForDerivationsImport"],[13,"AllExtensionsParsingFailed"],[13,"LoadMetaNoSpecs"],[13,"AddSpecsDifferentName"],[13,"LoadMetaWrongGenesisHash"],[13,"HistoricalMetadata"],[13,"SameNameVersionDifferentMeta"],[13,"NoMetadata"],[13,"NeedVerifier"],[13,"AddSpecsVerifierChanged"],[13,"LoadMetaUnknownNetwork"],[13,"LoadMetaSetVerifier"],[13,"LoadMetaVerifierChanged"],[13,"LoadMetaSetGeneralVerifier"],[13,"LoadMetaGeneralVerifierChanged"],[13,"MetadataKnown"],[13,"LoadMeta"],[13,"AddSpecs"],[13,"Sign"],[13,"Derivations"],[13,"Read"],[13,"Stub"]]},\ +"transaction_signing":{"doc":"","t":"NNNENNNNGDEENNNLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["AddSpecs","CryptoError","DbHandling","Error","LoadMeta","LoadTypes","Message","Other","Result","SignatureAndChecksum","SignatureType","SufficientContent","Transaction","WrongPassword","WrongPasswordNewChecksum","__clone_box","__clone_box","as_any","as_any","as_any","as_any","as_any_mut","as_any_mut","as_any_mut","as_any_mut","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","create_signature","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","eq","equivalent","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from_mut","from_mut","from_mut","from_mut","from_ref","from_ref","from_ref","from_ref","handle_sign","handle_stub","init","init","init","init","into","into","into","into","into_any","into_any","into_any","into_any","into_any_arc","into_any_arc","into_any_arc","into_any_arc","into_any_rc","into_any_rc","into_any_rc","into_any_rc","new_checksum","sign_content","signature","signature_type","source","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","unchecked_into","unchecked_into","unchecked_into","unchecked_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","unique_saturated_into","vzip","vzip","vzip","vzip"],"q":[[0,"transaction_signing"]],"d":["","Error in SecretString.","A DB error.","Transaction signing error.","","","","","Transaction signing result.","","","Possible content to generate sufficient crypto for","","User has entered a wrong password for a passworded address.","User has entered a wrong password for a passworded address …","","","","","","","","","","","","","","","","","","","","","","","Function to create signatures using RN output action line, …","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a mutable reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","Get a reference to the inner from the outer.","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[4,15,15,0,4,4,3,15,0,0,0,0,3,15,15,3,4,10,3,15,4,10,3,15,4,10,3,15,4,10,3,15,4,3,4,3,4,0,10,3,15,4,10,3,15,4,10,3,15,4,3,3,3,15,15,4,10,3,15,15,15,4,10,3,15,4,10,3,15,4,0,0,10,3,15,4,10,3,15,4,10,3,15,4,10,3,15,4,10,3,15,4,10,0,10,10,15,3,4,10,15,10,3,15,4,10,3,15,4,10,3,15,4,10,3,15,4,10,3,15,4,10,3,15,4],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1],[1],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[],2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[3,3],[4,4],[[]],[[]],[[5,6,6,6,7,8,9],[[11,[10]]]],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[8],[[3,3],12],[[],12],[[3,13],14],[[15,13],14],[[15,13],14],[[4,13],14],[[]],[[]],[16,15],[[]],[17,15],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[5,7,6,6,6,8,9],[[11,[[19,[18]]]]]],[[5,7],11],[[],8],[[],8],[[],8],[[],8],[[]],[[]],[[]],[[]],[[[21,[20]]],[[21,[2,20]]]],[[[21,[20]]],[[21,[2,20]]]],[[[21,[20]]],[[21,[2,20]]]],[[[21,[20]]],[[21,[2,20]]]],[[[22,[20]]],[[22,[2,20]]]],[[[22,[20]]],[[22,[2,20]]]],[[[22,[20]]],[[22,[2,20]]]],[[[22,[20]]],[[22,[2,20]]]],[[[23,[20]]],[[23,[2,20]]]],[[[23,[20]]],[[23,[2,20]]]],[[[23,[20]]],[[23,[2,20]]]],[[[23,[20]]],[[23,[2,20]]]],[10,7],[[5,24,25,4,6,6],11],[10,26],[10,3],[15,[[28,[27]]]],[[]],[[]],[10,29],[[],29],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],30],[[],31],[[],31],[[],31],[[],31],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]]],"c":[],"p":[[3,"Private"],[8,"Any"],[4,"SignatureType"],[4,"SufficientContent"],[3,"Db"],[15,"str"],[15,"u32"],[15,"usize"],[4,"Encryption"],[3,"SignatureAndChecksum"],[6,"Result"],[15,"bool"],[3,"Formatter"],[6,"Result"],[4,"Error"],[3,"Error"],[4,"Error"],[15,"u8"],[3,"Vec"],[3,"Global"],[3,"Box"],[3,"Arc"],[3,"Rc"],[4,"MultiSigner"],[3,"AddressDetails"],[4,"MultiSignature"],[8,"Error"],[4,"Option"],[3,"String"],[4,"Result"],[3,"TypeId"]]}\ +}'); +if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; +if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/rustdocs/settings.html b/rustdocs/settings.html new file mode 100644 index 0000000000..9606b0c09c --- /dev/null +++ b/rustdocs/settings.html @@ -0,0 +1 @@ +Rustdoc settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/rustdocs/signer/all.html b/rustdocs/signer/all.html new file mode 100644 index 0000000000..cfad56d4a2 --- /dev/null +++ b/rustdocs/signer/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/signer/enum.ErrorDisplayed.html b/rustdocs/signer/enum.ErrorDisplayed.html new file mode 100644 index 0000000000..4dbbcdf3a3 --- /dev/null +++ b/rustdocs/signer/enum.ErrorDisplayed.html @@ -0,0 +1,165 @@ +ErrorDisplayed in signer - Rust
pub enum ErrorDisplayed {
+    Str {
+        s: String,
+    },
+    MutexPoisoned,
+    DbNotInitialized,
+    LoadMetaUnknownNetwork {
+        name: String,
+    },
+    SpecsKnown {
+        name: String,
+        encryption: Encryption,
+    },
+    MetadataKnown {
+        name: String,
+        version: u32,
+    },
+    MetadataOutdated {
+        name: String,
+        have: u32,
+        want: u32,
+    },
+    UnknownNetwork {
+        genesis_hash: H256,
+        encryption: Encryption,
+    },
+    NoMetadata {
+        name: String,
+    },
+    WrongPassword,
+    DbSchemaMismatch,
+}
Expand description

Container for severe error message

+

TODO: implement properly or remove completely

+

Variants§

§

Str

Fields

§s: String

Error description

+

String description of error

+
§

MutexPoisoned

§

DbNotInitialized

§

LoadMetaUnknownNetwork

Fields

§name: String

Name of the network not known to the Vault.

+

Tried to load metadata for unknown network.

+
§

SpecsKnown

Fields

§name: String
§encryption: Encryption

Tried to add specs already present in Vault.

+
§

MetadataKnown

Fields

§name: String
§version: u32

The metadata with this network version already in db.

+
§

MetadataOutdated

Fields

§name: String
§have: u32
§want: u32

Do not have an up-to-date version of metadata in db

+
§

UnknownNetwork

Fields

§genesis_hash: H256
§encryption: Encryption

Tried to sign transaction with an unknown network

+
§

NoMetadata

Fields

§name: String

No metadata for a known network found in store

+
§

WrongPassword

Provided password is incorrect

+
§

DbSchemaMismatch

Database schema mismatch

+

Trait Implementations§

source§

impl Debug for ErrorDisplayed

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for ErrorDisplayed

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Error> for ErrorDisplayed

source§

fn from(e: DbHandlingError) -> Self

Converts to this type from the input type.
source§

impl From<Error> for ErrorDisplayed

source§

fn from(e: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for ErrorDisplayed

source§

fn from(e: NavigatorError) -> Self

Converts to this type from the input type.
source§

impl From<String> for ErrorDisplayed

source§

fn from(s: String) -> Self

Converts to this type from the input type.
source§

impl FromStr for ErrorDisplayed

§

type Err = ()

The associated error which can be returned from parsing.
source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

§

impl<T> MaybeFromStr for Twhere + T: FromStr,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/signer/enum.QrSequenceDecodeError.html b/rustdocs/signer/enum.QrSequenceDecodeError.html new file mode 100644 index 0000000000..56c7ba6b49 --- /dev/null +++ b/rustdocs/signer/enum.QrSequenceDecodeError.html @@ -0,0 +1,129 @@ +QrSequenceDecodeError in signer - Rust
pub enum QrSequenceDecodeError {
+    BananaSplitWrongPassword,
+    BananaSplit {
+        s: String,
+    },
+    GenericError {
+        s: String,
+    },
+}
Expand description

An error type for QR sequence decoding errors.

+

Variants§

§

BananaSplitWrongPassword

§

BananaSplit

Fields

§

GenericError

Fields

Trait Implementations§

source§

impl Debug for QrSequenceDecodeError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for QrSequenceDecodeError

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Error> for QrSequenceDecodeError

source§

fn from(value: Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_alloc.html b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_alloc.html new file mode 100644 index 0000000000..c973d67f68 --- /dev/null +++ b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_alloc.html @@ -0,0 +1,5 @@ +ffi_signer_efd6_rustbuffer_alloc in signer - Rust
#[no_mangle]
+pub extern "C" fn ffi_signer_efd6_rustbuffer_alloc(
+    size: i32,
+    call_status: &mut RustCallStatus
+) -> RustBuffer
\ No newline at end of file diff --git a/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_free.html b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_free.html new file mode 100644 index 0000000000..f5f3aaaf43 --- /dev/null +++ b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_free.html @@ -0,0 +1,5 @@ +ffi_signer_efd6_rustbuffer_free in signer - Rust
#[no_mangle]
+pub unsafe extern "C" fn ffi_signer_efd6_rustbuffer_free(
+    buf: RustBuffer,
+    call_status: &mut RustCallStatus
+)
\ No newline at end of file diff --git a/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_from_bytes.html b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_from_bytes.html new file mode 100644 index 0000000000..7297e2d367 --- /dev/null +++ b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_from_bytes.html @@ -0,0 +1,5 @@ +ffi_signer_efd6_rustbuffer_from_bytes in signer - Rust
#[no_mangle]
+pub unsafe extern "C" fn ffi_signer_efd6_rustbuffer_from_bytes(
+    bytes: ForeignBytes,
+    call_status: &mut RustCallStatus
+) -> RustBuffer
\ No newline at end of file diff --git a/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_reserve.html b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_reserve.html new file mode 100644 index 0000000000..81d87fdb5b --- /dev/null +++ b/rustdocs/signer/fn.ffi_signer_efd6_rustbuffer_reserve.html @@ -0,0 +1,6 @@ +ffi_signer_efd6_rustbuffer_reserve in signer - Rust
#[no_mangle]
+pub unsafe extern "C" fn ffi_signer_efd6_rustbuffer_reserve(
+    buf: RustBuffer,
+    additional: i32,
+    call_status: &mut RustCallStatus
+) -> RustBuffer
\ No newline at end of file diff --git a/rustdocs/signer/fn.signer_destroy_string.html b/rustdocs/signer/fn.signer_destroy_string.html new file mode 100644 index 0000000000..7ead9c6528 --- /dev/null +++ b/rustdocs/signer/fn.signer_destroy_string.html @@ -0,0 +1,8 @@ +signer_destroy_string in signer - Rust
#[no_mangle]
+pub unsafe extern "C" fn signer_destroy_string(s: *mut c_char)
Expand description

Public destructor for strings managed by the other side of the FFI.

+

Safety

+

This will free the string pointer it gets passed in as an argument, +and thus can be wildly unsafe if misused.

+

See the documentation of ffi_support::destroy_c_string and +ffi_support::define_string_destructor! for further info.

+
\ No newline at end of file diff --git a/rustdocs/signer/index.html b/rustdocs/signer/index.html new file mode 100644 index 0000000000..a3a982ab3f --- /dev/null +++ b/rustdocs/signer/index.html @@ -0,0 +1,4 @@ +signer - Rust

Crate signer

source ·
Expand description

This crate serves as interface between native frontend and Rust code. Try to avoid placing any +logic here, just interfacing. When porting to new platform, all Rust changes will probably +happen here.

+

Macros

Enums

Functions

\ No newline at end of file diff --git a/rustdocs/signer/macro.uniffi_reexport_scaffolding!.html b/rustdocs/signer/macro.uniffi_reexport_scaffolding!.html new file mode 100644 index 0000000000..92376d97bb --- /dev/null +++ b/rustdocs/signer/macro.uniffi_reexport_scaffolding!.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to macro.uniffi_reexport_scaffolding.html...

+ + + \ No newline at end of file diff --git a/rustdocs/signer/macro.uniffi_reexport_scaffolding.html b/rustdocs/signer/macro.uniffi_reexport_scaffolding.html new file mode 100644 index 0000000000..92c52e4b8c --- /dev/null +++ b/rustdocs/signer/macro.uniffi_reexport_scaffolding.html @@ -0,0 +1,3 @@ +uniffi_reexport_scaffolding in signer - Rust
macro_rules! uniffi_reexport_scaffolding {
+    () => { ... };
+}
\ No newline at end of file diff --git a/rustdocs/signer/sidebar-items.js b/rustdocs/signer/sidebar-items.js new file mode 100644 index 0000000000..2ca2410b44 --- /dev/null +++ b/rustdocs/signer/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["ErrorDisplayed","QrSequenceDecodeError"],"fn":["ffi_signer_efd6_rustbuffer_alloc","ffi_signer_efd6_rustbuffer_free","ffi_signer_efd6_rustbuffer_from_bytes","ffi_signer_efd6_rustbuffer_reserve","signer_destroy_string"],"macro":["uniffi_reexport_scaffolding"]}; \ No newline at end of file diff --git a/rustdocs/src-files.js b/rustdocs/src-files.js new file mode 100644 index 0000000000..77aa2b2925 --- /dev/null +++ b/rustdocs/src-files.js @@ -0,0 +1,18 @@ +var srcIndex = JSON.parse('{\ +"constants":["",[],["lib.rs","test_values.rs"]],\ +"db_handling":["",[],["cold_default.rs","db_transactions.rs","error.rs","helpers.rs","hot_default.rs","identities.rs","interface_signer.rs","lib.rs","manage_history.rs"]],\ +"defaults":["",[],["error.rs","lib.rs"]],\ +"definitions":["",[],["crypto.rs","danger.rs","derivations.rs","dynamic_derivations.rs","error.rs","error_active.rs","error_signer.rs","helpers.rs","history.rs","keyring.rs","lib.rs","metadata.rs","navigation.rs","network_specs.rs","qr_transfers.rs","schema_version.rs","types.rs","users.rs"]],\ +"generate_message":["",[],["error.rs","fetch_metadata.rs","helpers.rs","interpret_specs.rs","lib.rs","load.rs","make_message.rs","parser.rs","remove.rs","show.rs","specs.rs"]],\ +"navigator":["",[],["actions.rs","alerts.rs","error.rs","lib.rs","modals.rs","navstate.rs","screens.rs","states.rs"]],\ +"parser":["",[],["cards.rs","decoding_commons.rs","decoding_older.rs","decoding_sci.rs","decoding_sci_ext.rs","error.rs","lib.rs","method.rs"]],\ +"printing_balance":["",[],["lib.rs"]],\ +"qr_reader_pc":["",[],["lib.rs"]],\ +"qr_reader_phone":["",[],["error.rs","lib.rs","parser.rs","process_payload.rs"]],\ +"qrcode_rtx":["",[],["lib.rs"]],\ +"qrcode_static":["",[],["lib.rs"]],\ +"signer":["",[],["ffi_types.rs","lib.rs"]],\ +"transaction_parsing":["",[],["add_specs.rs","cards.rs","check_signature.rs","derivations.rs","dynamic_derivations.rs","error.rs","helpers.rs","holds.rs","lib.rs","load_metadata.rs","load_types.rs","message.rs","parse_transaction.rs"]],\ +"transaction_signing":["",[],["error.rs","lib.rs","sign_message.rs","sign_transaction.rs"]]\ +}'); +createSrcSidebar(); diff --git a/rustdocs/src/constants/lib.rs.html b/rustdocs/src/constants/lib.rs.html new file mode 100644 index 0000000000..2166b829bf --- /dev/null +++ b/rustdocs/src/constants/lib.rs.html @@ -0,0 +1,399 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+
//! Constants used throughout in [Vault](https://github.com/paritytech/parity-signer)
+//! and Vault-supporting ecosystem.
+//!
+//! Vault uses **cold** database.
+//!
+//! The database used on a non air-gapper device for updates generation is
+//! called **hot** database.
+//!
+//! Cold database is generated during the build, so it gets addressed both on
+//! active and on signer side.
+//!
+//! Cold database contains following trees:
+//!
+//! - [`SPECSTREE`], with network specs in cold database format
+//! - [`VERIFIERS`], with network verifiers, i.e. data on who user trusts to
+//! sign updates for a given network
+//! - [`METATREE`], with network metadata
+//! - [`ADDRTREE`], with user addresses public information
+//! - [`SETTREE`], containing general verifier, types information, and Vault
+//! danger status
+//! - [`TRANSACTION`], used to store temporarily transaction data while the
+//! user accepts or declines it
+//! - [`HISTORY`], with history log
+//!
+//! Hot database contains following trees:
+//!
+//! - [`SPECSTREEPREP`], with network specs in hot database format
+//! - [`METATREE`], with network metadata, at most two versions for each network
+//! - [`META_HISTORY`], with block hash at which the metadata was fetched
+//! - [`ADDRESS_BOOK`], with network information needed to make RPC calls
+//! - [`SETTREE`], containing types information
+//!
+//! Common constants are:
+//!
+//! - tree names in cold database alone or shared between cold and hot databases
+//! - key names in [`SPECSTREE`] tree of cold database alone or shared between
+//! cold and hot databases
+//! - recurring throughout the Vault seed phrase for Alice
+//! - QR graphic settings, used for both static and animated PNG QR codes
+//!
+//! # Features
+//! Feature `"signer"` corresponds to everything related exclusively to Vault
+//! air-gapped device. It includes:
+//!
+//! - keys for [`TRANSACTION`] tree, used for temporary storage for various
+//! kinds of transactions while they are shown to user for approval
+//! - display settings for history log and word guesser
+//!
+//! Feature `"active"` corresponds to all Vault-related things happening
+//! exclusively **without** air-gap. It includes:
+//!
+//! - default database addresses for hot database and cold release database
+//! - hot database specific tree names
+//! - default color settings for network specs
+//! - default files and folders name fragments, for use with `generate_message`
+//! - fountain qr generation parameters (large apng fountain qr codes are
+//! generated only on the hot side)
+//!
+//! Feature `"test"` includes all `"signer"` and `"active"` contents, and some
+//! recurring data for integration testing, such as known identicons and known
+//! export QR codes.
+
+#![deny(rustdoc::broken_intra_doc_links)]
+
+pub mod test_values;
+
+/// Default folder for cold database generated during the Vault build
+pub const COLD_DB_NAME_RELEASE: &str = "../database/database_cold_release";
+
+/// Tree name for the tree storing the network specs in cold database
+pub const SPECSTREE: &[u8] = b"chainspecs";
+
+/// Tree name for the tree storing the network verifiers information in cold
+/// database
+pub const VERIFIERS: &[u8] = b"verifiers";
+
+/// Tree name for the tree storing the network metadata in cold and in hot
+/// databases
+pub const METATREE: &[u8] = b"metadata";
+
+/// Tree name for the tree storing user addresses associated public
+/// information in cold database
+pub const ADDRTREE: &[u8] = b"addresses";
+
+/// Tree name for the tree storing database settings
+///
+/// In cold database, the settings tree contains general verifier, types
+/// information, Vault danger status.
+///
+/// In hot database, the settings tree contains types information.
+pub const SETTREE: &[u8] = b"settings";
+
+/// Tree name for the tree temporarily storing transaction entries
+pub const TRANSACTION: &[u8] = b"transaction";
+
+/// Tree name for the tree storing Vault history
+pub const HISTORY: &[u8] = b"history";
+
+/// Key in settings tree [`SETTREE`] for encoded types information
+pub const TYPES: &[u8] = b"types";
+
+/// Key in settings tree [`SETTREE`] for general verifier information
+pub const GENERALVERIFIER: &[u8] = b"general_verifier";
+
+/// Key in settings tree [`SETTREE`] for Vault danger status
+pub const DANGER: &[u8] = b"dangerous_encounter";
+
+/// Key in settings tree [`SETTREE`] for Vault database schema version
+pub const SCHEMA_VERSION: &[u8] = b"schema_version";
+
+/// Key in transactions tree [`TRANSACTION`] for updates data
+pub const STUB: &[u8] = b"stub";
+
+/// Key in transactions tree [`TRANSACTION`] for signable transactions
+pub const SIGN: &[u8] = b"sign";
+
+/// Key in transactions tree [`TRANSACTION`] for derivations import data
+pub const DRV: &[u8] = b"derivations";
+
+/// Maximum number of words displayed to user based on user input in seed
+/// recovery process
+pub const MAX_WORDS_DISPLAY: usize = 8;
+
+/// Number of entries on log history page
+pub const HISTORY_PAGE_SIZE: usize = 20;
+
+/// Default folder for hot database
+pub const HOT_DB_NAME: &str = "../database/database_hot";
+
+/// Tree name for the tree storing the network specs in hot database
+pub const SPECSTREEPREP: &[u8] = b"chainspecs_prep";
+
+/// Tree name for the tree storing the network block hash at the time of
+/// metadata fetch, in hot database
+pub const META_HISTORY: &[u8] = b"metadata_history";
+
+/// Tree name for the tree storing the address book in hot database, with data
+/// necessary for RPC calls
+pub const ADDRESS_BOOK: &[u8] = b"address_book";
+
+/// Default `color` to be used in generating network specs with no color
+/// information provided
+pub const COLOR: &str = "#660D35";
+
+/// Default `secondary_color` to be used in generating network specs with no
+/// color information provided
+pub const SECONDARY_COLOR: &str = "#262626";
+
+/// Folder to save payloads ready for signing, for `generate_message` crate
+pub const FOLDER: &str = "../files/in_progress";
+
+/// Folder to save completed update messages, for `generate_message` crate
+pub const EXPORT_FOLDER: &str = "../files/completed";
+
+/// Alice seed phrase
+pub const ALICE_SEED_PHRASE: &str =
+    "bottom drive obey lake curtain smoke basket hold race lonely fit walk";
+
+/// Data chunk size for fountain QR code generation
+pub const CHUNK_SIZE: u16 = 1072;
+
+/// Main color for QR codes (both static and animated ones)
+pub const MAIN_COLOR: [u8; 3] = [0x00, 0x00, 0x00];
+
+/// Main color for **dangerous** QR codes (static only, in Vault)
+pub const MAIN_COLOR_DANGER: [u8; 3] = [0xe6, 0x00, 0x7a];
+
+/// Background color for QR codes (both static and animated ones)
+pub const BACK_COLOR: [u8; 3] = [0xff, 0xff, 0xff];
+
+/// Color palette for QR codes (both static and animated ones)
+pub fn qr_palette() -> Vec<u8> {
+    [MAIN_COLOR.to_vec(), BACK_COLOR.to_vec()].concat()
+}
+
+/// Color palette for **dangerous** QR codes (static only, in Vault)
+pub fn qr_palette_danger() -> Vec<u8> {
+    [MAIN_COLOR_DANGER.to_vec(), BACK_COLOR.to_vec()].concat()
+}
+
+/// Scaling factor for QR codes (size of QR code dot, in pixels)
+pub const SCALING: i32 = 4;
+
+/// Numerator of the fraction of time (in seconds) for which the frame in the
+/// animated QR code is displayed
+pub const FPS_NOM: u16 = 1;
+
+/// Denominator of the fraction of time (in seconds) for which the frame in the
+/// animated QR code is displayed
+pub const FPS_DEN: u16 = 15;
+
+/// Width of the QR code border, in QR code dots
+pub const BORDER: i32 = 4;
+
+/// Current database schema version
+pub const LIVE_SCHEMA_VERSION: u32 = 1;
+
+/// Feature flag to disable dynamic derivations
+pub const ENABLE_DYNAMIC_DERIVATIONS: bool = true;
+
\ No newline at end of file diff --git a/rustdocs/src/constants/test_values.rs.html b/rustdocs/src/constants/test_values.rs.html new file mode 100644 index 0000000000..42d8f89914 --- /dev/null +++ b/rustdocs/src/constants/test_values.rs.html @@ -0,0 +1,319 @@ +test_values.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+
//! Hexadecimal strings with identicons and qr codes data, as encountered in
+//! test jsons throughout the workspace
+
+/// Empty `30x30` transparent PNG image,
+/// used in cases when identicon generation failed or public key does not exist
+pub fn empty_png() -> Vec<u8> {
+    vec![]
+}
+
+/// Identicon for Alice root key, `Sr25519` encryption
+pub fn alice_sr_root() -> Vec<u8> {
+    hex::decode("46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//0`, `Sr25519` encryption
+pub fn alice_sr_0() -> Vec<u8> {
+    hex::decode("2afba9278e30ccf6a6ceb3a8b6e336b70068f045c666f2e7f4f9cc5f47db8972").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//1`, `Sr25519` encryption
+pub fn alice_sr_1() -> Vec<u8> {
+    hex::decode("b606fc73f57f03cdb4c932d475ab426043e429cecc2ffff0d2672b0df8398c48").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//Alice`, `Sr25519` encryption
+pub fn alice_sr_alice() -> Vec<u8> {
+    hex::decode("d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//kusama`, `Sr25519` encryption
+pub fn alice_sr_kusama() -> Vec<u8> {
+    hex::decode("64a31235d4bf9b37cfed3afa8aa60754675f9c4915430454d365c05112784d05").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//polkadot`, `Sr25519` encryption
+pub fn alice_sr_polkadot() -> Vec<u8> {
+    hex::decode("f606519cb8726753885cd4d0f518804a69a5e0badf36fee70feadd8044081730").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//westend`, `Sr25519` encryption
+pub fn alice_sr_westend() -> Vec<u8> {
+    hex::decode("3efeca331d646d8a2986374bb3bb8d6e9e3cfcdd7c45c2b69104fab5d61d3f34").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//westend//0`, `Sr25519` encryption
+pub fn alice_sr_westend_0() -> Vec<u8> {
+    hex::decode("e655361d12f3ccca5f128187cf3f5eea052be722746e392c8b498d0d18723470").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//secret///abracadabra`, `Sr25519`
+/// encryption
+pub fn alice_sr_secret_abracadabra() -> Vec<u8> {
+    hex::decode("76b68c7ad0e084b37d6a0c8c92d792f6041da5e7ff0c6c3d4a2d6b97772ad46e").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//secret//path///multipass`, `Sr25519`
+/// encryption
+pub fn alice_sr_secret_path_multipass() -> Vec<u8> {
+    hex::decode("e83f1549880f33524079201c5c7aed839f56c73adb2f61d9b271ae2d692dfe2c").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//Alice/secret//secret`, `Sr25519`
+/// encryption
+pub fn alice_sr_alice_secret_secret() -> Vec<u8> {
+    hex::decode("8266a693d6872d2b6437215c198ee25cabf2e4256df9ad00e979e84b00b5235e").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//Alice/westend`, `Sr25519`
+/// encryption
+pub fn alice_sr_alice_westend() -> Vec<u8> {
+    hex::decode("9cd20feb68e0535a6c1cdeead4601b652cf6af6d76baf370df26ee25adde0805").unwrap()
+}
+
+/// Identicon for `kusama9130` metadata hash
+pub fn kusama_9130() -> Vec<u8> {
+    hex::decode("88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee").unwrap()
+}
+
+/// Identicon for `kusama9151` metadata hash
+pub fn kusama_9151() -> Vec<u8> {
+    hex::decode("88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee").unwrap()
+}
+
+/// Identicon for `westend9000` metadata hash
+pub fn westend_9000() -> Vec<u8> {
+    hex::decode("e80237ad8b2e92b72fcf6beb8f0e4ba4a21043a7115c844d91d6c4f981e469ce").unwrap()
+}
+
+/// Identicon for `westend9010` metadata hash
+pub fn westend_9010() -> Vec<u8> {
+    hex::decode("70c99738c27fb32c87883f1c9c94ee454bf0b3d88e4a431a2bbfe1222b46ebdf").unwrap()
+}
+
+/// Identicon for `westend9070` metadata hash
+pub fn westend_9070() -> Vec<u8> {
+    hex::decode("e281fbc53168a6b87d1ea212923811f4c083e7be7d18df4b8527b9532e5f5fec").unwrap()
+}
+
+/// Identicon for `westend9111` metadata hash
+pub fn westend_9111() -> Vec<u8> {
+    hex::decode("207956815bc7b3234fa8827ef40df5fd2879e93f18a680e22bc6801bca27312d").unwrap()
+}
+
+/// Identicon for `westend9122` metadata hash
+pub fn westend_9122() -> Vec<u8> {
+    hex::decode("d656951f4c58c9fdbe029be33b02a7095abc3007586656be7ff68fd0550d6ced").unwrap()
+}
+
+/// Identicon for `dock31` metadata hash
+pub fn dock_31() -> Vec<u8> {
+    hex::decode("28c25067d5c0c739f64f7779c5f3095ecf57d9075b0c5258f3be2df6d7f323d0").unwrap()
+}
+
+/// Identicon for `shell200` metadata hash
+pub fn shell_200() -> Vec<u8> {
+    hex::decode("65f0d394de10396c6c1800092f9a95c48ec1365d9302dbf5df736c5e0c54fde3").unwrap()
+}
+
+/// Identicon for test address `id_01`
+pub fn id_01() -> Vec<u8> {
+    hex::decode("aebb0211dbb07b4d335a657257b8ac5e53794c901e4f616d4a254f2490c43934").unwrap()
+}
+/// Identicon for test address `id_02`
+pub fn id_02() -> Vec<u8> {
+    hex::decode("9ae581fef1fc06828723715731adcf810e42ce4dadad629b1b7fa5c3c144a81d").unwrap()
+}
+/// Identicon for test address `id_04`
+pub fn id_04() -> Vec<u8> {
+    hex::decode("08264834504a64ace1373f0c8ed5d57381ddf54a2f67a318fa42b1352681606d").unwrap()
+}
+/// Identicon for test address `id_05`
+pub fn id_05() -> Vec<u8> {
+    hex::decode("dc621b10081b4b51335553ef8df227feb0327649d00beab6e09c10a1dce97359").unwrap()
+}
+
+/// Identicon for hash of types information
+pub fn types_known() -> Vec<u8> {
+    hex::decode("d091a5a24a97e18dfe298b167d8fd5a2add10098c8792cba21c39029a9ee0aeb").unwrap()
+}
+
+/// Identicon for hash of unknown to the database types information
+pub fn types_unknown() -> Vec<u8> {
+    hex::decode("d2c5b096be10229ce9ea9d219325c4399875b52ceb4264add89b0d7c5e9ad574").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//Bob`, aka Bob, `Sr25519` encryption
+pub fn bob() -> Vec<u8> {
+    hex::decode("8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48").unwrap()
+}
+
+/// Identicon for Alice key with derivation `//Alice`, `Ed25519` encryption
+pub fn ed() -> Vec<u8> {
+    hex::decode("88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee").unwrap()
+}
+
+/// Export qr code for root Alice secret in westend network
+pub fn alice_westend_secret_qr() -> Vec<u8> {
+    hex::decode("88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee").unwrap()
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/cold_default.rs.html b/rustdocs/src/db_handling/cold_default.rs.html new file mode 100644 index 0000000000..043608cda9 --- /dev/null +++ b/rustdocs/src/db_handling/cold_default.rs.html @@ -0,0 +1,611 @@ +cold_default.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+
//! Making and restoring **cold** database with default content
+//!
+//! Cold database is the database that is operated from inside the Vault.
+//!
+//! Cold database contains following trees:
+//!
+//! - `ADDRTREE` with public addresses data
+//! - `HISTORY` with Vault history log
+//! - `METATREE` with network metadata
+//! - `SETTREE` with settings: types information, Vault dangerous exposures
+//! record and Vault database general verifier
+//! - `SPECSTREE` with network specs
+//! - `TRANSACTION` for temporary storage of the transaction data
+//! - `VERIFIERS` with network verifiers data
+//!
+//! For release, the cold database is generated on the hot side and then copied
+//! verbatim into Vault files during the build.
+//!
+//! Before the database could be used, it must be initiated:
+//!
+//! - History log old entries (if any are present) are removed and a new entry
+//! `Event::DatabaseInitiated` is added
+//! - General verifier is set and this event is recorded in the history log. By
+//! default, Vault sets up Parity-associated key as a general verifier. This
+//! could be later on changed by the user.
+//!
+//! Vault then reads and updates the database as it operates.
+//!
+//! There are two ways to reset the database from the Vault user interface.
+//! Either would remove all the keys and restore the database to the release
+//! state. The difference would be only in the general verifier setting:
+//!
+//! - `Wipe all data` would set the general verifier to default `Some(_)`,
+//! with Parity-associated key inside
+//! - `Remove general certificate` would set the general verifier to `None`.
+//! User would then be able to set up own general verifier, preferably
+//! immediately afterwards, by loading to Vault any verified data.
+//! Setting up a new general verifier would remove all data associated with the
+//! general verifier from the Vault database to avoid confusion as to who
+//! verified what information.
+#[cfg(feature = "active")]
+use parity_scale_codec::Encode;
+#[cfg(feature = "active")]
+use sled::Batch;
+
+use constants::SCHEMA_VERSION;
+#[cfg(feature = "active")]
+use constants::{DANGER, TYPES};
+#[cfg(feature = "active")]
+use constants::{GENERALVERIFIER, HISTORY};
+
+#[cfg(feature = "active")]
+use definitions::{
+    danger::DangerRecord,
+    keyring::{MetaKey, NetworkSpecsKey},
+};
+#[cfg(feature = "active")]
+use definitions::{history::Event, network_specs::Verifier};
+
+use defaults::default_general_verifier;
+#[cfg(feature = "active")]
+use defaults::{default_chainspecs, default_types_content, default_verifiers, release_metadata};
+use defaults::{nav_test_metadata, test_metadata};
+use definitions::schema_version::SchemaVersion;
+
+use crate::identities::generate_test_identities;
+#[cfg(feature = "active")]
+use crate::{
+    db_transactions::TrDbCold, helpers::make_batch_clear_tree, manage_history::events_in_batch,
+};
+
+use crate::Result;
+
+/// Cold database generation purpose, determining the metadata to be loaded.
+///
+/// Default metadata is loaded into the cold database for default networks:
+/// Polkadot, Kusama, Westend. `Purpose` determines the metadata source folder
+/// and the versions to be loaded.
+#[cfg(feature = "active")]
+enum Purpose {
+    /// Two (or fewer) latest released versions of the metadata for each of the
+    /// default networks
+    Release,
+
+    /// Old metadata set, used mostly in `transaction_parsing` tests
+    Test,
+
+    /// Not so old metadata set, used for `navigator` tests
+    TestNavigator,
+}
+
+/// Make [`Batch`] with default networks metadata, for [`METATREE`] tree, in
+/// purged database.
+///
+/// Adds default metadata entries, according to [`Purpose`].
+#[cfg(feature = "active")]
+fn default_cold_metadata(purpose: Purpose) -> Result<Batch> {
+    let mut batch = Batch::default();
+    let metadata_set = match purpose {
+        Purpose::Release => release_metadata()?,
+
+        Purpose::Test => test_metadata()?,
+
+        Purpose::TestNavigator => nav_test_metadata()?,
+    };
+    for x in metadata_set.iter() {
+        let meta_key = MetaKey::from_parts(&x.name, x.version);
+        batch.insert(meta_key.key(), &x.meta[..]);
+    }
+    Ok(batch)
+}
+
+/// Make [`Batch`] with default networks
+/// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs), for
+/// [`SPECSTREE`] tree, in purged database.
+///
+/// Adds default network specs entries.
+#[cfg(feature = "active")]
+fn default_cold_network_specs() -> Batch {
+    let mut batch = Batch::default();
+    for x in default_chainspecs().iter() {
+        let network_specs_key =
+            NetworkSpecsKey::from_parts(&x.specs.genesis_hash, &x.specs.encryption);
+        batch.insert(network_specs_key.key(), x.encode());
+    }
+    batch
+}
+
+/// Make [`Batch`] with default settings, for [`SETTREE`] tree, in purged
+/// database.
+///
+/// Adds default entries: types information
+/// [`ContentLoadTypes`](definitions::qr_transfers::ContentLoadTypes) and danger
+/// record [`DangerRecord`].
+///
+/// Note that the general verifier is **not** set up here.
+///
+/// General verifier is set up separately, during the database initiation
+/// [`init_db`]. Without general verifier (i.e. a value in the [`SETTREE`] tree
+/// under the key [`GENERALVERIFIER`]) the database is not usable by the Vault.
+#[cfg(feature = "active")]
+fn default_cold_settings_init_later() -> Result<Batch> {
+    let mut batch = Batch::default();
+    let types_prep = default_types_content()?;
+    batch.insert(TYPES, types_prep.store());
+    batch.insert(DANGER, DangerRecord::safe().store());
+    batch.insert(SCHEMA_VERSION, SchemaVersion::store_current());
+    Ok(batch)
+}
+
+/// Make [`Batch`] with default networks verifiers, for [`VERIFIERS`] tree, in
+/// purged database.
+///
+/// Adds default
+/// [`CurrentVerifier`](definitions::network_specs::CurrentVerifier) entries.
+#[cfg(feature = "active")]
+fn default_cold_verifiers() -> Batch {
+    let mut batch = Batch::default();
+    for (verifier_key, current_verifier) in default_verifiers().iter() {
+        batch.insert(verifier_key.key(), current_verifier.encode());
+    }
+    batch
+}
+
+/// Make or restore the cold database with default content, according to
+/// [`Purpose`].
+///
+/// Function wipes everything in the database directory and loads into database
+/// defaults for:
+///
+/// - metadata
+/// - network specs
+/// - types information and danger status
+/// - network verifiers
+///
+/// Note that the resulting database is not initiated and is not ready to be
+/// used by the Vault.
+#[cfg(any(feature = "active", feature = "test"))]
+fn cold_database_no_init(database: &sled::Db, purpose: Purpose) -> Result<()> {
+    use constants::{METATREE, SETTREE, SPECSTREE, VERIFIERS};
+
+    database.drop_tree(SPECSTREE)?;
+    database.drop_tree(VERIFIERS)?;
+    database.drop_tree(METATREE)?;
+    database.drop_tree(SETTREE)?;
+    database.clear()?;
+
+    TrDbCold::new()
+        .set_metadata(default_cold_metadata(purpose)?) // set default metadata
+        .set_network_specs(default_cold_network_specs()) // set default network specs
+        .set_settings(default_cold_settings_init_later()?) // set default types and danger status, no general verifier yet
+        .set_verifiers(default_cold_verifiers()) // set default verifiers
+        .apply(database)?;
+
+    Ok(())
+}
+
+/// Initiate cold database and set up the database general verifier to given
+/// [`Verifier`].
+///
+/// Function simultaneously sets up the general verifier and marks the new start
+/// of the history log.
+///
+/// Could be used both from the Vault side (with `Wipe all data` and with
+/// `Remove general certificate` procedures) and from the active side, when
+/// when preparing the test databases.
+///
+/// After applying this function the database becomes ready to be used by the
+/// Vault.
+pub fn init_db(database: &sled::Db, general_verifier: Verifier) -> Result<()> {
+    let mut settings_batch = Batch::default();
+    settings_batch.insert(GENERALVERIFIER, general_verifier.encode());
+
+    let clear_history_batch = make_batch_clear_tree(database, HISTORY)?;
+    let events = vec![
+        Event::DatabaseInitiated,
+        Event::GeneralVerifierSet {
+            verifier: general_verifier,
+        },
+    ];
+    let start_zero = true;
+    let history_batch = events_in_batch(database, start_zero, clear_history_batch, events)?;
+
+    TrDbCold::new()
+        .set_history(history_batch) // set *start* history
+        .set_settings(settings_batch) // set general_verifier
+        .apply(database)?;
+
+    Ok(())
+}
+
+/// Initiate Vault database with default general verifier (Parity-associated
+/// key).
+///
+/// Function is applied during the initial start of the Vault and during
+/// `Wipe all data` procedure.
+pub fn signer_init_with_cert(database: &sled::Db) -> Result<()> {
+    init_db(database, default_general_verifier())
+}
+
+/// Initiate Vault database with general verifier set up to `Verifier(None)`.
+///
+/// Function is applied during `Remove general certificate` procedure.
+pub fn signer_init_no_cert(database: &sled::Db) -> Result<()> {
+    init_db(database, Verifier { v: None })
+}
+
+/// Generate initiated test cold database with no network-associated data.
+///
+/// Function wipes everything in the database directory and loads into database
+/// defaults for types information and danger status. Then the database is
+/// initiated with given general verifier.
+pub fn populate_cold_no_networks(database: &sled::Db, general_verifier: Verifier) -> Result<()> {
+    database.clear()?;
+    TrDbCold::new()
+        .set_settings(default_cold_settings_init_later()?) // set general verifier and load default types
+        .apply(database)?;
+    init_db(database, general_verifier)
+}
+
+/// Generate initiated test cold database without network metadata.
+///
+/// Function wipes everything in the database directory and loads into database
+/// defaults for:
+///
+/// - network specs
+/// - types information and danger status
+/// - network verifiers
+///
+/// Then the database is initiated with given general verifier.
+pub fn populate_cold_no_metadata(database: &sled::Db, general_verifier: Verifier) -> Result<()> {
+    use constants::{METATREE, SETTREE, SPECSTREE, VERIFIERS};
+
+    database.drop_tree(SPECSTREE)?;
+    database.drop_tree(VERIFIERS)?;
+    database.drop_tree(METATREE)?;
+    database.drop_tree(SETTREE)?;
+    database.clear()?;
+
+    TrDbCold::new()
+        .set_network_specs(default_cold_network_specs()) // set default network specs
+        .set_settings(default_cold_settings_init_later()?) // set general verifier and load default types
+        .set_verifiers(default_cold_verifiers()) // set default verifiers
+        .apply(database)?;
+    init_db(database, general_verifier)
+}
+
+/// Generate initiated test cold database with default content, and create in it
+/// Alice default addresses.
+pub fn populate_cold(database: &sled::Db, general_verifier: Verifier) -> Result<()> {
+    cold_database_no_init(database, Purpose::Test)?;
+    init_db(database, general_verifier)?;
+    generate_test_identities(database)
+}
+
+/// Generate **not initiated** release cold database.
+#[cfg(feature = "active")]
+pub(crate) fn populate_cold_release(database: &sled::Db) -> Result<()> {
+    cold_database_no_init(database, Purpose::Release)
+}
+
+/// Generate **not initiated** test cold database for `navigator` testing.
+pub fn populate_cold_nav_test(database: &sled::Db) -> Result<()> {
+    cold_database_no_init(database, Purpose::TestNavigator)
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/db_transactions.rs.html b/rustdocs/src/db_handling/db_transactions.rs.html new file mode 100644 index 0000000000..83162d44ed --- /dev/null +++ b/rustdocs/src/db_handling/db_transactions.rs.html @@ -0,0 +1,1963 @@ +db_transactions.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+
//! Atomic transactions in cold and hot databases
+//!
+//! Additions and removals of entries in cold and hot database occur through
+//! atomic [transactions](sled::transaction).
+//! Each tree gets updated with its own [`Batch`], updates occur within a single
+//! transaction.
+//!
+//! For transactions scanned into Vault, currently a temporary database entry
+//! is made to store transaction details while they are displayed to user.
+
+// TODO this is a temporary solution, the data eventually could be stored in
+// `navigator` state.
+use parity_scale_codec::{Decode, Encode};
+use sled::{transaction::TransactionResult, Batch, Transactional};
+use sp_runtime::MultiSigner;
+
+#[cfg(feature = "active")]
+use constants::{ADDRESS_BOOK, META_HISTORY, SPECSTREEPREP};
+use constants::{ADDRTREE, HISTORY, METATREE, SETTREE, SPECSTREE, TRANSACTION, VERIFIERS};
+use constants::{GENERALVERIFIER, SIGN, STUB, TYPES};
+
+use definitions::{
+    history::{
+        Event, MetaValuesDisplay, NetworkSpecsDisplay, NetworkVerifierDisplay, SignDisplay,
+        SignMessageDisplay, TypesDisplay,
+    },
+    keyring::{MetaKey, NetworkSpecsKey, VerifierKey},
+    metadata::MetaValues,
+    network_specs::{
+        CurrentVerifier, NetworkSpecs, OrderedNetworkSpecs, ValidCurrentVerifier, Verifier,
+        VerifierValue,
+    },
+    qr_transfers::ContentLoadTypes,
+};
+
+use crate::helpers::open_tree;
+use crate::Error;
+use crate::Result;
+use crate::{
+    helpers::{make_batch_clear_tree, verify_checksum},
+    manage_history::events_to_batch,
+};
+
+/// Cold database transaction data containing [`Batch`] elements that will be
+/// applied to each [`Tree`](sled::Tree).
+///
+/// Cold database tree names and content information could be found in
+/// [`constants`] crate. All trees are routinely updated as Vault is used.
+///
+/// [`TrDbCold`] is applied to the cold database in an atomic transaction.
+///
+/// [`TrDbCold`] is used both by the Vault side (for all database-related
+/// actions) and the active side (to generate and populate the cold database).
+///
+/// Note that all the checking is done as the [`TrDbCold`] is generated,
+/// `apply` method does not do any checks on its own.
+#[derive(Debug)]
+pub struct TrDbCold {
+    /// `Batch` to be applied to [`ADDRTREE`] tree
+    for_addresses: Batch,
+
+    /// `Batch` to be applied to [`HISTORY`] tree
+    for_history: Batch,
+
+    /// `Batch` to be applied to [`METATREE`] tree
+    for_metadata: Batch,
+
+    /// `Batch` to be applied to [`SPECSTREE`] tree
+    for_network_specs: Batch,
+
+    /// `Batch` to be applied to [`SETTREE`] tree
+    for_settings: Batch,
+
+    /// `Batch` to be applied to [`TRANSACTION`] tree
+    for_transaction: Batch,
+
+    /// `Batch` to be applied to [`VERIFIERS`] tree
+    for_verifiers: Batch,
+}
+
+impl TrDbCold {
+    /// Construct new empty [`TrDbCold`].
+    pub fn new() -> Self {
+        Self {
+            for_addresses: Batch::default(),
+            for_history: Batch::default(),
+            for_metadata: Batch::default(),
+            for_network_specs: Batch::default(),
+            for_settings: Batch::default(),
+            for_transaction: Batch::default(),
+            for_verifiers: Batch::default(),
+        }
+    }
+
+    /// Set `for_addresses` field in [`TrDbCold`] with `Batch` that will be
+    /// applied to [`ADDRTREE`] tree.
+    pub fn set_addresses(mut self, for_addresses: Batch) -> Self {
+        self.for_addresses = for_addresses;
+        self
+    }
+
+    /// Set `for_history` field in [`TrDbCold`] with `Batch` that will be
+    /// applied to [`HISTORY`] tree.
+    pub fn set_history(mut self, for_history: Batch) -> Self {
+        self.for_history = for_history;
+        self
+    }
+
+    /// Set `for_metadata` field in [`TrDbCold`] with `Batch` that will be
+    /// applied to [`METATREE`] tree.
+    pub fn set_metadata(mut self, for_metadata: Batch) -> Self {
+        self.for_metadata = for_metadata;
+        self
+    }
+
+    /// Set `for_network_specs` field in [`TrDbCold`] with `Batch` that will be
+    /// applied to [`SPECSTREE`] tree.
+    pub fn set_network_specs(mut self, for_network_specs: Batch) -> Self {
+        self.for_network_specs = for_network_specs;
+        self
+    }
+
+    /// Set `for_settings` field in [`TrDbCold`] with `Batch` that will be
+    /// applied to [`SETTREE`] tree.
+    pub fn set_settings(mut self, for_settings: Batch) -> Self {
+        self.for_settings = for_settings;
+        self
+    }
+
+    /// Set `for_transaction` field in [`TrDbCold`] with `Batch` that will be
+    /// applied to [`TRANSACTION`] tree.
+    pub fn set_transaction(mut self, for_transaction: Batch) -> Self {
+        self.for_transaction = for_transaction;
+        self
+    }
+
+    /// Set `for_verifiers` field in [`TrDbCold`] with `Batch` that will be
+    /// applied to [`VERIFIERS`] tree.
+    pub fn set_verifiers(mut self, for_verifiers: Batch) -> Self {
+        self.for_verifiers = for_verifiers;
+        self
+    }
+
+    /// Apply constructed set of batches within [`TrDbCold`] to the database
+    /// with a given name, in a single transaction.
+    ///
+    /// Note that both `ErrorSource` variants are available.
+    pub fn apply(&self, database: &sled::Db) -> Result<()> {
+        let addresses = open_tree(database, ADDRTREE)?;
+        let history = open_tree(database, HISTORY)?;
+        let metadata = open_tree(database, METATREE)?;
+        let network_specs = open_tree(database, SPECSTREE)?;
+        let settings = open_tree(database, SETTREE)?;
+        let transaction = open_tree(database, TRANSACTION)?;
+        let verifiers = open_tree(database, VERIFIERS)?;
+        let s = (
+            &addresses,
+            &history,
+            &metadata,
+            &network_specs,
+            &settings,
+            &transaction,
+            &verifiers,
+        );
+        let res: TransactionResult<(), sled::Error> = s.transaction(
+            |(
+                tx_addresses,
+                tx_history,
+                tx_metadata,
+                tx_network_specs,
+                tx_settings,
+                tx_transaction,
+                tx_verifiers,
+            )| {
+                tx_addresses.apply_batch(&self.for_addresses)?;
+                tx_addresses.flush();
+                tx_history.apply_batch(&self.for_history)?;
+                tx_history.flush();
+                tx_metadata.apply_batch(&self.for_metadata)?;
+                tx_metadata.flush();
+                tx_network_specs.apply_batch(&self.for_network_specs)?;
+                tx_network_specs.flush();
+                tx_settings.apply_batch(&self.for_settings)?;
+                tx_settings.flush();
+                tx_transaction.apply_batch(&self.for_transaction)?;
+                tx_transaction.flush();
+                tx_verifiers.apply_batch(&self.for_verifiers)?;
+                tx_verifiers.flush();
+                Ok(())
+            },
+        );
+
+        Ok(res?)
+    }
+}
+
+impl Default for TrDbCold {
+    /// Default value for [`TrDbCold`]. Empty.
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
+/// Hot database transaction data containing [`Batch`] elements that will be
+/// applied to each [`Tree`](sled::Tree).
+///
+/// Hot database tree names and content information could be found in
+/// [`constants`] crate.
+///
+/// All trees are addressed when the database is generated or restored with
+/// default values. Trees [`ADDRESS_BOOK`], [`METATREE`], and
+/// [`SPECSTREEPREP`] are routinely updated by the database users.
+///
+/// [`TrDbHot`] is applied to the hot database in an atomic transaction and is
+/// used by the active side only.
+///
+/// Note that all the checking is done as the [`TrDbHot`] is generated,
+/// `apply` method does not do any checks on its own.
+#[cfg(feature = "active")]
+#[derive(Debug)]
+pub struct TrDbHot {
+    /// `Batch` to be applied to [`ADDRESS_BOOK`] tree
+    for_address_book: Batch,
+
+    /// `Batch` to be applied to [`METATREE`] tree
+    for_metadata: Batch,
+
+    /// `Batch` to be applied to [`META_HISTORY`] tree
+    for_meta_history: Batch,
+
+    /// `Batch` to be applied to [`SPECSTREEPREP`] tree
+    for_network_specs_prep: Batch,
+
+    /// `Batch` to be applied to [`SETTREE`] tree
+    for_settings: Batch,
+}
+
+#[cfg(feature = "active")]
+impl TrDbHot {
+    /// Construct new empty [`TrDbHot`].
+    pub fn new() -> Self {
+        Self {
+            for_address_book: Batch::default(),
+            for_metadata: Batch::default(),
+            for_meta_history: Batch::default(),
+            for_network_specs_prep: Batch::default(),
+            for_settings: Batch::default(),
+        }
+    }
+
+    /// Set `for_address_book` field in [`TrDbHot`] with `Batch` that will be
+    /// applied to [`ADDRESS_BOOK`] tree.
+    pub fn set_address_book(mut self, for_address_book: Batch) -> Self {
+        self.for_address_book = for_address_book;
+        self
+    }
+
+    /// Set `for_metadata` field in [`TrDbHot`] with `Batch` that will be
+    /// applied to [`METATREE`] tree.
+    pub fn set_metadata(mut self, for_metadata: Batch) -> Self {
+        self.for_metadata = for_metadata;
+        self
+    }
+
+    /// Set `for_meta_history` field in [`TrDbHot`] with `Batch` that will be
+    /// applied to [`META_HISTORY`] tree.
+    pub fn set_meta_history(mut self, for_meta_history: Batch) -> Self {
+        self.for_meta_history = for_meta_history;
+        self
+    }
+
+    /// Set `for_network_specs_prep` field in [`TrDbHot`] with `Batch` that
+    /// will be applied to [`SPECSTREEPREP`] tree.
+    pub fn set_network_specs_prep(mut self, for_network_specs_prep: Batch) -> Self {
+        self.for_network_specs_prep = for_network_specs_prep;
+        self
+    }
+
+    /// Set `for_settings` field in [`TrDbHot`] with `Batch` that will be
+    /// applied to [`SETTREE`] tree.
+    pub fn set_settings(mut self, for_settings: Batch) -> Self {
+        self.for_settings = for_settings;
+        self
+    }
+
+    /// Apply constructed set of batches within [`TrDbHot`] to the database
+    /// with a given name, in a single transaction.
+    pub fn apply(&self, database: &sled::Db) -> Result<()> {
+        let address_book = open_tree(database, ADDRESS_BOOK)?;
+        let metadata = open_tree(database, METATREE)?;
+        let meta_history = open_tree(database, META_HISTORY)?;
+        let network_specs_prep = open_tree(database, SPECSTREEPREP)?;
+        let settings = open_tree(database, SETTREE)?;
+        let s = (
+            &address_book,
+            &metadata,
+            &meta_history,
+            &network_specs_prep,
+            &settings,
+        );
+
+        let res: TransactionResult<(), sled::Error> = s.transaction(
+            |(
+                tx_address_book,
+                tx_metadata,
+                tx_meta_history,
+                tx_network_specs_prep,
+                tx_settings,
+            )| {
+                tx_address_book.apply_batch(&self.for_address_book)?;
+                tx_address_book.flush();
+                tx_metadata.apply_batch(&self.for_metadata)?;
+                tx_metadata.flush();
+                tx_meta_history.apply_batch(&self.for_meta_history)?;
+                tx_meta_history.flush();
+                tx_network_specs_prep.apply_batch(&self.for_network_specs_prep)?;
+                tx_network_specs_prep.flush();
+                tx_settings.apply_batch(&self.for_settings)?;
+                tx_settings.flush();
+                Ok(())
+            },
+        );
+
+        Ok(res?)
+    }
+}
+
+#[cfg(feature = "active")]
+impl Default for TrDbHot {
+    /// Default value for [`TrDbHot`]. Empty.
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
+/// SCALE-encodeable draft for [`Batch`], that will be a part of database atomic
+/// transaction.
+///
+/// [`Batch`] does not support SCALE-encoding, so [`BatchStub`] is constructed
+/// from a set of keys to be removed from the database and a set of (key, value)
+/// pairs to be added into the database. Keys and values are SCALE-compatible
+/// `Vec<u8>`.
+///
+/// When applying [`BatchStub`], i.e. transforming it into [`Batch`], the
+/// removals are always applied before additions, to avoid accidental replacing
+/// of just added value.
+#[derive(Debug, Decode, Encode)]
+struct BatchStub {
+    /// Vector of keys to be removed from the database.
+    removals: Vec<Vec<u8>>,
+
+    /// Vector of (key, value) pairs to be added into the database.
+    additions: Vec<(Vec<u8>, Vec<u8>)>,
+}
+
+impl BatchStub {
+    /// Generate empty [`BatchStub`].
+    fn empty() -> Self {
+        Self {
+            removals: Vec::new(),
+            additions: Vec::new(),
+        }
+    }
+
+    /// Transform [`BatchStub`] into [`Batch`], removals first.
+    fn make_batch(&self) -> Batch {
+        self.extend_batch(Batch::default())
+    }
+
+    /// Add elements from [`BatchStub`], removals first, in queue after
+    /// instructions already present in input [`Batch`]
+    fn extend_batch(&self, batch: Batch) -> Batch {
+        let mut out = batch;
+        for key in self.removals.iter() {
+            out.remove(&key[..])
+        }
+        for (key, value) in self.additions.iter() {
+            out.insert(&key[..], &value[..])
+        }
+        out
+    }
+
+    /// Add a new addition element into [`BatchStub`] `additions` queue.
+    fn new_addition(mut self, key: Vec<u8>, value: Vec<u8>) -> Self {
+        self.additions.push((key, value));
+        self
+    }
+
+    /// Add a new removal element into [`BatchStub`] `removals` queue.
+    fn new_removal(mut self, key: Vec<u8>) -> Self {
+        self.removals.push(key);
+        self
+    }
+}
+
+/// Draft for cold database atomic transaction, constructed for Vault update
+/// transaction (`add_specs`, `load_metadata`, `load_types`).
+///
+/// [`TrDbColdStub`] is stored SCALE-encoded in [`TRANSACTION`] tree
+/// of the cold database under key [`STUB`] while the update is considered by
+/// the user. Draft is applied atomically to the cold database if the update is
+/// accepted.
+///
+/// Accepting an update could result in adding or removing database data.
+///
+/// [`TrDbColdStub`] contains [`Event`] set for [`HISTORY`] tree update and
+/// `BatchStub` update drafts with corresponding removals and additions for
+/// database trees:
+///
+/// - [`ADDRTREE`]
+/// - [`METATREE`]
+/// - [`SPECSTREE`]
+/// - [`SETTREE`]
+/// - [`VERIFIERS`]
+///
+/// Note that all the checking is done before the [`TrDbColdStub`] is written
+/// into [`TRANSACTION`] tree, `apply` method will check only that the checksum
+/// known to the user is the same as the one database has currently.
+#[derive(Debug, Decode, Encode)]
+pub struct TrDbColdStub {
+    /// `BatchStub` to be transformed into `Batch` for [`ADDRTREE`] tree.
+    addresses_stub: BatchStub,
+
+    /// `Vec<Event>` to be entered into [`HISTORY`] tree, the
+    /// [`Entry`](definitions::history::Entry) with a timestamp is generated
+    /// only when the payload is approved by the user.
+    history_stub: Vec<Event>,
+
+    /// `BatchStub` to be transformed into `Batch` for [`METATREE`] tree.
+    metadata_stub: BatchStub,
+
+    /// `BatchStub` to be transformed into `Batch` for [`SPECSTREE`] tree.
+    network_specs_stub: BatchStub,
+
+    /// `BatchStub` to be transformed into `Batch` for [`SETTREE`] tree.
+    settings_stub: BatchStub,
+
+    /// `BatchStub` to be transformed into `Batch` for [`VERIFIERS`] tree.
+    verifiers_stub: BatchStub,
+}
+
+impl TrDbColdStub {
+    /// Construct new empty [`TrDbColdStub`].
+    pub fn new() -> Self {
+        Self {
+            addresses_stub: BatchStub::empty(),
+            history_stub: Vec::new(),
+            metadata_stub: BatchStub::empty(),
+            network_specs_stub: BatchStub::empty(),
+            settings_stub: BatchStub::empty(),
+            verifiers_stub: BatchStub::empty(),
+        }
+    }
+
+    /// Recover [`TrDbColdStub`] from storage in the cold database.
+    ///
+    /// Function requires correct checksum to make sure the transaction is
+    /// still the one that was shown to the user previously, and no changes to
+    /// the database have occured after the atomic transaction draft was placed
+    /// into storage.
+    ///
+    /// [`TRANSACTION`] tree is cleared in the process.
+    pub fn from_storage(database: &sled::Db, checksum: u32) -> Result<Self> {
+        let stub_encoded = {
+            verify_checksum(database, checksum)?;
+            let transaction = open_tree(database, TRANSACTION)?;
+            transaction.get(STUB)?.ok_or(Error::Stub)?
+        };
+        TrDbCold::new()
+            .set_transaction(make_batch_clear_tree(database, TRANSACTION)?) // clear transaction tree
+            .apply(database)?;
+        Ok(Self::decode(&mut &stub_encoded[..])?)
+    }
+
+    /// Put SCALE-encoded [`TrDbColdStub`] into storage in the [`TRANSACTION`]
+    /// tree of the cold database under the key [`STUB`].
+    ///
+    /// Function returns `u32` checksum. This checksum is needed to recover
+    /// stored [`TrDbColdStub`] using `from_storage` method.
+    ///
+    /// The [`TRANSACTION`] tree is cleared prior to adding data to storage.
+    pub fn store_and_get_checksum(&self, database: &sled::Db) -> Result<u32> {
+        let mut transaction_batch = make_batch_clear_tree(database, TRANSACTION)?;
+        transaction_batch.insert(STUB, self.encode());
+        TrDbCold::new()
+            .set_transaction(transaction_batch) // clear transaction tree
+            .apply(database)?;
+        Ok(database.checksum()?)
+    }
+
+    /// Add new [`Event`] in `history_stub` field of the [`TrDbColdStub`]
+    pub fn new_history_entry(mut self, event: Event) -> Self {
+        self.history_stub.push(event);
+        self
+    }
+
+    /// Prepare adding the metadata received as `load_metadata` update into the
+    /// cold database:
+    ///
+    /// - Add a (key, value) pair to the metadata additions queue in
+    /// `metadata_stub`. Key is [`MetaKey`] in key form, value is metadata in
+    /// `Vec<u8>` format.
+    /// - Add corresponding `Event::MetadataAdded(_)` into `history_stub`.
+    pub fn add_metadata(mut self, meta_values: &MetaValues) -> Self {
+        let meta_key = MetaKey::from_parts(&meta_values.name, meta_values.version);
+        self.metadata_stub = self
+            .metadata_stub
+            .new_addition(meta_key.key(), meta_values.meta.to_vec());
+        self.history_stub.push(Event::MetadataAdded {
+            meta_values_display: MetaValuesDisplay::get(meta_values),
+        });
+        self
+    }
+
+    /// Prepare removing the metadata from the cold database:
+    ///
+    /// - Add [`MetaKey`] in key form to the metadata removals queue in
+    /// `metadata_stub`.
+    /// - Add corresponding `Event::MetadataRemoved(_)` into `history_stub`.
+    ///
+    /// Function is used for `Hold` and `GeneralHold` processing when,
+    /// respectively, the network verifier or the general verifier is changed.
+    pub fn remove_metadata(mut self, meta_values: &MetaValues) -> Self {
+        let meta_key = MetaKey::from_parts(&meta_values.name, meta_values.version);
+        self.metadata_stub = self.metadata_stub.new_removal(meta_key.key());
+        self.history_stub.push(Event::MetadataRemoved {
+            meta_values_display: MetaValuesDisplay::get(meta_values),
+        });
+        self
+    }
+
+    /// Prepare adding [`OrderedNetworkSpecs`] into the cold database:
+    ///
+    /// - Transform received in `add_specs` payload [`NetworkSpecs`]
+    /// into [`OrderedNetworkSpecs`] by adding `order` field. Networks are always added
+    /// in the end of the network list, with order set to the total number of
+    /// network specs entries currently in Vault. When a network is removed,
+    /// the order of the remaining networks gets rearranged, see details in
+    /// function [`remove_network`](crate::helpers::remove_network).
+    /// - Add a (key, value) pair to the network specs additions queue in
+    /// `network_specs_stub`. Key is [`NetworkSpecsKey`] in key form, value is
+    /// SCALE-encoded [`OrderedNetworkSpecs`].
+    /// - Add corresponding `Event::NetworkSpecsAdded(_)` into `history_stub`.
+    /// - Add root address for the network if the
+    /// [`AddressDetails`](definitions::users::AddressDetails) entry with
+    /// matching [`Encryption`](definitions::crypto::Encryption) already exists,
+    /// i.e. add (key, value) pair to the address additions queue in
+    /// `addresses_stub`. Key is
+    /// [`AddressKey`](definitions::keyring::AddressKey)
+    /// in key form, value is
+    /// SCALE-encoded updated
+    /// [`AddressDetails`](definitions::users::AddressDetails).
+    /// - If address was added, add corresponding `Event::IdentityAdded(_)`
+    /// into `history_stub`.
+    ///
+    /// Note that `add_network_specs` does not deal with network verifiers:
+    /// verifier data is not necessarily updated each time the network
+    /// specs are added.
+    pub fn add_network_specs(
+        mut self,
+        database: &sled::Db,
+        network_specs_to_send: &NetworkSpecs,
+        valid_current_verifier: &ValidCurrentVerifier,
+        general_verifier: &Verifier,
+    ) -> Result<Self> {
+        let network_specs_key = NetworkSpecsKey::from_parts(
+            &network_specs_to_send.genesis_hash,
+            &network_specs_to_send.encryption,
+        );
+        let order = {
+            let chainspecs = open_tree(database, SPECSTREE)?;
+            chainspecs.len()
+        } as u8;
+        let network_specs = network_specs_to_send.to_store(order);
+        self.network_specs_stub = self
+            .network_specs_stub
+            .new_addition(network_specs_key.key(), network_specs.encode());
+        self.history_stub.push(Event::NetworkSpecsAdded {
+            network_specs_display: NetworkSpecsDisplay::get(
+                &network_specs,
+                valid_current_verifier,
+                general_verifier,
+            ),
+        });
+
+        Ok(self)
+    }
+
+    /// Prepare removing [`OrderedNetworkSpecs`] from the cold database:
+    ///
+    /// - Add [`NetworkSpecsKey`] in key form to the network specs removal queue
+    /// in `network_specs_stub`.
+    /// - Add corresponding `Event::NetworkSpecsRemoved(_)` into `history_stub`.
+    ///
+    /// Function is used for `Hold` and `GeneralHold` processing when,
+    /// respectively, the network verifier or the general verifier is changed.
+    ///
+    /// Note that function does not deal with the verifiers nor with the
+    /// addresses.
+    ///
+    /// Verifiers remain unchanged during the hold processing.
+    ///
+    /// The addresses are not removed and will be again visible from the user
+    /// interface when the properly verified network specs are loaded in Vault.
+    pub fn remove_network_specs(
+        mut self,
+        network_specs: &OrderedNetworkSpecs,
+        valid_current_verifier: &ValidCurrentVerifier,
+        general_verifier: &Verifier,
+    ) -> Self {
+        let network_specs_key = NetworkSpecsKey::from_parts(
+            &network_specs.specs.genesis_hash,
+            &network_specs.specs.encryption,
+        );
+        self.network_specs_stub = self.network_specs_stub.new_removal(network_specs_key.key());
+        self.history_stub.push(Event::NetworkSpecsRemoved {
+            network_specs_display: NetworkSpecsDisplay::get(
+                network_specs,
+                valid_current_verifier,
+                general_verifier,
+            ),
+        });
+        self
+    }
+
+    /// Prepare adding new general verifier [`Verifier`] into the cold
+    /// database:
+    ///
+    /// - Add a (key, value) pair to the settings additions queue in
+    /// `settings_stub`. Key is [`GENERALVERIFIER`] and the value is
+    /// SCALE-encoded [`Verifier`] that is set to be the new general verifier.
+    /// - Add corresponding `Event::GeneralVerifierSet(_)` into `history_stub`.
+    pub fn new_general_verifier(mut self, general_verifier: &Verifier) -> Self {
+        self.settings_stub = self
+            .settings_stub
+            .new_addition(GENERALVERIFIER.to_vec(), general_verifier.encode());
+        self.history_stub.push(Event::GeneralVerifierSet {
+            verifier: general_verifier.to_owned(),
+        });
+        self
+    }
+
+    /// Prepare adding types information [`ContentLoadTypes`] received as
+    /// `load_types` update into the cold database:
+    ///
+    /// - Add a (key, value) pair to the settings additions queue in
+    /// `settings_stub`. Key is [`TYPES`] and the value is [`ContentLoadTypes`]
+    /// types information in `store` format (SCALE-encoded).
+    /// - Add corresponding `Event::TypesAdded(_)` into `history_stub`.
+    pub fn add_types(mut self, types: &ContentLoadTypes, general_verifier: &Verifier) -> Self {
+        self.settings_stub = self
+            .settings_stub
+            .new_addition(TYPES.to_vec(), types.store());
+        self.history_stub.push(Event::TypesAdded {
+            types_display: TypesDisplay::get(types, general_verifier),
+        });
+        self
+    }
+
+    /// Prepare removing types information from the cold database:
+    ///
+    /// - Add [`TYPES`] key to the settings removal queue in `settings_stub`.
+    /// - Add corresponding `Event::TypesRemoved(_)` into `history_stub`.
+    ///
+    /// Function is used to process `GeneralHold` when general verifier is
+    /// changed.
+    pub fn remove_types(mut self, types: &ContentLoadTypes, general_verifier: &Verifier) -> Self {
+        self.settings_stub = self.settings_stub.new_removal(TYPES.to_vec());
+        self.history_stub.push(Event::TypesRemoved {
+            types_display: TypesDisplay::get(types, general_verifier),
+        });
+        self
+    }
+
+    /// Prepare adding new network verifier [`ValidCurrentVerifier`] into the
+    /// cold database:
+    ///
+    /// - Add a (key, value) pair to the verifiers additions queue in
+    /// `verifiers_stub`. Key is [`VerifierKey`] and the value is SCALE-encoded
+    /// [`ValidCurrentVerifier`] that is set to be the new verifier for the
+    /// network.
+    /// - Add corresponding `Event::NetworkVerifierSet(_)` into `history_stub`.
+    pub fn new_network_verifier(
+        mut self,
+        verifier_key: &VerifierKey,
+        valid_current_verifier: &ValidCurrentVerifier,
+        general_verifier: &Verifier,
+    ) -> Self {
+        self.verifiers_stub = self.verifiers_stub.new_addition(
+            verifier_key.key(),
+            CurrentVerifier::Valid(valid_current_verifier.to_owned()).encode(),
+        );
+        self.history_stub.push(Event::NetworkVerifierSet {
+            network_verifier_display: NetworkVerifierDisplay::get(
+                verifier_key,
+                valid_current_verifier,
+                general_verifier,
+            ),
+        });
+        self
+    }
+
+    /// Transform [`TrDbColdStub`] into [`TrDbCold`] and apply to the database
+    /// with a given name, in a single transaction.
+    ///
+    /// The [`TRANSACTION`] tree gets cleared in the process.
+    ///
+    /// It is unlikely that this clearing is ever doing anything, as the
+    /// intended use of the [`TrDbColdStub`] is to recover it from the database
+    /// (with clearing the [`TRANSACTION`] tree) and then immediately apply.
+    pub fn apply(self, database: &sled::Db) -> Result<()> {
+        let for_transaction = make_batch_clear_tree(database, TRANSACTION)?;
+        TrDbCold {
+            for_addresses: self.addresses_stub.make_batch(),
+            for_history: events_to_batch(database, self.history_stub)?,
+            for_metadata: self.metadata_stub.make_batch(),
+            for_network_specs: self.network_specs_stub.make_batch(),
+            for_settings: self.settings_stub.make_batch(),
+            for_transaction,
+            for_verifiers: self.verifiers_stub.make_batch(),
+        }
+        .apply(database)
+    }
+}
+
+impl Default for TrDbColdStub {
+    /// Default value for [`TrDbColdStub`]. Empty.
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
+/// Temporary storage for signable transaction and associated data.
+///
+/// Signable transaction received by the Vault must always be parsed prior to
+/// signing, and when it is, [`TrDbColdSign`] is generated and the transaction
+/// details are shown to user.
+///
+/// If the user signs the transaction or tries to sign and enters wrong
+/// password, the transaction data will be recorded in Vault history log.
+///
+/// While the user considers the transaction, [`TrDbColdSign`] is stored
+/// SCALE-encoded in [`TRANSACTION`] tree of the cold database under the key
+/// [`SIGN`].
+///
+/// [`TrDbColdSign`] contains:
+///
+/// - [`SignContent`] with data to sign
+/// - name of the network in which the transaction is made
+/// - derivation path of the address used, whether the address has password,
+/// corresponding [`MultiSigner`] value
+/// - relevant history [`Event`] set: warnings that were shown during the
+/// parsing
+#[derive(Debug, Decode, Default, Encode)]
+pub struct TrDbColdSign {
+    /// Bulk of transactions to sign.
+    pub signing_bulk: Vec<TrDbColdSignOne>,
+}
+
+impl TrDbColdSign {
+    /// Recover [`TrDbColdSign`] from storage in the cold database.
+    ///
+    /// Function requires an optional correct checksum to make sure
+    /// the signable transaction is still the one that was shown to
+    /// the user previously, and no changes to the database have occurred.
+    /// While parsing a bulk no checksum is provided and no checks are done.
+    ///
+    /// [`TRANSACTION`] tree is **not** cleared in the process. User is allowed
+    /// to try entering password several times, for all this time the
+    /// transaction remains in the database.
+    pub fn from_storage(database: &sled::Db, checksum: Option<u32>) -> Result<Option<Self>> {
+        let sign_encoded = {
+            if let Some(checksum) = checksum {
+                verify_checksum(database, checksum)?;
+            }
+            let transaction = open_tree(database, TRANSACTION)?;
+            match transaction.get(SIGN)? {
+                Some(a) => a,
+                None => return Ok(None),
+            }
+        };
+        Ok(Some(Self::decode(&mut &sign_encoded[..])?))
+    }
+
+    /// Put SCALE-encoded [`TrDbColdSign`] into storage in the [`TRANSACTION`]
+    /// tree of the cold database under the key [`SIGN`].
+    ///
+    /// Function returns `u32` checksum. This checksum is needed to recover
+    /// stored [`TrDbColdSign`] using `from_storage` method.
+    ///
+    /// The [`TRANSACTION`] tree is cleared prior to adding data to storage.
+    pub fn store_and_get_checksum(&self, database: &sled::Db) -> Result<u32> {
+        let mut transaction_batch = make_batch_clear_tree(database, TRANSACTION)?;
+        transaction_batch.insert(SIGN, self.encode());
+        TrDbCold::new()
+            .set_transaction(transaction_batch) // clear transaction tree
+            .apply(database)?;
+        Ok(database.checksum()?)
+    }
+
+    /// Use [`TrDbColdSign`] to add history log data into the cold database.
+    ///
+    /// Possible history log entries are:
+    ///
+    /// - `Event::TransactionSigned(_)` and `Event::MessageSigned(_)` for the
+    /// cases when the signature was generated and displayed through the user
+    /// interface
+    /// - `Event::TransactionSignError(_)` and `Event::MessageSignError(_)` for
+    /// the cases when the user has entered the wrong password and no signature
+    /// was generated. Vault current policy is to log all wrong password entry
+    /// attempts.
+    ///
+    /// Required input:
+    ///
+    /// - `wrong_password` flag; for entries with `true` value the signature
+    /// was not generated, because user has entered the wrong password;
+    /// - user-added text comment for the transaction
+    /// - index of the transaction in the bulk
+    /// - database name, into which the data is added
+    ///
+    /// Function returns database checksum, to be collected and re-used in case
+    /// of wrong password entry.
+    pub fn apply(
+        self,
+        database: &sled::Db,
+        wrong_password: bool,
+        user_comment: &str,
+        idx: usize,
+    ) -> Result<u32> {
+        let mut history = vec![];
+        let mut for_transaction = Batch::default();
+        let s = &self.signing_bulk[idx];
+        let signed_by = VerifierValue::Standard { m: s.multisigner() };
+        history.append(&mut s.history.clone());
+        match &s.content {
+            SignContent::Transaction { method, extensions } => {
+                let transaction = [method.encode(), extensions.clone()].concat();
+                let sign_display =
+                    SignDisplay::get(&transaction, &s.network_name, &signed_by, user_comment);
+                if wrong_password {
+                    history.push(Event::TransactionSignError { sign_display })
+                } else {
+                    history.push(Event::TransactionSigned { sign_display });
+                    // if this is the last transaction in the bulk and the password was right,
+                    // all is done and the DB can be cleared.
+                    if idx == self.signing_bulk.len() - 1 {
+                        for_transaction = make_batch_clear_tree(database, TRANSACTION)?;
+                    }
+                }
+            }
+            SignContent::Message(message) => {
+                let sign_message_display =
+                    SignMessageDisplay::get(message, &s.network_name, &signed_by, user_comment);
+                if wrong_password {
+                    history.push(Event::MessageSignError {
+                        sign_message_display,
+                    })
+                } else {
+                    history.push(Event::MessageSigned {
+                        sign_message_display,
+                    });
+                    // if this is the last transaction in the bulk and the password was right,
+                    // all is done and the DB can be cleared.
+                    if idx == self.signing_bulk.len() - 1 {
+                        for_transaction = make_batch_clear_tree(database, TRANSACTION)?;
+                    }
+                }
+            }
+        }
+        TrDbCold::new()
+            .set_history(events_to_batch(database, history)?)
+            .set_transaction(for_transaction)
+            .apply(database)?;
+        Ok(database.checksum()?)
+    }
+}
+
+impl From<TrDbColdSignOne> for TrDbColdSign {
+    fn from(t: TrDbColdSignOne) -> Self {
+        Self {
+            signing_bulk: vec![t],
+        }
+    }
+}
+
+#[derive(Debug, Decode, Encode)]
+pub struct TrDbColdSignOne {
+    /// data to sign
+    content: SignContent,
+
+    /// name of the network in which the transaction is made
+    network_name: String,
+
+    /// derivation path of the address by which the transaction was generated
+    path: String,
+
+    /// is address by which the transaction was generated passworded?
+    has_pwd: bool,
+
+    /// [`MultiSigner`] corresponding to the address by which the transaction
+    /// was generated
+    multisigner: MultiSigner,
+
+    /// [`Event`] set produced during parsing
+    history: Vec<Event>,
+}
+
+/// Signable transaction content
+///
+/// Vault can sign:
+/// - transactions
+/// - messages
+///
+/// Mortal signable transactions have prelude `53xx00`, immortal have prelude
+/// `53xx02`. Signable transactions consist of method with call details and
+/// extensions.
+///
+/// Messages contain SCALE-encoded text messages.
+#[derive(Debug, Decode, Encode, Clone)]
+pub enum SignContent {
+    /// `53xx00` or `53xx02` transaction
+    Transaction {
+        /// method as raw data
+        method: Vec<u8>,
+
+        /// extensions as raw data
+        extensions: Vec<u8>,
+    },
+
+    /// `53xx03` text message
+    Message(String),
+}
+
+impl TrDbColdSignOne {
+    /// Construct [`TrDbColdSign`] from components.
+    ///
+    /// Required input:
+    ///
+    /// - [`SignContent`] with data to sign
+    /// - name of the network in which the transaction is made
+    /// - derivation path of the address used, whether the address has password,
+    /// corresponding [`MultiSigner`] value
+    /// - relevant history [`Event`] set
+    pub fn generate(
+        content: SignContent,
+        network_name: &str,
+        path: &str,
+        has_pwd: bool,
+        multisigner: &MultiSigner,
+        history: Vec<Event>,
+    ) -> Self {
+        Self {
+            content,
+            network_name: network_name.to_string(),
+            path: path.to_string(),
+            has_pwd,
+            multisigner: multisigner.to_owned(),
+            history,
+        }
+    }
+
+    /// Get transaction content.
+    pub fn content(&self) -> &SignContent {
+        &self.content
+    }
+
+    /// Get derivation path.
+    pub fn path(&self) -> String {
+        self.path.to_string()
+    }
+
+    /// Get `has_pwd` flag.
+    pub fn has_pwd(&self) -> bool {
+        self.has_pwd
+    }
+
+    /// Get [`MultiSigner`] value
+    pub fn multisigner(&self) -> MultiSigner {
+        self.multisigner.to_owned()
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/error.rs.html b/rustdocs/src/db_handling/error.rs.html new file mode 100644 index 0000000000..fca723122f --- /dev/null +++ b/rustdocs/src/db_handling/error.rs.html @@ -0,0 +1,791 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+
use std::result;
+
+use definitions::{
+    crypto::Encryption,
+    helpers::multisigner_to_public,
+    keyring::{AddressKey, NetworkSpecsKey, VerifierKey},
+    users::AddressDetails,
+};
+use sp_core::H256;
+use sp_runtime::MultiSigner;
+
+/// DB handling error type.
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error("No networks available")]
+    NoNetworksAvailable,
+
+    #[error(transparent)]
+    DbTransactionError(#[from] sled::transaction::TransactionError),
+
+    #[error(transparent)]
+    Defaults(#[from] defaults::Error),
+
+    #[error(transparent)]
+    Other(#[from] anyhow::Error),
+
+    #[error(transparent)]
+    Codec(#[from] parity_scale_codec::Error),
+
+    #[error(transparent)]
+    TimeFormat(#[from] time::error::Format),
+
+    #[error(transparent)]
+    DefinitionsError(#[from] definitions::error::Error),
+
+    #[error(transparent)]
+    Bip39MnemonicType(#[from] bip39::ErrorKind),
+
+    #[error("Database error. Internal error. {0}")]
+    DbError(#[from] sled::Error),
+
+    #[error("Database schema version mismatch. Expected v{expected}, found v{found}.")]
+    DbSchemaMismatch { expected: u32, found: u32 },
+
+    /// Temporary database entry in `TRANSACTION` tree of the Vault database
+    /// under the key `STUB`, used to store the update data awaiting for the
+    /// user approval.
+    ///
+    /// Missing `Stub` when it is expected always indicates the database
+    /// corruption.
+    #[error(
+        "Unable to decode temporary entry with information \
+        needed for accepting approved information."
+    )]
+    Stub,
+
+    /// Network [`CurrentVerifier`](definitions::network_specs::CurrentVerifier) is
+    /// `ValidCurrentVerifier::Custom(_)`, but the custom verifier value
+    /// coincides with the general verifier.
+    ///
+    /// Associated data is [`VerifierKey`] corresponding to faulty entry.
+    #[error(
+        "Network with genesis hash {} verifier is set as a custom one. \
+        This custom verifier coinsides the database general verifier \
+        and not None. This should not have happened and likely \
+        indicates database corruption.",
+        hex::encode(.0.key()),
+    )]
+    CustomVerifierIsGeneral(VerifierKey),
+
+    /// Network has no entry for
+    /// [`CurrentVerifier`](definitions::network_specs::CurrentVerifier) under
+    /// `verifier_key` in `VERIFIERS` tree of the database, however, the
+    /// corresponding genesis hash is encountered in a
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry under
+    /// `network_specs_key` in `SPECSTREE` tree of the database.
+    /// No network specs record can get into database without the verifier
+    /// entry, and the verifier could not be removed while network specs still
+    /// remain, so this indicates the database got corrupted.
+    #[error(
+        "Network {name} with genesis hash {} has some network specs entries, \
+        while there is no verifier entry.",
+        hex::encode(genesis_hash)
+    )]
+    UnexpectedGenesisHash { name: String, genesis_hash: H256 },
+
+    /// History log [`Entry`](definitions::history::Entry) stored in `HISTORY` tree
+    /// of the Vault database under the key [`Order`]
+    /// could not be decoded.
+    ///
+    /// Associated data is the corresponding [`Order`].
+    ///
+    /// [`Order`]: definitions::keyring::Order
+    #[error("Unable to decode history entry for order {0}")]
+    HistoryEntryNotFound(u32),
+
+    /// Database has two seed addresses (i.e. with empty derivation path and no
+    /// password) for same seed name and [`Encryption`]
+    ///
+    /// This indicates the database corruption, since the encryption method,
+    /// seed name and derivation path strictly determine the public key.
+    #[error(
+        "More than one seed key (i.e. with empty path and without password)
+        found for seed name {seed_name} and encryption {}.",
+        encryption.show(),
+    )]
+    TwoRootKeys {
+        /// seed name
+        seed_name: String,
+
+        /// encryption algorithm for which two seed keys were found
+        encryption: Encryption,
+    },
+
+    /// To generate QR code with public address information export, Vault
+    /// receives both seed name and
+    /// [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)
+    /// from the navigation state `Navstate`.
+    /// `MultiSigner` gets transformed into [`AddressKey`] and corresponds to
+    /// [`AddressDetails`](definitions::users::AddressDetails) that are exported.
+    /// `AddressDetails` also contain `seed_name` field, that must coincide
+    /// with the one received directly from the navigator.
+    /// This error appears if the seed names are different.
+    #[error(
+        "Expected seed name {expected_seed_name} for address key {}. \
+        Address details in database have {real_seed_name} name.",
+        hex::encode(address_key.key()),
+    )]
+    SeedNameNotMatching {
+        /// address key for which the export is done
+        address_key: AddressKey,
+
+        /// seed name, from the navigator
+        expected_seed_name: String,
+
+        /// seed name, from the `AddressDetails`
+        real_seed_name: String,
+    },
+
+    /// QR handling error.
+    #[error("QR error {0}.")]
+    Qr(String),
+
+    /// [`NetworkSpecsKey`] of a network in `network_id` field of the
+    /// [`AddressDetails`](definitions::users::AddressDetails) corresponding to
+    /// [`AddressKey`].
+    ///
+    /// This happens when the derivation is created in some other network(s), but
+    /// not in the given network. This way the `AddressKey` is in the database,
+    /// but the address in the network is not.
+    #[error(
+        "Could not find network specs key {} in address details with key {}.",
+        hex::encode(.network_specs_key.key()),
+        hex::encode(.address_key.key())
+    )]
+    NetworkSpecsKeyForAddressNotFound {
+        network_specs_key: NetworkSpecsKey,
+        address_key: AddressKey,
+    },
+
+    /// Got empty seed phrase.
+    #[error("Seed phrase empty.")]
+    EmptySeed,
+
+    /// Got empty seed name.
+    #[error("Seed name is empty.")]
+    EmptySeedName,
+
+    /// Error in [`SecretString`](https://docs.rs/sp-core/6.0.0/sp_core/crypto/type.SecretString.html).
+    ///
+    /// `SecretString` consists of combined seed phrase and derivation.
+    ///
+    /// Associated error content is
+    /// [`SecretStringError`](https://docs.rs/sp-core/6.0.0/sp_core/crypto/enum.SecretStringError.html).
+    #[error("Secret string error: {}", format!("{:?}", .0))]
+    SecretStringError(sp_core::crypto::SecretStringError),
+
+    /// Same public key was produced for a different seed phrase and/or
+    /// derivation path, during database transaction preparation (not yet in
+    /// the database).
+    #[error(
+        "Tried to create colliding addresses within {}.\
+        Address for seed name {seed_name_new} and path {cropped_path_new} \
+        has same public key as address for seed name {seed_name_existing} \
+        and path {cropped_path_existing}.",
+        if *.in_this_network { "same network" } else { "different networks" }
+    )]
+    KeyCollisionBatch {
+        seed_name_existing: String,
+        seed_name_new: String,
+        cropped_path_existing: String,
+        cropped_path_new: String,
+        in_this_network: bool,
+    },
+
+    /// Same public key was produced for a different seed phrase and/or
+    /// derivation path, as already existing in the database.
+    ///
+    /// Address is generated within a network using seed phrase and derivation
+    /// path.
+    ///
+    /// Address is defined by public key and [`NetworkSpecsKey`]. Public key
+    /// is created from seed phrase and derivation with encryption algorithm
+    /// supported by the network.
+    ///
+    /// If two networks are using the same encryption algorithm, generating
+    /// public key in both with same seed phrase and derivation path would
+    /// result in two identical public keys. This is normal and expected
+    /// behavior, and this is the reason why [`AddressDetails`] contain a set
+    /// of allowed networks in `network_id` field.
+    ///
+    /// It is, however, possible, that when generating public key for
+    /// **different** seed names and/or **different** derivation
+    /// paths, resulting public keys accidentally coincide.
+    ///
+    /// This is called here `KeyCollision`, and results in error.
+    #[error("Address key collision for seed name {seed_name}")]
+    KeyCollision { seed_name: String },
+
+    /// Derivation that user tried to create already exists.
+    ///
+    /// Associated error content is:
+    /// - [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)
+    /// of the already existing address
+    /// - [`AddressDetails`] for already existing address
+    /// - [`NetworkSpecsKey`] of the associated network
+    #[error(
+        "Seed {} already has derivation {}{} \
+        for network specs key {}, public key {}.",
+        .address_details.seed_name,
+        .address_details.path,
+        if .address_details.has_pwd { "///<password>" } else { "" },
+        hex::encode(network_specs_key.key()),
+        hex::encode(multisigner_to_public(.multisigner)),
+    )]
+    DerivationExists {
+        multisigner: MultiSigner,
+        address_details: Box<AddressDetails>,
+        network_specs_key: NetworkSpecsKey,
+    },
+    /// Received `derivations` update payload contains an invalid derivation.
+    ///
+    /// Associated data is the derivation that could not be used as a `String`.
+    #[error("Derivation {0} has invalid format.")]
+    InvalidDerivation(String),
+
+    /// User was creating the derivation with password, and thus moved into
+    /// `PasswordConfirm` modal, however, the password was not found when
+    /// cutting password from the path.
+    #[error("Derivation had password, then lost it.")]
+    LostPwd,
+
+    /// Temporary database entry in `TRANSACTION` tree of the Vault database
+    /// under the key `DRV`, used to store the derivation import data.
+    ///
+    /// Missing `Derivations` when it is expected always indicates the database
+    /// corruption.
+    #[error("Derivations not found.")]
+    DerivationsNotFound,
+
+    /// Temporary database entry in `TRANSACTION` tree of the Vault database
+    /// under the key `SIGN`, used to store the signable transaction data
+    /// awaiting for the user approval.
+    ///
+    /// Missing `Sign` when it is expected always indicates the database
+    /// corruption.
+    #[error(
+        "Could not find database temporary entry with information \
+        needed for signing approved transaction."
+    )]
+    Sign,
+
+    #[error("Unable to decode current verifier entry for key {}.", hex::encode(.0.key()))]
+    NoValidCurrentVerifier(VerifierKey),
+
+    /// While searching for all networks with same genesis hash, found that
+    /// there are networks with same genesis hash, but different names.
+    #[error(
+        "Different network names ({name1}, {name2}) in database for same genesis hash {}.",
+        hex::encode(genesis_hash)
+    )]
+    DifferentNamesSameGenesisHash {
+        name1: String,
+        name2: String,
+        genesis_hash: H256,
+    },
+
+    /// Network specs entries have same genesis hash, but different base58 prefix
+    #[error(
+        "Prefix mismatch for same genesis hash {}: {base58_1}, {base58_2}",
+        hex::encode(genesis_hash.as_ref()),
+    )]
+    DifferentBase58Specs {
+        base58_1: u16,
+        base58_2: u16,
+        genesis_hash: H256,
+    },
+
+    /// General verifier [`Verifier`](definitions::network_specs::Verifier) information
+    /// stored in `SETTREE` tree of the database under key `GENERALVERIFIER`.
+    ///
+    /// Missing general verifier always indicates the database corruption.
+    #[error("Could not find general verifier.")]
+    GeneralVerifierNotFound,
+
+    /// [`DangerRecord`](definitions::danger::DangerRecord) information
+    /// stored in `SETTREE` tree of the database under key `DANGER`.
+    ///
+    /// Missing `DangerRecord` always indicates the database corruption.
+    #[error("Types not found.")]
+    TypesNotFound,
+
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) for a network
+    /// in `SPECSTREE` tree of the Vault database, searched by
+    /// [`NetworkSpecsKey`].
+    ///
+    /// Associated data is the `NetworkSpecsKey` used for the search.
+    #[error("Could not find network specs for network specs key {}.", hex::encode(.0.key()))]
+    NetworkSpecsNotFound(NetworkSpecsKey),
+
+    /// [`AddressDetails`](definitions::users::AddressDetails) for [`AddressKey`] in
+    /// `ADDRTREE` tree of the Vault database.
+    ///
+    /// Associated data is the `AddressKey` used for search.
+    #[error(
+        "Could not find address details for address key {}.", hex::encode(.0.key())
+    )]
+    AddressNotFound(AddressKey),
+
+    /// Network metadata in `METATREE` tree of the Vault database, for network
+    /// name and version combination.
+    #[error("Meta values not found for {name} version {version}")]
+    MetaValuesNotFound {
+        /// network name
+        name: String,
+
+        /// network version
+        version: u32,
+    },
+
+    /// Database checksum does not match the expected value.
+    #[error("Checksum mismatch.")]
+    ChecksumMismatch,
+
+    /// [`DangerRecord`](definitions::danger::DangerRecord) information
+    /// stored in `SETTREE` tree of the database under key `DANGER`.
+    ///
+    /// Missing `DangerRecord` always indicates the database corruption.
+    #[error("Danger status not found.")]
+    DangerStatusNotFound,
+
+    #[error("There are no seeds. Please create a seed first.")]
+    NoKnownSeeds,
+
+    /// Found `secret_exposed` flag mismatch in the database: address is not
+    /// marked as potentially exposed when it must have been.
+    #[error(
+    "Address details entry with public key {} (seed {}, path {}{}) is not marked as potentially exposed, \
+        when it should be.",
+    hex::encode(multisigner_to_public(.multisigner)),
+    .address_details.seed_name,
+    .address_details.path,
+    if .address_details.has_pwd { "///<password>" } else { "" },
+    )]
+    SecretExposedMismatch {
+        multisigner: MultiSigner,
+        address_details: AddressDetails,
+    },
+
+    /// User has entered a wrong password for a passworded address.
+    #[error("Wrong password.")]
+    WrongPassword,
+
+    #[error("Missing information about whether the path {0} is passworded.")]
+    MissingPasswordInfo(String),
+
+    #[error("Key pair with public key {} can't be expressed as a direct derivation from a seed",
+    hex::encode(multisigner_to_public(.multisigner)),
+    )]
+    NoSeedForKeyPair { multisigner: MultiSigner },
+
+    #[error("No seed is found for {} root key",
+    hex::encode(multisigner_to_public(.multisigner)),
+    )]
+    NoSeedFound { multisigner: MultiSigner },
+
+    #[error("No root derivation for seed {0}")]
+    NoRootKeyForSeed(String),
+
+    #[error("Data packing error: {0}")]
+    DataPacking(String),
+}
+
+/// DB handling result.
+pub type Result<T> = result::Result<T, Error>;
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/helpers.rs.html b/rustdocs/src/db_handling/helpers.rs.html new file mode 100644 index 0000000000..03a832b242 --- /dev/null +++ b/rustdocs/src/db_handling/helpers.rs.html @@ -0,0 +1,1319 @@ +helpers.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+
//! Common helper functions for database operations
+
+use parity_scale_codec::Decode;
+#[cfg(feature = "active")]
+use parity_scale_codec::Encode;
+use sled::{Batch, Db, Tree};
+use sp_core::H256;
+
+use constants::{ADDRTREE, DANGER, GENERALVERIFIER, SCHEMA_VERSION, VERIFIERS};
+use constants::{METATREE, SETTREE, SPECSTREE, TYPES};
+
+use definitions::network_specs::NetworkSpecs;
+use definitions::schema_version::SchemaVersion;
+use definitions::{
+    danger::DangerRecord,
+    helpers::multisigner_to_public,
+    history::{Event, IdentityHistory, MetaValuesDisplay, NetworkSpecsDisplay, TypesDisplay},
+    keyring::{NetworkSpecsKey, VerifierKey},
+    network_specs::{CurrentVerifier, ValidCurrentVerifier, Verifier},
+};
+use definitions::{
+    keyring::MetaKey, metadata::MetaValues, network_specs::OrderedNetworkSpecs,
+    qr_transfers::ContentLoadTypes, types::TypeEntry,
+};
+#[cfg(feature = "active")]
+use definitions::{
+    keyring::{AddressKey, MetaKeyPrefix},
+    users::AddressDetails,
+};
+
+use crate::{Error, Result};
+
+#[cfg(feature = "active")]
+use crate::db_transactions::TrDbCold;
+use crate::manage_history::events_to_batch;
+
+/// Open a tree in the database.
+///
+/// Wrapper for `open_tree()` method for database [`Db`] from [`sled`].
+/// Input is `&[u8]` tree identifier.
+pub fn open_tree(database: &Db, tree_name: &[u8]) -> Result<Tree> {
+    Ok(database.open_tree(tree_name)?)
+}
+
+/// Check database schema version.
+/// Prevents app stash when user upgrades the app without re-install.
+pub fn assert_db_version(database: &Db) -> Result<()> {
+    let expected = *SchemaVersion::current();
+    let settings = open_tree(database, SETTREE)?;
+    let ivec = settings
+        .get(SCHEMA_VERSION)?
+        .ok_or(Error::DbSchemaMismatch { expected, found: 0 })?;
+    let found = *SchemaVersion::from_ivec(&ivec)?;
+    if expected != found {
+        return Err(Error::DbSchemaMismatch { expected, found });
+    }
+    Ok(())
+}
+
+/// Assemble a [`Batch`] that removes all elements from a tree.
+pub fn make_batch_clear_tree(database: &sled::Db, tree_name: &[u8]) -> Result<Batch> {
+    let tree = open_tree(database, tree_name)?;
+    let mut out = Batch::default();
+    for (key, _) in tree.iter().flatten() {
+        out.remove(key)
+    }
+    Ok(out)
+}
+
+/// Get [`OrderedNetworkSpecs`] for all networks from the cold database.
+///
+/// Function is used both on active and Vault side, but only for the cold
+/// database.
+pub fn get_all_networks(database: &sled::Db) -> Result<Vec<OrderedNetworkSpecs>> {
+    let chainspecs = open_tree(database, SPECSTREE)?;
+    let mut out: Vec<OrderedNetworkSpecs> = Vec::new();
+    for x in chainspecs.iter().flatten() {
+        out.push(OrderedNetworkSpecs::from_entry_checked(x)?)
+    }
+    Ok(out)
+}
+
+/// Try to get [`ValidCurrentVerifier`] from the Vault database for a network,
+/// using [`VerifierKey`].
+///
+/// If the network is not known to the database, i.e. there is no verifier data
+/// and network genesis hash is not encountered elsewhere in the database,
+/// result is `Ok(None)`.
+///
+/// Note that `CurrentVerifier::Dead` or damaged verifier data result in
+/// errors.
+pub fn try_get_valid_current_verifier(
+    database: &sled::Db,
+    verifier_key: &VerifierKey,
+) -> Result<Option<ValidCurrentVerifier>> {
+    let general_verifier = get_general_verifier(database)?;
+    let verifiers = open_tree(database, VERIFIERS)?;
+    match verifiers.get(verifier_key.key())? {
+        // verifier entry is found
+        Some(verifier_encoded) => {
+            match <CurrentVerifier>::decode(&mut &verifier_encoded[..])? {
+                // verifier is a valid one
+                CurrentVerifier::Valid(b) => {
+                    // Custom verifier ([`Verifier`]) can never be entered in
+                    // the database with same value as database general verifier
+                    // ([`Verifier`]), unless both values are `None`.
+                    // If such entry is found, it indicates that the database is
+                    // corrupted.
+                    if let ValidCurrentVerifier::Custom {
+                        v: ref custom_verifier,
+                    } = b
+                    {
+                        if (custom_verifier == &general_verifier)
+                            && (general_verifier != Verifier { v: None })
+                        {
+                            return Err(Error::CustomVerifierIsGeneral(verifier_key.to_owned()));
+                        }
+                    }
+                    Ok(Some(b))
+                }
+            }
+        }
+        // no verifier for network in the database
+        None => {
+            // `VerifierKey` is formed from network genesis hash.
+            // When the entries are added in the database, network specs could
+            // be added only if the verifier is already in the database or is
+            // added at the same time.
+            // If the genesis hash is found in network specs, but no verifier
+            // entry exists, it indicated that the database is corrupted.
+            if let Some(specs_invariants) =
+                genesis_hash_in_specs(database, verifier_key.genesis_hash())?
+            {
+                return Err(Error::UnexpectedGenesisHash {
+                    name: specs_invariants.name,
+                    genesis_hash: specs_invariants.genesis_hash,
+                });
+            }
+            Ok(None)
+        }
+    }
+}
+
+/// Get [`ValidCurrentVerifier`] from the Vault database for a network, using
+/// [`VerifierKey`].
+///
+/// Entry here is expected to be in the database, failure to find it results in
+/// an error.
+pub fn get_valid_current_verifier(
+    database: &sled::Db,
+    verifier_key: &VerifierKey,
+) -> Result<ValidCurrentVerifier> {
+    try_get_valid_current_verifier(database, verifier_key)?
+        .ok_or_else(|| Error::NoValidCurrentVerifier(verifier_key.clone()))
+}
+
+/// Specs invariants that are expected to stay unchanged for the network over
+/// time and can not be different for same genesis hash and different encryption
+/// algorithms.
+pub struct SpecsInvariants {
+    pub base58prefix: u16,
+
+    /// network with lowest order, for correct navigation when updating the
+    /// network metadata
+    pub first_network_specs_key: NetworkSpecsKey,
+    pub genesis_hash: H256,
+    pub name: String,
+}
+
+/// Search for network genesis hash in [`OrderedNetworkSpecs`] entries in [`SPECSTREE`]
+/// of the Vault database.
+///
+/// Genesis hash is calculated from network [`VerifierKey`] input.
+// TODO too convoluted, historically so; replace VerifierKey with genesis hash;
+// fixes needed in `add_specs`, `load_metadata` and
+// `try_get_valid_current_verifier` function above
+///
+/// If there are more than one network corresponding to the same genesis hash,
+/// outputs network specs key for the network with the lowest order.
+///
+/// If there are several entries with same genesis hash, all of them must have
+/// identical base58 prefix and network name. Network name is, and base58 prefix
+/// could be a part of the network metadata, and therefore must not depend on
+/// encryption used.
+pub fn genesis_hash_in_specs(
+    database: &sled::Db,
+    genesis_hash: H256,
+) -> Result<Option<SpecsInvariants>> {
+    let chainspecs = open_tree(database, SPECSTREE)?;
+    let mut specs_set: Vec<(NetworkSpecsKey, OrderedNetworkSpecs)> = Vec::new();
+    let mut found_permanent_specs: Option<(u16, String)> = None;
+    for (network_specs_key_vec, network_specs_encoded) in chainspecs.iter().flatten() {
+        let network_specs_key = NetworkSpecsKey::from_ivec(&network_specs_key_vec);
+        let network_specs = OrderedNetworkSpecs::from_entry_with_key_checked(
+            &network_specs_key,
+            network_specs_encoded,
+        )?;
+        if network_specs.specs.genesis_hash.as_bytes() == &genesis_hash[..] {
+            found_permanent_specs = match found_permanent_specs {
+                Some((base58prefix, name)) => {
+                    if base58prefix == network_specs.specs.base58prefix {
+                        if name == network_specs.specs.name {
+                            Some((base58prefix, name))
+                        } else {
+                            return Err(Error::DifferentNamesSameGenesisHash {
+                                name1: name,
+                                name2: network_specs.specs.name.to_string(),
+                                genesis_hash: network_specs.specs.genesis_hash,
+                            });
+                        }
+                    } else {
+                        return Err(Error::DifferentBase58Specs {
+                            genesis_hash: network_specs.specs.genesis_hash,
+                            base58_1: base58prefix,
+                            base58_2: network_specs.specs.base58prefix,
+                        });
+                    }
+                }
+                None => Some((
+                    network_specs.specs.base58prefix,
+                    network_specs.specs.name.to_string(),
+                )),
+            };
+            specs_set.push((network_specs_key, network_specs))
+        }
+    }
+    specs_set.sort_by(|a, b| a.1.order.cmp(&b.1.order));
+    match specs_set.first() {
+        Some(a) => Ok(Some(SpecsInvariants {
+            base58prefix: a.1.specs.base58prefix,
+            first_network_specs_key: a.0.to_owned(),
+            genesis_hash,
+            name: a.1.specs.name.to_string(),
+        })),
+        None => Ok(None),
+    }
+}
+
+/// Get general verifier [`Verifier`] from the Vault database.
+///
+/// Vault works only with an initiated database, i.e. the one with general
+/// verifier set up. Failure to find general verifier is always an error.
+pub fn get_general_verifier(database: &sled::Db) -> Result<Verifier> {
+    let settings = open_tree(database, SETTREE)?;
+    let verifier_encoded = settings
+        .get(GENERALVERIFIER)?
+        .ok_or(Error::GeneralVerifierNotFound)?;
+    Ok(<Verifier>::decode(&mut &verifier_encoded[..])?)
+}
+
+/// Try to get types information from the database.
+///
+/// If no types information is found, result is `Ok(None)`.
+pub fn try_get_types(database: &sled::Db) -> Result<Option<Vec<TypeEntry>>> {
+    let settings = open_tree(database, SETTREE)?;
+    let res = settings
+        .get(TYPES)?
+        .map(|types_info_encoded| <Vec<TypeEntry>>::decode(&mut &types_info_encoded[..]))
+        .transpose()?;
+
+    Ok(res)
+}
+
+/// Get types information as `Vec<TypeEntry>` from the database.
+///
+/// Types data is expected to be found, for example, in:
+///
+/// - hot database, from which the types data could not be removed using
+/// standard operations
+/// - cold database, when transactions made using `RuntimeMetadata` `V12` or `V13` are
+/// being decoded
+///
+/// Not finding types data results in an error.
+pub fn get_types(database: &sled::Db) -> Result<Vec<TypeEntry>> {
+    try_get_types(database)?.ok_or(Error::TypesNotFound)
+}
+
+/// Get types information as [`ContentLoadTypes`] from the database.
+///
+/// Function prepares types information in qr payload format.
+///
+/// Is used on the active side when preparing `load_types` qr payload and in
+/// Vault when preparing `SufficientCrypto` export qr code for `load_types`
+/// payload.
+///
+/// Not finding types data results in an error.
+pub fn prep_types(database: &sled::Db) -> Result<ContentLoadTypes> {
+    Ok(ContentLoadTypes::generate(&get_types(database)?))
+}
+
+/// Try to get network specs [`OrderedNetworkSpecs`] from the Vault database.
+///
+/// If the [`NetworkSpecsKey`] and associated [`OrderedNetworkSpecs`] are not found in
+/// the [`SPECSTREE`], the result is `Ok(None)`.
+pub fn try_get_network_specs(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<Option<OrderedNetworkSpecs>> {
+    let chainspecs = open_tree(database, SPECSTREE)?;
+    Ok(chainspecs
+        .get(network_specs_key.key())?
+        .map(|network_specs_encoded| {
+            OrderedNetworkSpecs::from_entry_with_key_checked(
+                network_specs_key,
+                network_specs_encoded,
+            )
+        })
+        .transpose()?)
+}
+
+/// Get network specs [`OrderedNetworkSpecs`] from the Vault database.
+///
+/// Network specs here are expected to be found, not finding them results in an
+/// error.
+pub fn get_network_specs(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<OrderedNetworkSpecs> {
+    try_get_network_specs(database, network_specs_key)?
+        .ok_or_else(|| Error::NetworkSpecsNotFound(network_specs_key.clone()))
+}
+
+/// Try to get [`AddressDetails`] from the Vault database, using
+/// [`AddressKey`].
+///
+/// If no entry with provided [`AddressKey`] is found, the result is `Ok(None)`.
+pub fn try_get_address_details(
+    database: &sled::Db,
+    address_key: &AddressKey,
+) -> Result<Option<AddressDetails>> {
+    let identities = open_tree(database, ADDRTREE)?;
+    identities
+        .get(address_key.key())?
+        .map(|address_details_encoded| -> Result<AddressDetails> {
+            Ok(AddressDetails::from_entry_with_key_checked(
+                address_key,
+                address_details_encoded,
+            )?)
+        })
+        .transpose()
+}
+
+/// Get [`AddressDetails`] from the Vault database, using
+/// [`AddressKey`].
+///
+/// Address is expected to exist, not finding it results in an error.
+pub fn get_address_details(
+    database: &sled::Db,
+    address_key: &AddressKey,
+) -> Result<AddressDetails> {
+    try_get_address_details(database, address_key)?
+        .ok_or_else(|| Error::AddressNotFound(address_key.clone()))
+}
+
+/// Get [`MetaValues`] set from Vault database, for networks with a given name.
+///
+/// The resulting set could be an empty one. It is used to display metadata
+/// available for the network and to find the metadata to be deleted, when the
+/// network gets deleted.
+pub(crate) fn get_meta_values_by_name(
+    database: &sled::Db,
+    network_name: &str,
+) -> Result<Vec<MetaValues>> {
+    let metadata = open_tree(database, METATREE)?;
+    let mut out: Vec<MetaValues> = Vec::new();
+    let meta_key_prefix = MetaKeyPrefix::from_name(network_name);
+    for x in metadata.scan_prefix(meta_key_prefix.prefix()).flatten() {
+        let meta_values = MetaValues::from_entry_checked(x)?;
+        if meta_values.name == network_name {
+            out.push(meta_values)
+        }
+    }
+    Ok(out)
+}
+
+/// Try to get [`MetaValues`], corresponding to given network name and version
+/// from the database.
+///
+/// If no entry is found, the result is `Ok(None)`.
+pub fn try_get_meta_values_by_name_version(
+    database: &sled::Db,
+    network_name: &str,
+    network_version: u32,
+) -> Result<Option<MetaValues>> {
+    let metadata = open_tree(database, METATREE)?;
+    let meta_key = MetaKey::from_parts(network_name, network_version);
+    Ok(metadata
+        .get(meta_key.key())?
+        .map(|meta| -> Result<_> {
+            Ok(Some(MetaValues::from_entry_name_version_checked(
+                network_name,
+                network_version,
+                meta,
+            )?))
+        })
+        .transpose()?
+        .unwrap_or_default())
+}
+
+/// Get [`MetaValues`], corresponding to given network name and version, from
+/// the database.
+///
+/// Entry is expected to be in the database, error is produced if it is not
+/// found.
+pub fn get_meta_values_by_name_version(
+    database: &sled::Db,
+    network_name: &str,
+    network_version: u32,
+) -> Result<MetaValues> {
+    try_get_meta_values_by_name_version(database, network_name, network_version)?.ok_or(
+        Error::MetaValuesNotFound {
+            name: network_name.to_owned(),
+            version: network_version,
+        },
+    )
+}
+
+/// Transfer metadata from the hot database into the cold one.
+///
+/// Function scans through [`METATREE`] tree of the hot database and transfers
+/// into [`METATREE`] tree of the cold database the metadata entries for the
+/// networks that already have the network specs [`OrderedNetworkSpecs`] entries in
+/// [`SPECSTREE`] of the cold database.
+///
+/// Applicable only on the active side.
+#[cfg(feature = "active")]
+pub fn transfer_metadata_to_cold(database_hot: &sled::Db, database_cold: &sled::Db) -> Result<()> {
+    let mut for_metadata = Batch::default();
+    {
+        let metadata_hot = open_tree(database_hot, METATREE)?;
+        let chainspecs_cold = open_tree(database_cold, SPECSTREE)?;
+        for x in chainspecs_cold.iter().flatten() {
+            let network_specs = NetworkSpecs::from_entry_checked(x)?;
+            for (key, value) in metadata_hot
+                .scan_prefix(MetaKeyPrefix::from_name(&network_specs.name).prefix())
+                .flatten()
+            {
+                for_metadata.insert(key, value)
+            }
+        }
+    }
+    TrDbCold::new()
+        .set_metadata(for_metadata)
+        .apply(database_cold)
+}
+
+/// Remove the network from the database.
+///
+/// Function inputs [`NetworkSpecsKey`] of the network, gets network genesis
+/// hash and proceeds to act on **all** networks with same genesis hash.
+///
+/// Removing network is mostly an emergency tool and is not expected to be used
+/// really often.
+///
+/// Removing a network means:
+///
+/// - Remove from [`SPECSTREE`] all [`OrderedNetworkSpecs`] that have genesis hash
+/// associated with given `NetworkSpecsKey`
+/// - Remove from [`METATREE`] all metadata entries corresponding to the network
+/// name, as found in `OrderedNetworkSpecs`
+/// - Remove from [`ADDRTREE`] all addresses in the networks being removed
+/// - Modify `Verifier` data if necessary.
+///
+/// Note that if the network supports multiple encryption algorithms, the
+/// removal of network with one of the encryptions will cause the networks
+/// with other encryptions be removed as well.
+pub fn remove_network(database: &Db, network_specs_key: &NetworkSpecsKey) -> Result<()> {
+    let mut address_batch = Batch::default();
+    let mut meta_batch = Batch::default();
+    let mut network_specs_batch = Batch::default();
+    let mut verifiers_batch = Batch::default();
+    let mut events: Vec<Event> = Vec::new();
+
+    let general_verifier = get_general_verifier(database)?;
+    let network_specs = get_network_specs(database, network_specs_key)?;
+
+    let verifier_key = VerifierKey::from_parts(network_specs.specs.genesis_hash);
+    let valid_current_verifier = get_valid_current_verifier(database, &verifier_key)?;
+
+    // modify verifier as needed
+    if let ValidCurrentVerifier::Custom { ref v } = valid_current_verifier {
+        match v {
+            Verifier { v: None } => (),
+            _ => {
+                verifiers_batch.remove(verifier_key.key());
+            }
+        }
+    }
+
+    // scan through metadata tree to mark for removal all networks with target name
+    for meta_values in get_meta_values_by_name(database, &network_specs.specs.name)?.iter() {
+        let meta_key = MetaKey::from_parts(&meta_values.name, meta_values.version);
+        meta_batch.remove(meta_key.key());
+        events.push(Event::MetadataRemoved {
+            meta_values_display: MetaValuesDisplay::get(meta_values),
+        });
+    }
+
+    {
+        let chainspecs = open_tree(database, SPECSTREE)?;
+        let identities = open_tree(database, ADDRTREE)?;
+
+        // scan through chainspecs tree to mark for removal all networks with target genesis hash
+        let mut keys_to_wipe: Vec<NetworkSpecsKey> = Vec::new();
+        for (network_specs_key_vec, entry) in chainspecs.iter().flatten() {
+            let x_network_specs_key = NetworkSpecsKey::from_ivec(&network_specs_key_vec);
+            let mut x_network_specs =
+                OrderedNetworkSpecs::from_entry_with_key_checked(&x_network_specs_key, entry)?;
+            if x_network_specs.specs.genesis_hash == network_specs.specs.genesis_hash {
+                network_specs_batch.remove(x_network_specs_key.key());
+                events.push(Event::NetworkSpecsRemoved {
+                    network_specs_display: NetworkSpecsDisplay::get(
+                        &x_network_specs,
+                        &valid_current_verifier,
+                        &general_verifier,
+                    ),
+                });
+                keys_to_wipe.push(x_network_specs_key);
+            } else if x_network_specs.order > network_specs.order {
+                x_network_specs.order -= 1;
+                network_specs_batch.insert(x_network_specs_key.key(), x_network_specs.encode());
+            }
+        }
+
+        // scan through address tree to clean up the network_key(s) from identities
+        for (address_key_vec, entry) in identities.iter().flatten() {
+            let address_key = AddressKey::from_ivec(&address_key_vec)?;
+            let (multisigner, address_details) =
+                AddressDetails::process_entry_checked((address_key_vec, entry))?;
+            for key in keys_to_wipe.iter() {
+                if address_details.network_id.as_ref() == Some(key) {
+                    let identity_history = IdentityHistory::get(
+                        &address_details.seed_name,
+                        &address_details.encryption,
+                        &multisigner_to_public(&multisigner),
+                        &address_details.path,
+                        network_specs.specs.genesis_hash,
+                    );
+                    events.push(Event::IdentityRemoved { identity_history });
+                    address_batch.remove(address_key.key())
+                } else {
+                    address_batch.insert(address_key.key(), address_details.encode())
+                }
+            }
+        }
+    }
+    TrDbCold::new()
+        .set_addresses(address_batch) // upd addresses
+        .set_history(events_to_batch(database, events)?) // add corresponding history
+        .set_metadata(meta_batch) // upd metadata
+        .set_network_specs(network_specs_batch) // upd network_specs
+        .set_verifiers(verifiers_batch) // upd network_verifiers
+        .apply(database)
+}
+
+/// Remove the network metadata entry from the database.
+///
+/// Function inputs [`NetworkSpecsKey`] of the network and `u32` version of the
+/// network metadata, and proceeds to remove a single metadata entry
+/// corresponding to this version.
+///
+/// Metadata in the Vault database is determined by the network name and
+/// network version, and has no information about the
+/// [`Encryption`](definitions::crypto::Encryption) algorithm supported by the
+/// network. Therefore if the network supports more than one encryption
+/// algorithm, removing metadata for one will affect all encryptions.
+pub fn remove_metadata(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+    network_version: u32,
+) -> Result<()> {
+    let network_specs = get_network_specs(database, network_specs_key)?;
+    let meta_key = MetaKey::from_parts(&network_specs.specs.name, network_version);
+    let mut meta_batch = Batch::default();
+    meta_batch.remove(meta_key.key());
+
+    let meta_values =
+        get_meta_values_by_name_version(database, &network_specs.specs.name, network_version)?;
+    let meta_values_display = MetaValuesDisplay::get(&meta_values);
+    let history_batch = events_to_batch(
+        database,
+        vec![Event::MetadataRemoved {
+            meta_values_display,
+        }],
+    )?;
+    TrDbCold::new()
+        .set_metadata(meta_batch) // remove metadata
+        .set_history(history_batch) // add corresponding history
+        .apply(database)
+}
+
+/// User-initiated removal of the types information from the Vault database.
+///
+/// Types information is not necessary to process transactions in networks with
+/// metadata having `RuntimeVersionV14`, as the types information after `V14`
+/// is a part of the metadata itself.
+///
+/// Types information is installed in Vault by default and could be removed by
+/// user manually, through this function.
+///
+/// Types information is verified by the general verifier. When the general
+/// verifier gets changed, the types information is also removed from the
+/// Vault database through so-called `GeneralHold` processing, to avoid
+/// confusion regarding what data was verified by whom. Note that this situation
+/// in **not** related to the `remove_types_info` function and is handled
+/// elsewhere.
+pub fn remove_types_info(database: &sled::Db) -> Result<()> {
+    let mut settings_batch = Batch::default();
+    settings_batch.remove(TYPES);
+    let events: Vec<Event> = vec![Event::TypesRemoved {
+        types_display: TypesDisplay::get(
+            &ContentLoadTypes::generate(&get_types(database)?),
+            &get_general_verifier(database)?,
+        ),
+    }];
+    TrDbCold::new()
+        .set_history(events_to_batch(database, events)?)
+        // add history
+        .set_settings(settings_batch)
+        // upd settings
+        .apply(database)
+}
+
+/// Modify existing batch for [`ADDRTREE`](constants::ADDRTREE) with incoming
+/// vector of additions.
+#[cfg(feature = "active")]
+pub(crate) fn upd_id_batch(mut batch: Batch, adds: Vec<(AddressKey, AddressDetails)>) -> Batch {
+    for (address_key, address_details) in adds.iter() {
+        batch.insert(address_key.key(), address_details.encode());
+    }
+    batch
+}
+
+/// Verify checksum in Vault database.
+///
+/// Used in retrieving temporary stored data from
+/// [`TRANSACTION`](constants::TRANSACTION) tree of the database.
+// TODO Goes obsolete if the temporary storage goes.
+pub(crate) fn verify_checksum(database: &Db, checksum: u32) -> Result<()> {
+    let real_checksum = database.checksum()?;
+    if checksum != real_checksum {
+        return Err(Error::ChecksumMismatch);
+    }
+    Ok(())
+}
+
+/// Get the danger status from the Vault database.
+///
+/// Currently, the only flag contributing to the danger status is whether the
+/// device was online. This may change eventually.
+pub fn get_danger_status(database: &sled::Db) -> Result<bool> {
+    let settings = open_tree(database, SETTREE)?;
+    let a = settings.get(DANGER)?.ok_or(Error::DangerStatusNotFound)?;
+    Ok(DangerRecord::from_ivec(&a).device_was_online()?)
+}
+
+pub fn validate_mnemonic(mnemonic: &str) -> bool {
+    bip39::Mnemonic::validate(mnemonic, bip39::Language::English).is_ok()
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/hot_default.rs.html b/rustdocs/src/db_handling/hot_default.rs.html new file mode 100644 index 0000000000..9fbc57a85c --- /dev/null +++ b/rustdocs/src/db_handling/hot_default.rs.html @@ -0,0 +1,175 @@ +hot_default.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+
//! Making and restoring **hot** database with default content
+//!
+//! Hot database is the database that exists on network-connected device and
+//! that could be used to manage Vault updates.
+//!
+//! Hot database contains following trees:
+//!
+//! - [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) with information needed to
+//! perform RPC calls on networks
+//! - [`METATREE`](constants::METATREE) with network metadata fetched through
+//! RPC calls, maximum two entries are allowed for each network, empty by
+//! default
+//! - [`META_HISTORY`](constants::META_HISTORY) with block hashes for metadata
+//! fetched through RPC calls, empty by default
+//! - [`SETTREE`](constants::SETTREE) with types information
+//! - [`SPECSTREEPREP`](constants::SPECSTREEPREP) with network specs entries
+//! [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+use parity_scale_codec::Encode;
+use sled::Batch;
+
+use constants::TYPES;
+use defaults::{default_address_book, default_chainspecs_to_send, default_types_content};
+use definitions::keyring::{AddressBookKey, NetworkSpecsKey};
+
+use crate::db_transactions::TrDbHot;
+use crate::Result;
+
+/// Make [`Batch`] with default
+/// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) values, for
+/// [`ADDRESS_BOOK`] tree, in purged database.
+///
+/// - Add default `AddressBookEntry` values
+fn default_hot_address_book() -> Result<Batch> {
+    let mut batch = Batch::default();
+    for x in default_address_book().iter() {
+        let address_book_key =
+            AddressBookKey::from_title(&format!("{}-{}", x.name, x.encryption.show()));
+        batch.insert(address_book_key.key(), x.encode());
+    }
+    Ok(batch)
+}
+
+/// Make [`Batch`] with default
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+/// values, for [`SPECSTREEPREP`] tree, in purged database.
+///
+/// - Add default `NetworkSpecs` values
+fn default_hot_network_specs_prep() -> Result<Batch> {
+    let mut batch = Batch::default();
+    for x in default_chainspecs_to_send().iter() {
+        let network_specs_key = NetworkSpecsKey::from_parts(&x.genesis_hash, &x.encryption);
+        batch.insert(network_specs_key.key(), x.encode());
+    }
+    Ok(batch)
+}
+
+/// Make [`Batch`] with default settings, for [`SETTREE`] tree, in purged
+/// database.
+///
+/// Adds default types information
+/// [`ContentLoadTypes`](definitions::qr_transfers::ContentLoadTypes).
+fn default_hot_settings() -> Result<Batch> {
+    let mut batch = Batch::default();
+    let types_prep = default_types_content()?;
+    batch.insert(TYPES, types_prep.store());
+    Ok(batch)
+}
+
+/// Generate hot database with default content.
+///
+/// Function wipes everything in the database directory and loads into database
+/// defaults for:
+///
+/// - network specs
+/// - types information
+/// - network verifiers
+///
+/// Note that no metadata entries are loaded. It is intended that all metadata
+/// entries appear during the database use.
+pub fn reset_hot_database(database: &sled::Db) -> Result<()> {
+    database.clear()?;
+    TrDbHot::new()
+        .set_address_book(default_hot_address_book()?) // set default address book
+        .set_network_specs_prep(default_hot_network_specs_prep()?) // set default network specs
+        .set_settings(default_hot_settings()?) // load default types
+        .apply(database)
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/identities.rs.html b/rustdocs/src/db_handling/identities.rs.html new file mode 100644 index 0000000000..86bcab06c3 --- /dev/null +++ b/rustdocs/src/db_handling/identities.rs.html @@ -0,0 +1,3599 @@ +identities.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+
//! Creating, collecting, and removing addresses in cold database
+//!
+//! In Vault and Vault-related ecosystem the address is a key pair within a
+//! certain network. Vault Rust database stores only **non-secret** data
+//! associated with each address generated by user.
+//!
+//! Required data to generate address:
+//!
+//! - seed phrase (secret words set, must be always zeroized after use and is
+//! never stored in Rust database)
+//! - derivation path (`/soft//hard///password`); password part, i.e. whatever
+//! follows `///` is not stored in Rust database and must be zeroized after use
+//! - [`NetworkSpecsKey`](definitions::keyring::NetworkSpecsKey)
+//!
+//! The combination of seed phrase and derivation path allows to generate key
+//! pair using the encryption algorithm supported by the network, for which the
+//! address is generated.
+//!
+//! Vault stores only the public key, it is used together with encryption
+//! algorithm [`Encryption`](definitions::crypto::Encryption) to generate
+//! [`AddressKey`](definitions::keyring::AddressKey).
+//!
+//! Same `AddressKey` could correspond to more than one network if the addresses
+//! were produced for same seed phrase and derivation path, and networks use
+//! same encryption algorithm. The networks specs keys of associated networks
+//! are stored in `network_id` field of `AddressDetails`.
+//!
+//! Vault interface shows those addresses as separate entities.
+//!
+//! Non-secret data associated with `AddressKey` is stored in
+//! [`ADDRTREE`](constants::ADDRTREE) tree of the cold database as SCALE-encoded
+//! [`AddressDetails`](definitions::users::AddressDetails).
+use bip39::{Language, Mnemonic, MnemonicType};
+use lazy_static::lazy_static;
+use parity_scale_codec::Decode;
+#[cfg(feature = "active")]
+use parity_scale_codec::Encode;
+use regex::Regex;
+use sled::Batch;
+use sp_core::H256;
+#[cfg(feature = "active")]
+use sp_core::{ecdsa, ed25519, sr25519, Pair};
+use sp_runtime::MultiSignature;
+#[cfg(feature = "active")]
+use sp_runtime::MultiSigner;
+use std::collections::HashMap;
+#[cfg(feature = "active")]
+use zeroize::Zeroize;
+
+#[cfg(feature = "active")]
+use constants::ADDRTREE;
+#[cfg(feature = "active")]
+use constants::ALICE_SEED_PHRASE;
+use definitions::derivations::SeedKeysPreview;
+use definitions::dynamic_derivations::{
+    DynamicDerivationResponseInfo, DynamicDerivationsAddressRequestV1,
+    DynamicDerivationsAddressResponse, DynamicDerivationsAddressResponseV1,
+    DynamicDerivationsResponseInfo,
+};
+use definitions::helpers::print_multisigner_as_base58_or_eth;
+use definitions::helpers::{base58_or_eth_to_multisigner, multisigner_to_encryption};
+use definitions::helpers::{get_multisigner, unhex};
+use definitions::navigation::{DDDetail, DDKeySet, DDPreview, ExportedSet};
+use definitions::network_specs::NetworkSpecs;
+#[cfg(feature = "active")]
+use definitions::{
+    crypto::Encryption,
+    helpers::multisigner_to_public,
+    history::{Event, IdentityHistory},
+    keyring::{AddressKey, NetworkSpecsKey},
+    users::AddressDetails,
+};
+use definitions::{
+    helpers::make_identicon_from_multisigner,
+    navigation::{Address, MKeyDetails, MSCNetworkInfo, QrData},
+};
+use qrcode_rtx::make_data_packs;
+
+#[cfg(feature = "active")]
+use crate::{
+    db_transactions::TrDbCold,
+    helpers::{get_all_networks, make_batch_clear_tree, open_tree, upd_id_batch},
+    manage_history::events_to_batch,
+};
+use crate::{
+    helpers::{get_address_details, get_network_specs},
+    interface_signer::addresses_set_seed_name_network,
+};
+use crate::{Error, Result};
+
+lazy_static! {
+// stolen from sp_core
+// removed seed phrase part
+// last '+' used to be '*', but empty password is an error
+    static ref REG_PATH: Regex = Regex::new(r"^(?P<path>(//?[^/]+)*)(///(?P<password>.+))?$").expect("known value");
+}
+
+#[derive(Clone, Encode, Decode)]
+pub enum SignaturesBulk {
+    #[codec(index = 4)]
+    V1(SignaturesBulkV1),
+}
+
+impl From<SignaturesBulkV1> for SignaturesBulk {
+    fn from(s: SignaturesBulkV1) -> Self {
+        Self::V1(s)
+    }
+}
+
+#[derive(Clone, Encode, Decode)]
+pub struct SignaturesBulkV1 {
+    /// Array of signatures.
+    signatures: Vec<MultiSignature>,
+}
+
+impl From<&[MultiSignature]> for SignaturesBulkV1 {
+    fn from(signatures: &[MultiSignature]) -> Self {
+        Self {
+            signatures: signatures.to_owned(),
+        }
+    }
+}
+
+#[derive(Clone, Encode, Decode)]
+pub struct DynamicDerivationTransaction {
+    pub root_multisigner: MultiSigner,
+    pub derivation_path: String,
+}
+
+#[derive(Clone, Encode, Decode)]
+pub enum TransactionBulk {
+    V1(TransactionBulkV1),
+}
+
+#[derive(Clone, Encode, Decode)]
+pub struct TransactionBulkV1 {
+    pub encoded_transactions: Vec<Vec<u8>>,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub enum ExportAddrs {
+    V1(ExportAddrsV1),
+    V2(ExportAddrsV2),
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct ExportAddrsV1 {
+    pub addrs: Vec<SeedInfo>,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct ExportAddrsV2 {
+    pub addr: SeedInfo,
+    features: Vec<VaultFeatures>,
+}
+
+impl ExportAddrsV2 {
+    pub fn new(addr: SeedInfo) -> Self {
+        Self {
+            addr,
+            features: vec![
+                VaultFeatures::BulkOperations,
+                VaultFeatures::DynamicDerivations,
+            ],
+        }
+    }
+}
+
+impl From<ExportAddrsV2> for ExportAddrsV1 {
+    fn from(val: ExportAddrsV2) -> Self {
+        ExportAddrsV1 {
+            addrs: vec![val.addr],
+        }
+    }
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub enum VaultFeatures {
+    BulkOperations,
+    DynamicDerivations,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct SeedInfo {
+    /// Name of the seed.
+    pub name: String,
+
+    /// Public key of the root key.
+    pub multisigner: MultiSigner,
+
+    /// Derived keys.
+    pub derived_keys: Vec<AddrInfo>,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct AddrInfo {
+    /// Address in the network.
+    ///
+    /// This is either `ss58` form for substrate-based chains or
+    /// h160 form for ethereum based
+    /// chains
+    pub address: String,
+
+    /// The derivation path of the key if user provided one
+    pub derivation_path: Option<String>,
+
+    /// The type of encryption in the network
+    pub encryption: Encryption,
+
+    /// Genesis hash
+    pub genesis_hash: H256,
+}
+
+/// Export info about keys and their addresses known to Vault
+pub fn export_key_set_addrs(
+    database: &sled::Db,
+    seed_name: &str,
+    exported_set: ExportedSet,
+) -> Result<ExportAddrs> {
+    let keys = get_addresses_by_seed_name(database, seed_name)?;
+    let root_multisigner = keys
+        .iter()
+        .find(|(_, a)| a.is_root())
+        .map(|(m, _)| m.to_owned())
+        .ok_or(Error::NoRootKeyForSeed(seed_name.to_owned()))?;
+
+    let mut derived_keys = vec![];
+
+    for key in keys {
+        if key.1.is_root() {
+            continue;
+        }
+
+        let mut selected = false;
+
+        match &exported_set {
+            ExportedSet::All => selected = true,
+            ExportedSet::Selected {
+                s: selected_derivations,
+            } => {
+                for selected_derivation in selected_derivations {
+                    if let Some(id) = &key.1.network_id {
+                        if selected_derivation.derivation == key.1.path
+                            && selected_derivation.network_specs_key == hex::encode(id.key())
+                        {
+                            selected = true;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        if !selected {
+            continue;
+        }
+
+        if let Some(id) = &key.1.network_id {
+            let specs = get_network_specs(database, id)?;
+            let address = print_multisigner_as_base58_or_eth(
+                &key.0,
+                Some(specs.specs.base58prefix),
+                key.1.encryption,
+            );
+            derived_keys.push(AddrInfo {
+                address: address.clone(),
+                derivation_path: if key.1.path.is_empty() {
+                    None
+                } else {
+                    Some(key.1.path.to_owned())
+                },
+                encryption: key.1.encryption,
+                genesis_hash: specs.specs.genesis_hash,
+            });
+        }
+    }
+
+    Ok(ExportAddrs::V2(ExportAddrsV2::new(SeedInfo {
+        name: seed_name.to_owned(),
+        multisigner: root_multisigner,
+        derived_keys,
+    })))
+}
+
+pub fn import_all_addrs(
+    database: &sled::Db,
+    seed_derived_keys: Vec<SeedKeysPreview>,
+) -> Result<()> {
+    // Address preparation set, to be modified and used as `create_address`
+    // input.
+    let mut adds: Vec<(AddressKey, AddressDetails)> = vec![];
+
+    // Associated `Event` set
+    let mut events: Vec<Event> = vec![];
+
+    for addr in &seed_derived_keys {
+        for derived_key in &addr.derived_keys {
+            let path = derived_key.derivation_path.clone().unwrap_or_default();
+            let network_specs_key =
+                NetworkSpecsKey::from_parts(&derived_key.genesis_hash, &derived_key.encryption);
+            let network_specs = get_network_specs(database, &network_specs_key)?;
+            match create_derivation_address(
+                database,
+                &adds, // a single address is created, no data to check against here
+                &path,
+                &network_specs.specs,
+                &addr.name,
+                &derived_key.address,
+                derived_key
+                    .has_pwd
+                    .ok_or_else(|| Error::MissingPasswordInfo(path.to_owned()))?,
+            ) {
+                // success, updating address preparation set and `Event` set
+                Ok(prep_data) => {
+                    adds = prep_data.address_prep;
+                    events.extend_from_slice(&prep_data.history_prep);
+                }
+                // exactly same address already exists, ignoring it
+                Err(Error::DerivationExists { .. }) => (),
+
+                // some other error, processed as a real error
+                Err(e) => return Err(e),
+            }
+        }
+    }
+    TrDbCold::new()
+        .set_addresses(upd_id_batch(Batch::default(), adds)) // modify addresses data
+        .set_history(events_to_batch(database, events)?) // add corresponding history
+        .apply(database)
+}
+
+/// Get public key from seed phrase and derivation path
+fn full_address_to_multisigner(
+    mut full_address: String,
+    encryption: Encryption,
+) -> Result<MultiSigner> {
+    let multisigner_result = match encryption {
+        Encryption::Ed25519 => match ed25519::Pair::from_string(&full_address, None) {
+            Ok(a) => Ok(MultiSigner::Ed25519(a.public())),
+            Err(e) => Err(Error::SecretStringError(e)),
+        },
+        Encryption::Sr25519 => match sr25519::Pair::from_string(&full_address, None) {
+            Ok(a) => Ok(MultiSigner::Sr25519(a.public())),
+            Err(e) => Err(Error::SecretStringError(e)),
+        },
+        Encryption::Ecdsa | Encryption::Ethereum => {
+            match ecdsa::Pair::from_string(&full_address, None) {
+                Ok(a) => Ok(MultiSigner::Ecdsa(a.public())),
+                Err(e) => Err(Error::SecretStringError(e)),
+            }
+        }
+    };
+    full_address.zeroize();
+    multisigner_result
+}
+
+pub fn validate_key_password(
+    database: &sled::Db,
+    address_key: &AddressKey,
+    seed_phrase: &str,
+    password: &str,
+) -> Result<bool> {
+    let address = get_address_details(database, address_key)?;
+    let full_address = format!("{}{}///{}", seed_phrase, address.path, password);
+    let expected = full_address_to_multisigner(full_address, address.encryption)?;
+    Ok(&expected == address_key.multi_signer())
+}
+
+/// Return seed name for the given key
+fn find_seed_name_for_multisigner(
+    database: &sled::Db,
+    multisigner: &MultiSigner,
+) -> Result<Option<String>> {
+    Ok(get_all_addresses(database)?
+        .into_iter()
+        .find(|(m, _)| m == multisigner)
+        .map(|(_, address_details)| address_details.seed_name))
+}
+
+pub fn process_dynamic_derivations_v1(
+    database: &sled::Db,
+    seeds: HashMap<String, String>,
+    request: DynamicDerivationsAddressRequestV1,
+) -> Result<DDPreview> {
+    let mut is_some_already_imported = false;
+    let mut is_some_network_missing = false;
+
+    let mut new_addrs: Vec<(AddressKey, AddressDetails)> = vec![];
+    let seed_request = &request.addr;
+    let seed_name = find_seed_name_for_multisigner(database, &seed_request.multisigner)?
+        .ok_or_else(|| Error::NoSeedForKeyPair {
+            multisigner: seed_request.multisigner.clone(),
+        })?;
+    let seed_phrase = seeds
+        .get(&seed_name)
+        .ok_or_else(|| Error::NoSeedForKeyPair {
+            multisigner: seed_request.multisigner.clone(),
+        })?;
+    let mut derivations = vec![];
+    for derivation_request in &seed_request.dynamic_derivations {
+        let network_specs_key = NetworkSpecsKey::from_parts(
+            &derivation_request.genesis_hash,
+            &derivation_request.encryption,
+        );
+        let network_specs = match get_network_specs(database, &network_specs_key) {
+            Ok(s) => s,
+            Err(_) => {
+                is_some_network_missing = true;
+                continue;
+            }
+        };
+        let multisigner = match create_address(
+            database,
+            &new_addrs,
+            &derivation_request.derivation_path,
+            Some(&network_specs.specs),
+            &seed_name,
+            seed_phrase,
+        ) {
+            // success
+            Ok(prep_data) => {
+                new_addrs = prep_data.address_prep;
+                new_addrs.last()
+                    .expect("new_addrs is never empty")
+                    .0
+                    .multi_signer()}
+            ,
+            // exactly same address already exists, ignoring it
+            Err(Error::DerivationExists { .. }) => {
+                is_some_already_imported = true;
+                continue;
+            },
+
+            // some other error, processed as a real error
+            Err(e) => return Err(e),
+        };
+        let encryption = derivation_request.encryption;
+        derivations.push(DDDetail {
+            base58: print_multisigner_as_base58_or_eth(
+                multisigner,
+                Some(network_specs.specs.base58prefix),
+                encryption,
+            ),
+            path: derivation_request.derivation_path.clone(),
+            network_logo: network_specs.specs.logo,
+            network_specs_key: hex::encode(network_specs_key.key()),
+            identicon: make_identicon_from_multisigner(multisigner, encryption.identicon_style()),
+        })
+    }
+
+    let key_set = DDKeySet {
+        seed_name: seed_name.to_string(),
+        derivations,
+    };
+    let qr = dynamic_derivations_response_qr(&request, seed_phrase)?;
+    Ok(DDPreview {
+        qr,
+        key_set,
+        is_some_already_imported,
+        is_some_network_missing,
+    })
+}
+
+/// Prepare QR frames with `DynamicDerivationsAddressResponse`
+fn dynamic_derivations_response_qr(
+    request: &DynamicDerivationsAddressRequestV1,
+    seed_phrase: &str,
+) -> Result<Vec<QrData>> {
+    let response = dynamic_derivations_response(request, seed_phrase)?;
+    let data = [&[0x53, 0xff, 0xdf], response.encode().as_slice()].concat();
+    make_data_packs(&data, 128).map_err(|e| Error::DataPacking(e.to_string()))
+}
+
+/// Prepare `DynamicDerivationsAddressResponse` for the given request
+pub fn dynamic_derivations_response(
+    request: &DynamicDerivationsAddressRequestV1,
+    seed_phrase: &str,
+) -> Result<DynamicDerivationsAddressResponse> {
+    let seed_request = &request.addr;
+    let mut derivations = vec![];
+    for derivation_request in &seed_request.dynamic_derivations {
+        let path = derivation_request.derivation_path.as_str();
+        // create fixed-length string to avoid reallocations
+        let mut full_address = String::with_capacity(seed_phrase.len() + path.len());
+        full_address.push_str(seed_phrase);
+        full_address.push_str(path);
+
+        derivations.push(DynamicDerivationResponseInfo {
+            derivation_path: derivation_request.derivation_path.clone(),
+            encryption: derivation_request.encryption,
+            public_key: full_address_to_multisigner(full_address, derivation_request.encryption)?,
+        });
+    }
+    let addr = DynamicDerivationsResponseInfo {
+        multisigner: seed_request.multisigner.clone(),
+        dynamic_derivations: derivations,
+    };
+
+    Ok(DynamicDerivationsAddressResponse::V1(
+        DynamicDerivationsAddressResponseV1 { addr },
+    ))
+}
+
+/// Helper function to get public key from seed phrase and derivation path
+pub fn derive_single_key(
+    database: &sled::Db,
+    seeds: &HashMap<String, String>,
+    derivation_path: &str,
+    root_multisigner: &MultiSigner,
+    network_key: NetworkSpecsKey,
+) -> Result<(MultiSigner, AddressDetails)> {
+    let seed_name =
+        find_seed_name_for_multisigner(database, root_multisigner)?.ok_or_else(|| {
+            Error::NoSeedFound {
+                multisigner: root_multisigner.clone(),
+            }
+        })?;
+    let seed_phrase = seeds.get(&seed_name).ok_or_else(|| Error::NoSeedFound {
+        multisigner: root_multisigner.clone(),
+    })?;
+    // create fixed-length string to avoid reallocations
+    let mut full_address = String::with_capacity(seed_phrase.len() + derivation_path.len());
+    full_address.push_str(seed_phrase);
+    full_address.push_str(derivation_path);
+
+    let encryption = multisigner_to_encryption(root_multisigner);
+    let multi_signer = full_address_to_multisigner(full_address, encryption)?;
+
+    let address_details = AddressDetails {
+        seed_name,
+        path: derivation_path.to_string(),
+        has_pwd: false,
+        network_id: Some(network_key),
+        encryption,
+        secret_exposed: false,
+    };
+    Ok((multi_signer, address_details))
+}
+
+pub fn inject_derivations_has_pwd(
+    mut seed_derived_keys: Vec<SeedKeysPreview>,
+    seeds: HashMap<String, String>,
+) -> Result<Vec<SeedKeysPreview>> {
+    let mut sr25519_signers = HashMap::new();
+    let mut ed25519_signers = HashMap::new();
+    let mut ecdsa_signers = HashMap::new();
+
+    for (k, v) in &seeds {
+        let sr25519_public = sr25519::Pair::from_phrase(v, None).unwrap().0.public();
+        let ed25519_public = ed25519::Pair::from_phrase(v, None).unwrap().0.public();
+        let ecdsa_public = ecdsa::Pair::from_phrase(v, None).unwrap().0.public();
+        sr25519_signers.insert(sr25519_public, k);
+        ed25519_signers.insert(ed25519_public, k);
+        ecdsa_signers.insert(ecdsa_public, k);
+    }
+
+    for addr in seed_derived_keys.iter_mut() {
+        for derived_key in addr.derived_keys.iter_mut() {
+            let path = derived_key.derivation_path.clone().unwrap_or_default();
+            let seed_name = match addr.multisigner {
+                MultiSigner::Sr25519(p) => sr25519_signers.get(&p),
+                MultiSigner::Ed25519(p) => ed25519_signers.get(&p),
+                MultiSigner::Ecdsa(p) => ecdsa_signers.get(&p),
+            };
+
+            let seed_name = if let Some(seed_name) = seed_name {
+                seed_name
+            } else {
+                continue;
+            };
+
+            let seed_phrase = if let Some(seed_phrase) = seeds.get(seed_name.as_str()) {
+                seed_phrase
+            } else {
+                continue;
+            };
+
+            // create fixed-length string to avoid reallocation
+            let mut full_address = String::with_capacity(seed_phrase.len() + path.len());
+            full_address.push_str(seed_phrase);
+            full_address.push_str(&path);
+
+            let multisigner_pwdless =
+                full_address_to_multisigner(full_address, derived_key.encryption)?;
+            let multisigner =
+                base58_or_eth_to_multisigner(&derived_key.address, &derived_key.encryption)?;
+            derived_key.has_pwd = Some(multisigner_pwdless != multisigner);
+        }
+    }
+    Ok(seed_derived_keys)
+}
+
+/// Get all existing addresses from the database.
+#[cfg(feature = "active")]
+pub fn get_all_addresses(database: &sled::Db) -> Result<Vec<(MultiSigner, AddressDetails)>> {
+    let identities = open_tree(database, ADDRTREE)?;
+    let mut out: Vec<(MultiSigner, AddressDetails)> = Vec::new();
+    for (address_key_vec, address_entry) in identities.iter().flatten() {
+        let address_key = AddressKey::from_ivec(&address_key_vec)?;
+        let (multisigner, address_details) =
+            AddressDetails::process_entry_with_key_checked(&address_key, address_entry)?;
+        out.push((multisigner, address_details));
+    }
+    Ok(out)
+}
+
+#[cfg(feature = "active")]
+pub fn get_multisigner_by_address(
+    database: &sled::Db,
+    address: &AddressKey,
+) -> Result<Option<MultiSigner>> {
+    use definitions::helpers::ecdsa_public_to_eth_address;
+
+    Ok(get_all_addresses(database)?.into_iter().find_map(|(m, a)| {
+        // TODO: Keys in the system should have disambiguous addressing
+        // the current state of events has to do with the fact
+        // that some parts of UI may be addressing eth keys by
+        // Ethereum addresses and other parts by public keys
+
+        // First check if an etherum address is being requested
+        if a.encryption == Encryption::Ethereum {
+            if let MultiSigner::Ecdsa(ref public) = m {
+                if let Ok(addr) = ecdsa_public_to_eth_address(public) {
+                    if addr.as_ref() == address.key() {
+                        return Some(m);
+                    }
+                }
+            }
+        }
+
+        // TODO: for ecdsa address is not simply a public key
+        // Do a general check after Ethereum-specific one
+        if address.multi_signer() == &m {
+            return Some(m);
+        }
+        None
+    }))
+}
+
+/// Get all existing addresses for a given seed name from the database.
+#[cfg(feature = "active")]
+pub fn get_addresses_by_seed_name(
+    database: &sled::Db,
+    seed_name: &str,
+) -> Result<Vec<(MultiSigner, AddressDetails)>> {
+    Ok(get_all_addresses(database)?
+        .into_iter()
+        .filter(|(_, address_details)| address_details.seed_name == seed_name)
+        .collect())
+}
+
+/// Generate random phrase with given number of words.
+///
+/// The output is a **secret seed phrase**.
+///
+/// Its zeroization and safe handling are delegated to hardware.
+pub fn generate_random_phrase(words_number: u32) -> Result<String> {
+    let mnemonic_type = MnemonicType::for_word_count(words_number as usize)?;
+    let mnemonic = Mnemonic::new(mnemonic_type, Language::English);
+    Ok(mnemonic.into_phrase())
+}
+
+/// Check that key with a given path should be marked as a progeny of a key with
+/// exposed secret.
+///
+/// There could be false positives here, as the passwords are not stored
+/// anywhere in Vault, therefore if there are two passwords, there is no way to
+/// check if they are different.
+///
+/// <table>
+///     <tr><th>current</th><th>mark current?</th><th>exposed in set</th></tr>
+///     <tr><td><code>//Alice</code></td><td>-</td><td><code>//Ali</code></td></tr>
+///     <tr><td><code>//Alice//1</code></td><td>+</td><td><code>//Alice</code></td></tr>
+///     <tr><td><code>//Alice///&ltpassword&gt</code></td><td>+</td><td><code>//Alice</code></td></tr>
+///     <tr><td><code>//Alice//1///&ltpassword&gt</code></td><td>+</td><td><code>//Alice</code></td></tr>
+///     <tr><td><code>//Alice</code></td><td>-</td><td><code>//Alice///&ltpassword&gt</code></td></tr>
+///     <tr><td><code>//Alice//1</code></td><td>-</td><td><code>//Alice///&ltpassword&gt</code></td></tr>
+///     <tr><td><code>//Alice///&ltpassword1&gt</code></td><td>+</td><td><code>//Alice///&ltpassword0&gt</code></td></tr>
+///     <tr><td><code>//Alice//1///&ltpassword1&gt</code></td><td>+</td><td><code>//Alice///&ltpassword0&gt</code></td></tr>
+///
+/// </table>
+#[cfg(feature = "active")]
+pub(crate) fn is_potentially_exposed(
+    path: &str,
+    path_is_passworded: bool,
+    exposed_path: &str,
+    exposed_is_passworded: bool,
+) -> bool {
+    if (path == exposed_path) || path.starts_with(&format!("{exposed_path}/")) {
+        path_is_passworded || !exposed_is_passworded
+    } else {
+        false
+    }
+}
+
+/// Check if given key should be marked as exposed because its parent was
+/// exposed.
+///
+/// Input set is already filtered by seed name elsewhere.
+#[cfg(feature = "active")]
+fn has_parent_with_exposed_secret(
+    new_cropped_path: &str,
+    new_is_passworded: bool,
+    seed_name: &str,
+    database: &sled::Db,
+) -> Result<bool> {
+    Ok(get_addresses_by_seed_name(database, seed_name)?
+        .iter()
+        .any(|(_, address_details)| {
+            address_details.secret_exposed
+                && is_potentially_exposed(
+                    new_cropped_path,
+                    new_is_passworded,
+                    &address_details.path,
+                    address_details.has_pwd,
+                )
+        }))
+}
+
+/// Find all `(AddressKey, AddressDetails)` that must be marked as exposed
+/// because current key gets exposed.
+///
+/// Input set is already filtered by the seed name elsewhere.
+fn exposed_set(
+    exposed_cropped_path: &str,
+    exposed_is_passworded: bool,
+    filtered_set: Vec<(MultiSigner, AddressDetails)>,
+) -> Vec<(MultiSigner, AddressDetails)> {
+    filtered_set
+        .into_iter()
+        .filter(|(_, address_details)| {
+            is_potentially_exposed(
+                &address_details.path,
+                address_details.has_pwd,
+                exposed_cropped_path,
+                exposed_is_passworded,
+            )
+        })
+        .collect()
+}
+
+/// Data associated with address generation
+#[cfg(feature = "active")]
+pub(crate) struct PrepData {
+    /// information to be added into [`Batch`](sled::Batch) for [`ADDRTREE`]
+    /// update
+    pub(crate) address_prep: Vec<(AddressKey, AddressDetails)>,
+
+    /// [`Event`] set, to be added into history log
+    pub(crate) history_prep: Vec<Event>,
+}
+
+/// Prepare data for address generation using seed phrase, derivation path, and
+/// network specs.
+///
+/// Function generates addresses individually, and checks the database to
+/// avoid collisions and duplicates. However, sometimes within a single database
+/// transaction multiple addresses are generated, and each new address must be
+/// checked with already semi-prepared new addresses set, to avoid collisions,
+/// duplicates and overwriting.
+///
+/// Therefore, function inputs a set of `(AddressKey, AddressDetails)` values
+/// already processed in preparation for the current database transaction and if
+/// corresponding `AddressKey` is already there, adds new `NetworkSpecsKey` into
+/// `AddressDetails` field `network_id` instead of creating a new entry.
+///
+/// The output [`PrepData`] contains:
+///
+/// - `address_prep` set of `(AddressKey, AddressDetails)` values that
+/// eventually will be transformed into [`Batch`](sled::Batch) to update the
+/// `ADDRTREE` of the cold database
+/// - output `Event` set that will be eventually added into `HISTORY` as a part
+/// of single `Entry`(definitions::history::Entry)
+///
+/// Function creates only **one** address, and output `PrepData` **updates**
+/// address preparation set received as input.
+///
+/// Function gets used both on Active side (when generating test cold database
+/// with well-known addresses) and on Vault side (when real addresses are
+/// actually created by the user).
+///
+/// Secrets passed into this function are:
+///
+/// - seed phrase
+/// - path, possibly with secret password part (`///<...>`).
+///
+/// Both are input as `&str`. Seed phrase is combined with derivation path into
+/// a string, a reference to which is sent into inner logic of
+/// [`sp_core::crypto`]. Combined secret string is then zeroized here regardless
+/// of the address generation success.
+#[cfg(feature = "active")]
+pub(crate) fn create_address(
+    database: &sled::Db,
+    input_batch_prep: &[(AddressKey, AddressDetails)],
+    path: &str,
+    network_specs: Option<&NetworkSpecs>,
+    seed_name: &str,
+    seed_phrase: &str,
+) -> Result<PrepData> {
+    // Check that the seed phrase is not empty.
+    // In upstream, empty seed phrase means default Alice seed phrase.
+    if seed_phrase.is_empty() {
+        return Err(Error::EmptySeed);
+    }
+    // create fixed-length string to avoid reallocations
+    let mut full_address = String::with_capacity(seed_phrase.len() + path.len());
+    full_address.push_str(seed_phrase);
+    full_address.push_str(path);
+
+    let encryption = network_specs
+        .map(|ns| ns.encryption)
+        .unwrap_or(Encryption::Sr25519);
+
+    let multisigner = full_address_to_multisigner(full_address, encryption)?;
+
+    // TODO regex elements may keep the line with password somewhere, how to
+    // zeroize then? checked regex crate and it appears that only references are
+    // moved around; need to double-check later;
+    let (cropped_path, has_pwd) = match REG_PATH.captures(path) {
+        Some(caps) => match caps.name("path") {
+            Some(a) => (a.as_str(), caps.name("password").is_some()),
+            None => ("", caps.name("password").is_some()),
+        },
+        None => ("", false),
+    };
+
+    do_create_address(
+        database,
+        input_batch_prep,
+        cropped_path,
+        network_specs,
+        seed_name,
+        multisigner,
+        has_pwd,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+pub(crate) fn create_derivation_address(
+    database: &sled::Db,
+    input_batch_prep: &[(AddressKey, AddressDetails)],
+    path: &str,
+    network_specs: &NetworkSpecs,
+    seed_name: &str,
+    ss58: &str,
+    has_pwd: bool,
+) -> Result<PrepData> {
+    let multisigner = base58_or_eth_to_multisigner(ss58, &network_specs.encryption)?;
+    do_create_address(
+        database,
+        input_batch_prep,
+        path,
+        Some(network_specs),
+        seed_name,
+        multisigner,
+        has_pwd,
+    )
+}
+
+#[allow(clippy::too_many_arguments)]
+fn do_create_address(
+    database: &sled::Db,
+    input_batch_prep: &[(AddressKey, AddressDetails)],
+    cropped_path: &str,
+    network_specs: Option<&NetworkSpecs>,
+    seed_name: &str,
+    multisigner: MultiSigner,
+    has_pwd: bool,
+) -> Result<PrepData> {
+    // Check that the seed name is not empty.
+    if seed_name.is_empty() {
+        return Err(Error::EmptySeedName);
+    }
+    let mut address_prep = input_batch_prep.to_vec();
+    let mut history_prep = vec![];
+    let mut address_key: Option<AddressKey> = None;
+    let mut network_specs_key: Option<NetworkSpecsKey> = None;
+    if let Some(network_specs) = network_specs {
+        network_specs_key = Some(NetworkSpecsKey::from_parts(
+            &network_specs.genesis_hash,
+            &network_specs.encryption,
+        ));
+
+        let public_key = multisigner_to_public(&multisigner);
+        address_key = Some(AddressKey::new(
+            multisigner.clone(),
+            Some(network_specs.genesis_hash),
+        ));
+
+        // prepare history log here
+        let identity_history = IdentityHistory::get(
+            seed_name,
+            &network_specs.encryption,
+            &public_key,
+            cropped_path,
+            network_specs.genesis_hash,
+        );
+        history_prep.push(Event::IdentityAdded { identity_history });
+    }
+    if address_key.is_none() {
+        address_key = Some(AddressKey::new(multisigner.clone(), None))
+    }
+
+    // check if the same address key already participates in current database
+    // transaction
+
+    // number in `(AddressKey, AddressDetails)` set with same `AddressKey`, if
+    // found
+    let number_in_current = None;
+
+    match number_in_current {
+        // `AddressKey` already participates in transaction, just add
+        // `NetworkSpecsKey` into corresponding `AddressDetails` `network_id`
+        // set
+        Some(i) => {
+            let mod_entry = address_prep.remove(i);
+            address_prep.push(mod_entry);
+            Ok(PrepData {
+                address_prep,
+                history_prep,
+            })
+        }
+
+        // `AddressKey` is not yet in the transaction
+        None => {
+            // The only way to create address with `secret_exposed` marker is if
+            // the parent with exposed secret is in the database.
+            //
+            // If the address key already exists in the database, the
+            // `secret_exposed` flag will not be changed by extending key to
+            // another network.
+            let secret_exposed =
+                has_parent_with_exposed_secret(cropped_path, has_pwd, seed_name, database)?;
+
+            // check if the `AddressKey` is already in the database
+            let identities = open_tree(database, ADDRTREE)?;
+            if let Some(address_key) = address_key {
+                match identities.get(address_key.key()) {
+                    // `AddressKey` is in the database
+                    Ok(Some(address_entry)) => {
+                        if let Some(network_specs_key) = network_specs_key {
+                            let address_details = AddressDetails::from_entry_with_key_checked(
+                                &address_key,
+                                address_entry,
+                            )?;
+
+                            Err(Error::DerivationExists {
+                                multisigner,
+                                address_details: Box::new(address_details),
+                                network_specs_key,
+                            })
+                        } else {
+                            Ok(PrepData {
+                                address_prep,
+                                history_prep,
+                            })
+                        }
+                    }
+
+                    // `AddressKey` is not in the database either.
+                    // Make altogether new entry.
+                    Ok(None) => {
+                        let address_details = AddressDetails {
+                            seed_name: seed_name.to_string(),
+                            path: cropped_path.to_string(),
+                            has_pwd,
+                            network_id: network_specs_key,
+                            encryption: network_specs
+                                .map(|ns| ns.encryption)
+                                .unwrap_or(Encryption::Sr25519),
+                            secret_exposed,
+                        };
+                        address_prep.push((address_key, address_details));
+                        Ok(PrepData {
+                            address_prep,
+                            history_prep,
+                        })
+                    }
+
+                    // database error
+                    Err(e) => Err(e.into()),
+                }
+            } else {
+                Ok(PrepData {
+                    address_prep,
+                    history_prep,
+                })
+            }
+        }
+    }
+}
+
+/// Prepare data for default addresses generation for a seed.
+///
+/// Each network has a default derivation path, recorded in [`NetworkSpecs`]
+/// field `path_id`, normally `path_id` is `//<network_name>`.
+///
+/// This function prepares the generation of addresses with default derivation
+/// paths for each of the available networks. Additionally, if the
+/// `make_seed_keys` flag is set to `true` the function also prepares seed key
+/// generation.
+///
+/// The output [`PrepData`] contains:
+///
+/// - `address_prep` set of `(AddressKey, AddressDetails)` values that
+/// eventually will be transformed into [`Batch`](sled::Batch) to update the
+/// `ADDRTREE` of the cold database
+/// - output `Event` set that will be eventually added into `HISTORY` as a part
+/// of single `Entry`(definitions::history::Entry)
+///
+/// All output `PrepData` elements are generated within this function.
+/// It does not input addresses previously processed for the same transaction
+/// and therefore does not check for collisions, so this function always goes
+/// first, when there are no address additions planned yet.
+///
+/// This function inputs secret seed phrase as `&str`. It is passed as `&str`
+/// into `create_address` and used there.
+#[cfg(feature = "active")]
+fn populate_addresses(
+    database: &sled::Db,
+    seed_name: &str,
+    seed_phrase: &str,
+    make_seed_keys: bool,
+) -> Result<PrepData> {
+    // Set of `(AddressKey, AddressDetails)` to be added into the database.
+    // Set is updated and is used on each iteration of `create_address` to check
+    // for collisions.
+    let mut address_prep: Vec<(AddressKey, AddressDetails)> = Vec::new();
+
+    // Set of associated `Event::IdentityAdded(_)` entries.
+    // Gets updated after each successful `create_address` run.
+    let mut history_prep: Vec<Event> = Vec::new();
+
+    // Make seed keys if requested.
+    // Seed keys **must** be possible to generate,
+    // if a seed key has a collision with some other key, it is an error
+    if make_seed_keys {
+        let prep_data = create_address(database, &address_prep, "", None, seed_name, seed_phrase)?;
+        address_prep = prep_data.address_prep;
+        history_prep.extend_from_slice(&prep_data.history_prep);
+    }
+    Ok(PrepData {
+        address_prep,
+        history_prep,
+    })
+}
+
+/// Accept seed into Vault: add default addresses for a seed in the Vault
+/// database.
+///
+/// Each network has a default derivation path, recorded in [`NetworkSpecs`]
+/// field `path_id`, normally `path_id` is `//<network_name>`.
+///
+/// This function adds addresses with default derivation paths into the Vault
+/// database. If the `make_seed_keys` flag is set to `true`, seed keys are also
+/// added. History log is accordingly updated.
+///
+/// This function inputs secret seed phrase as `&str`. It is passed as `&str`
+/// into `populate_addresses` and used there.
+pub fn try_create_seed(
+    database: &sled::Db,
+    seed_name: &str,
+    seed_phrase: &str,
+    make_seed_keys: bool,
+) -> Result<()> {
+    let mut events: Vec<Event> = vec![Event::SeedCreated {
+        seed_created: seed_name.to_string(),
+    }];
+
+    let prep_data = populate_addresses(database, seed_name, seed_phrase, make_seed_keys)?;
+    events.extend_from_slice(&prep_data.history_prep);
+    TrDbCold::new()
+        .set_addresses(upd_id_batch(Batch::default(), prep_data.address_prep)) // add addresses just made in populate_addresses
+        .set_history(events_to_batch(database, events)?) // add corresponding history
+        .apply(database)
+}
+
+/// Creates seed into Vault: add default addresses for `derive_for_networks` in the Vault
+///
+/// Each network has a default derivation path, recorded in [`NetworkSpecs`]
+/// field `path_id`, normally `path_id` is `//<network_name>`.
+///
+/// `derive_for_networks` is a list of network ids to derive addresses for.
+pub fn create_key_set(
+    database: &sled::Db,
+    seed_name: &str,
+    seed_phrase: &str,
+    derive_for_networks: Vec<String>,
+) -> Result<()> {
+    let mut events: Vec<Event> = vec![Event::SeedCreated {
+        seed_created: seed_name.to_string(),
+    }];
+    // create seed root key
+    let mut prep_data = populate_addresses(database, seed_name, seed_phrase, true)?;
+
+    for network_key in derive_for_networks {
+        let network_spec_key = NetworkSpecsKey::from_hex(&network_key)?;
+        let network = get_network_specs(database, &network_spec_key)?.specs;
+        let new_prep = create_address(
+            database,
+            &prep_data.address_prep,
+            &network.path_id,
+            Some(&network),
+            seed_name,
+            seed_phrase,
+        )?;
+        prep_data
+            .address_prep
+            .extend_from_slice(&new_prep.address_prep);
+        prep_data
+            .history_prep
+            .extend_from_slice(&new_prep.history_prep);
+    }
+
+    events.extend_from_slice(&prep_data.history_prep);
+    TrDbCold::new()
+        .set_addresses(upd_id_batch(Batch::default(), prep_data.address_prep)) // add addresses just made
+        .set_history(events_to_batch(database, events)?) // add corresponding history
+        .apply(database)
+}
+
+/// Remove address from the Vault database.
+///
+/// Address is determined by [`MultiSigner`] and [`NetworkSpecsKey`] of the
+/// network.
+///
+/// Function removes network [`NetworkSpecsKey`] from `network_id` set in
+/// [`AddressDetails`] associated with provided [`MultiSigner`]. If no networks
+/// associated with [`AddressKey`] remain, i.e. `network_id` set becomes empty,
+/// whole entry is removed.
+pub fn remove_key(
+    database: &sled::Db,
+    multisigner: &MultiSigner,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<()> {
+    remove_keys_set(database, &[multisigner.to_owned()], network_specs_key)
+}
+
+/// Remove a set of addresses within a single network from the Vault database.
+///
+/// Address is determined by [`MultiSigner`] and [`NetworkSpecsKey`] of the
+/// network. Function inputs network `NetworkSpecsKey` and a set of
+/// `MultiSigner` values for which the address within a network must be deleted.
+///
+/// `NetworkSpecsKey` of the network is removed from `network_id` set in
+/// [`AddressDetails`] associated with each of the provided `MultiSigner`
+/// values. If no networks associated with [`AddressKey`] remain, i.e.
+/// `network_id` set becomes empty, whole associated entry is removed.
+pub fn remove_keys_set(
+    database: &sled::Db,
+    multiselect: &[MultiSigner],
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<()> {
+    let mut id_batch = Batch::default();
+    let mut events: Vec<Event> = Vec::new();
+    let network_specs = get_network_specs(database, network_specs_key)?;
+    for multisigner in multiselect.iter() {
+        let public_key = multisigner_to_public(multisigner);
+        let address_key =
+            AddressKey::new(multisigner.clone(), Some(network_specs.specs.genesis_hash));
+        let address_details = get_address_details(database, &address_key)?;
+        let identity_history = IdentityHistory::get(
+            &address_details.seed_name,
+            &network_specs.specs.encryption,
+            &public_key,
+            &address_details.path,
+            network_specs.specs.genesis_hash,
+        );
+        events.push(Event::IdentityRemoved { identity_history });
+        if address_details.network_id.as_ref() == Some(network_specs_key) {
+            id_batch.remove(address_key.key())
+        } else {
+            id_batch.insert(address_key.key(), address_details.encode())
+        }
+    }
+    TrDbCold::new()
+        .set_addresses(id_batch) // modify existing address entries
+        .set_history(events_to_batch(database, events)?) // add corresponding history
+        .apply(database)
+}
+
+/// Add a set of new derived addresses: N+1, N+2, etc into Vault database.
+///
+/// The number of the added addresses is set by `increment` input.
+///
+/// Input [`MultiSigner`] and [`NetworkSpecsKey`] determine the address, and the
+/// associated [`AddressDetails`] are found in the database. The derivations are
+/// based on the `path` from the `AddressDetails`.
+///
+/// If the database has addressed in given network with path that could be
+/// interpreted as `<path>//<number>`, the first derivation of the increment set
+/// is `<path>//<number>+1`. If no such addresses are existing in the database,
+/// the first derivation of the increment set is `<path>//0`.
+///
+/// Further derivations of the increment set have number part increased by 1
+/// until all requested derivations are generated.
+///
+/// Note: this is intended only for addresses not protected by the password
+/// (i.e. having derivation path **without** `///<password>` part). If the
+/// increment set is created on a passworded address, only public derivation
+/// path part will be used for increment set generation.
+///
+/// This function inputs secret seed phrase as `&str`. It is passed as `&str`
+/// into `create_address` and used there.
+///
+/// ## Example
+///
+/// User creates increment set of 3 on derivation `//user`. Resulting
+/// derivations are:
+///
+/// - `//user`
+/// - `//user//0`
+/// - `//user//1`
+/// - `//user//2`
+///
+/// User creates increment set of 2 on `//user` again, resulting derivations
+/// are:
+///
+/// - `//user`
+/// - `//user//0`
+/// - `//user//1`
+/// - `//user//2`
+/// - `//user//3`
+/// - `//user//4`
+///
+/// If the increment set of 2 is created on `//user//0`, resulting derivations
+/// would be:
+///
+/// - `//user`
+/// - `//user//0`
+/// - `//user//0//0`
+/// - `//user//0//1`
+/// - `//user//1`
+/// - `//user//2`
+/// - `//user//3`
+/// - `//user//4`
+pub fn create_increment_set(
+    database: &sled::Db,
+    increment: u32,
+    multisigner: &MultiSigner,
+    network_specs_key: &NetworkSpecsKey,
+    seed_phrase: &str,
+) -> Result<()> {
+    let network_specs = get_network_specs(database, network_specs_key)?;
+    let address_details = get_address_details(
+        database,
+        &AddressKey::new(multisigner.clone(), Some(network_specs.specs.genesis_hash)),
+    )?;
+
+    let existing_identities =
+        addresses_set_seed_name_network(database, &address_details.seed_name, network_specs_key)?;
+    let mut last_index = 0;
+    for (_, details) in existing_identities.iter() {
+        if let Some(("", suffix)) = details.path.split_once(&address_details.path) {
+            if let Some(could_be_number) = suffix.get(2..) {
+                if let Ok(index) = could_be_number.parse::<u32>() {
+                    last_index = std::cmp::max(index + 1, last_index);
+                }
+            }
+        }
+    }
+    let mut identity_adds: Vec<(AddressKey, AddressDetails)> = Vec::new();
+    let mut current_events: Vec<Event> = Vec::new();
+    for i in 0..increment {
+        let path = address_details.path.to_string() + "//" + &(last_index + i).to_string();
+        let prep_data = create_address(
+            database,
+            &identity_adds,
+            &path,
+            Some(&network_specs.specs),
+            &address_details.seed_name,
+            seed_phrase,
+        )?;
+        identity_adds = prep_data.address_prep;
+        current_events.extend_from_slice(&prep_data.history_prep);
+    }
+    let id_batch = upd_id_batch(Batch::default(), identity_adds);
+    TrDbCold::new()
+        .set_addresses(id_batch) // add created addresses
+        .set_history(events_to_batch(database, current_events)?) // add corresponding history
+        .apply(database)
+}
+
+/// Check derivation format and determine if it has a password.
+///
+/// Invalid derivation produces an error. Valid derivation is checked for
+/// password with regex.
+///
+// TODO regex and secrets, see `create_address` comments.
+pub fn is_passworded(path: &str) -> Result<bool> {
+    let passworded = REG_PATH
+        .captures(path)
+        .map(|caps| caps.name("password").is_some())
+        .ok_or_else(|| Error::InvalidDerivation(path.to_string()))?;
+
+    Ok(passworded)
+}
+
+/// Proposed derivation status.
+pub enum DerivationCheck {
+    /// Derivation has bad format, UI disables proceeding with address
+    /// generation.
+    BadFormat,
+
+    /// Derivation has password (`///<password>` part).
+    ///
+    /// Dynamic check in the database for already existing address is disabled.
+    Password,
+
+    /// Derivation has no password.
+    ///
+    /// Dynamic check in the database for already existing address is enabled.
+    ///
+    /// Inner content reflects if the already existing address is found and its
+    /// details.
+    NoPassword(Option<(MultiSigner, AddressDetails)>),
+}
+
+/// Preliminary checks if the user-proposed derivation could be used to create
+/// the address.
+///
+/// This function **does not** use secret phrase, and only searches the
+/// [`AddressDetails`] from the database for already existing addresses with
+/// same derivation path, in case there is no password in the proposed
+/// derivation.
+///
+/// If the proposed derivation is passworded, no checking could be done without
+/// using the seed phrase, and UI allows to proceed to try creating new address.
+/// If address already exists, an error would appear on the next stage.
+///
+/// No checking for collisions is done here (i.e. no checking if the same
+/// [`AddressKey`] will be produced for <secret phrase 1> + <derivation path 1>
+/// as for already known <secret phrase 2> + <derivation path 2>), because seed
+/// phrase is not known. If collision occurs, an error would appear on the next
+/// stage.
+///
+/// Note that the only errors in this function could appear from database
+/// malfunction when the database is being searched for the exact match, in case
+/// of password-free valid derivation. Bad format of the derivation is **not**
+/// an error, UI just does not allow to proceed.
+pub fn derivation_check(
+    database: &sled::Db,
+    seed_name: &str,
+    path: &str,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<DerivationCheck> {
+    match is_passworded(path) {
+        // Proposed derivation has password, no checks could be made, proceed.
+        Ok(true) => Ok(DerivationCheck::Password),
+
+        // Proposed derivation has no password, checking the database for exact
+        // coincidence.
+        Ok(false) => {
+            let mut found_exact = None;
+            for (multisigner, address_details) in get_all_addresses(database)?.into_iter() {
+                if (address_details.seed_name == seed_name) // seed name
+                    && (address_details.path == path) // derivation path, cropped part without password
+                    && (address_details.network_id.as_ref() == Some(network_specs_key)) // in this network
+                    && (!address_details.has_pwd)
+                // has no password to begin with
+                {
+                    found_exact = Some((multisigner, address_details));
+                    break;
+                }
+            }
+            Ok(DerivationCheck::NoPassword(found_exact))
+        }
+
+        // Proposed derivation is not suitable, UI would not allow to proceed.
+        // Note that this is **not** an error.
+        Err(_) => Ok(DerivationCheck::BadFormat),
+    }
+}
+
+/// Separate derivation path with password into non-secret part and password.
+///
+/// Function is expected to deal **only** with derivations having a password
+/// (i.e. with `///<password>` part of the derivation path). Password-free
+/// derivations do not get to the point in `navigator` where this function is
+/// called. Calling this function on password-free derivation is an error.
+///
+/// Function receives derivation path with secret password part, and outputs
+/// hard and soft derivations part and secret password part of the derivation
+/// path separately.
+///
+// TODO regex and secrets, see `create_address` comments.
+pub fn cut_path(path: &str) -> Result<(String, String)> {
+    let caps = REG_PATH
+        .captures(path)
+        .ok_or_else(|| Error::InvalidDerivation(path.to_string()))?;
+    let cropped_path = caps
+        .name("path")
+        .map(|a| a.as_str().to_string())
+        .ok_or_else(|| Error::InvalidDerivation(path.to_string()))?;
+    match caps.name("password") {
+        Some(pwd) => Ok((cropped_path, pwd.as_str().to_string())),
+        None => Err(Error::LostPwd),
+    }
+}
+
+/// Create a new address in the Vault database.
+///
+/// If the associated [`AddressKey`] already exists in the [`ADDRTREE`] tree of
+/// the Vault database, a new network [`NetworkSpecsKey`] is added into
+/// `network_id` set of the `AddressDetails`. If the `AddressKey` is new,
+/// a new `ADDRTREE` entry is made.
+///
+/// Secrets passed into this function are:
+///
+/// - seed phrase
+/// - path, possibly with secret password part (`///<...>`).
+///
+/// Both are input as `&str` and go directly in `create_address` (both) and
+/// `derivation_check` (path only).
+pub fn try_create_address(
+    database: &sled::Db,
+    seed_name: &str,
+    seed_phrase: &str,
+    path: &str,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<()> {
+    match derivation_check(database, seed_name, path, network_specs_key)? {
+        // UI should prevent user from getting into `try_create_address` if
+        // derivation has a bad format
+        DerivationCheck::BadFormat => Err(Error::InvalidDerivation(path.to_string())),
+
+        // UI should prevent user from getting into `try_create_address` if
+        // derivation already exists
+        DerivationCheck::NoPassword(Some((multisigner, address_details))) => {
+            Err(Error::DerivationExists {
+                multisigner,
+                address_details: Box::new(address_details),
+                network_specs_key: network_specs_key.to_owned(),
+            })
+        }
+
+        // Valid derivation:
+        // - without a password and not in the database
+        // - with password
+        // Vault can try adding either. Collisions (for both cases) and exact
+        // coincidence (for passworded derivation) could not have been checked
+        // preliminarily and would result in `create_address` errors here.
+        _ => {
+            let network_specs = get_network_specs(database, network_specs_key)?;
+            let prep_data = create_address(
+                database,
+                &Vec::new(), // a single address is created, no data to check against here
+                path,
+                Some(&network_specs.specs),
+                seed_name,
+                seed_phrase,
+            )?;
+            let id_batch = upd_id_batch(Batch::default(), prep_data.address_prep);
+            TrDbCold::new()
+                .set_addresses(id_batch) // add created address
+                .set_history(events_to_batch(database, prep_data.history_prep)?) // add corresponding history
+                .apply(database)
+        }
+    }
+}
+
+/// Generate test Alice addresses in test cold database.
+///
+/// Function wipes [`ADDRTREE`] and adds:
+///
+/// - seed key, i.e. seed addresses for all 3 default networks (Polkadot,
+/// Kusama, Westend)
+/// - addresses with default derivation path in each default network
+/// - address with `//Alice` derivation path in Westend network
+#[cfg(feature = "active")]
+pub fn generate_test_identities(database: &sled::Db) -> Result<()> {
+    // clear the tree
+    let entry_batch = make_batch_clear_tree(database, ADDRTREE)?;
+
+    // make a record that the tree was wiped
+    let mut events = vec![Event::IdentitiesWiped];
+
+    // data for adding seed addresses and addresses with default derivation path
+    let prep_data = populate_addresses(database, "Alice", ALICE_SEED_PHRASE, true)?;
+
+    // Address preparation set, to be used as following `create_address` input.
+    // Alice addresses are known and good, so checking them for collisions is
+    // not really necessary. This is here just for the sake of completedness.
+    let mut address_prep = prep_data.address_prep.to_vec();
+
+    // update events
+    events.extend_from_slice(&prep_data.history_prep);
+
+    for network_specs in get_all_networks(database)?.iter() {
+        if (network_specs.specs.name == "westend")
+            && (network_specs.specs.encryption == Encryption::Sr25519)
+        {
+            // data for adding address with `//Alice` derivation path in Westend
+            // network
+            let prep_data = create_address(
+                database,
+                &address_prep, // address
+                "//Alice",
+                Some(&network_specs.specs),
+                "Alice",
+                ALICE_SEED_PHRASE,
+            )?;
+            address_prep = prep_data.address_prep;
+            events.extend_from_slice(&prep_data.history_prep);
+        }
+    }
+
+    TrDbCold::new()
+        .set_addresses(upd_id_batch(entry_batch, address_prep)) // add created addresses
+        .set_history(events_to_batch(database, events)?) // add corresponding history
+        .apply(database)
+}
+
+/// Remove all addresses associated with given seed name from the Vault
+/// database.
+///
+/// Complementary action in frontend is removal of the seed data from the device
+/// key management system.
+pub fn remove_seed(database: &sled::Db, seed_name: &str) -> Result<()> {
+    // `Batch` to use
+    let mut identity_batch = Batch::default();
+
+    // All addresses with given seed name from the database
+    let id_set = get_addresses_by_seed_name(database, seed_name)?;
+    if id_set.is_empty() {
+        return Err(Error::NoKnownSeeds);
+    }
+
+    // Associated `Event` set
+    let mut events = vec![Event::SeedRemoved {
+        seed_name: seed_name.to_owned(),
+    }];
+
+    for (multisigner, address_details) in id_set.iter() {
+        if let Some(id) = &address_details.network_id {
+            let network_specs = get_network_specs(database, id)?;
+            let address_key =
+                AddressKey::new(multisigner.clone(), Some(network_specs.specs.genesis_hash));
+
+            // removal of all addresses corresponging to `AddressKey`
+            identity_batch.remove(address_key.key());
+
+            let public_key = multisigner_to_public(multisigner);
+            let (genesis_hash_vec, _) = id.genesis_hash_encryption()?;
+            let identity_history = IdentityHistory::get(
+                seed_name,
+                &address_details.encryption,
+                &public_key,
+                &address_details.path,
+                genesis_hash_vec,
+            );
+            // separate `Event` for each `NetworkSpecsKey` from `network_id` set
+            events.push(Event::IdentityRemoved { identity_history });
+        } else {
+            let address_key = AddressKey::new(multisigner.clone(), None);
+            identity_batch.remove(address_key.key());
+        }
+    }
+    TrDbCold::new()
+        .set_addresses(identity_batch) // modify addresses
+        .set_history(events_to_batch(database, events)?) // add corresponding history
+        .apply(database)
+}
+
+/// Check derivations before offering user to import them.
+///
+/// Vault allows bulk import only for valid derivations, with or without
+/// password. For passworded derivations no password is ever confirmed, as the
+/// user presumably has the derivations already recorded somewhere.
+///
+/// This function is used in `transaction_parsing::derivations` to check the
+/// incoming derivations once they are received in `derivations` qr code
+/// payload.
+///
+/// Note that once the derivations are checked, they are moved around as
+/// "checked derivations" and not checked anymore until they are used in
+/// `import_derivations`. Only checked derivations are written into the
+/// database temporary storage in `TRANSACTION` tree, same data is recovered as
+/// ensured by the checksum matching.
+pub fn check_derivation_set(derivations: &[String]) -> Result<()> {
+    for path in derivations.iter() {
+        if REG_PATH.captures(path).is_none() {
+            return Err(Error::InvalidDerivation(path.to_string()));
+        }
+    }
+    Ok(())
+}
+
+fn prepare_secret_key_for_export(
+    multisigner: &MultiSigner,
+    full_address: &str,
+    pwd: Option<&str>,
+) -> Result<[u8; 32]> {
+    match multisigner {
+        MultiSigner::Ed25519(public) => {
+            let ed25519_pair =
+                ed25519::Pair::from_string(full_address, pwd).map_err(Error::SecretStringError)?;
+            if public != &ed25519_pair.public() {
+                return Err(Error::WrongPassword);
+            }
+            Ok(ed25519_pair.seed().to_owned())
+        }
+        MultiSigner::Sr25519(public) => {
+            let (sr25519_pair, seed) = sr25519::Pair::from_string_with_seed(full_address, pwd)
+                .map_err(Error::SecretStringError)?;
+            if public != &sr25519_pair.public() {
+                return Err(Error::WrongPassword);
+            }
+            Ok(seed.ok_or_else(|| Error::NoSeedForKeyPair {
+                multisigner: multisigner.clone(),
+            })?)
+        }
+        MultiSigner::Ecdsa(public) => {
+            let ecdsa_pair =
+                ecdsa::Pair::from_string(full_address, pwd).map_err(Error::SecretStringError)?;
+            if public != &ecdsa_pair.public() {
+                return Err(Error::WrongPassword);
+            }
+            Ok(ecdsa_pair.seed())
+        }
+    }
+}
+
+/// Prepare **secret** key export screen struct [`MKeyDetails`].
+///
+/// For QR code the secret key information is put in format
+/// `secret:0x{}:{network genesis hash}` transformed into bytes, to be
+/// compatible with `polkadot-js` interface.
+///
+/// There is no direct mentioning of [`Encryption`] in the QR code. It is
+/// that user knows the key in which network and with what encryption they are
+/// exporting.
+///
+/// The QR code here contains sensitive information, and is made with special
+/// coloration, so that the difference with safe QR codes is immediately visible
+/// on screen.
+pub fn export_secret_key(
+    database: &sled::Db,
+    public_key: &str,
+    expected_seed_name: &str,
+    network_specs_key_hex: &str,
+    seed_phrase: &str,
+    mut key_password: Option<String>,
+) -> Result<MKeyDetails> {
+    let public_key = &unhex(public_key)?;
+    let network_specs_key = &NetworkSpecsKey::from_hex(network_specs_key_hex)?;
+    let network_specs = get_network_specs(database, network_specs_key)?;
+    let multisigner = &get_multisigner(public_key, &network_specs.specs.encryption)?;
+    let address_key = AddressKey::new(multisigner.clone(), Some(network_specs.specs.genesis_hash));
+    let address_details = get_address_details(database, &address_key)?;
+    if address_details.seed_name != expected_seed_name {
+        return Err(Error::SeedNameNotMatching {
+            address_key,
+            expected_seed_name: expected_seed_name.to_string(),
+            real_seed_name: address_details.seed_name,
+        });
+    }
+    if address_details.network_id.as_ref() != Some(network_specs_key) {
+        return Err(Error::NetworkSpecsKeyForAddressNotFound {
+            network_specs_key: network_specs_key.to_owned(),
+            address_key,
+        });
+    }
+    let public_key = multisigner_to_public(multisigner);
+
+    let style = address_details.identicon_style();
+    let address = Address {
+        path: address_details.path.to_string(),
+        has_pwd: address_details.has_pwd,
+        identicon: make_identicon_from_multisigner(multisigner, style),
+        seed_name: address_details.seed_name.to_string(),
+        secret_exposed: true,
+    };
+
+    let network_info = MSCNetworkInfo {
+        network_title: network_specs.specs.name,
+        network_logo: network_specs.specs.logo,
+        network_specs_key: network_specs_key_hex.to_owned(),
+    };
+
+    let database_addresses = get_addresses_by_seed_name(database, expected_seed_name)?;
+
+    let exposed_addresses = exposed_set(
+        &address_details.path,
+        address_details.has_pwd,
+        database_addresses,
+    );
+
+    let mut identity_batch = Batch::default();
+
+    for (x_multisigner, x_address_details) in exposed_addresses.into_iter() {
+        let mut new_address_details = x_address_details;
+        new_address_details.secret_exposed = true;
+        if let Some(id) = &new_address_details.network_id {
+            let network_specs = get_network_specs(database, id)?;
+            identity_batch.insert(
+                AddressKey::new(
+                    x_multisigner.clone(),
+                    Some(network_specs.specs.genesis_hash),
+                )
+                .key(),
+                new_address_details.encode(),
+            )
+        }
+    }
+
+    let history_batch = events_to_batch(
+        database,
+        vec![Event::SecretWasExported {
+            identity_history: IdentityHistory::get(
+                &address_details.seed_name,
+                &address_details.encryption,
+                &public_key,
+                &address_details.path,
+                network_specs.specs.genesis_hash,
+            ),
+        }],
+    )?;
+
+    let qr = generate_secret_qr(
+        multisigner,
+        &address_details,
+        &network_specs.specs.genesis_hash,
+        seed_phrase,
+        key_password.as_deref(),
+    )?;
+    key_password.zeroize();
+
+    TrDbCold::new()
+        .set_addresses(identity_batch) // modify addresses
+        .set_history(history_batch) // add corresponding history
+        .apply(database)?;
+
+    Ok(MKeyDetails {
+        qr,
+        pubkey: hex::encode(public_key),
+        network_info,
+        base58: print_multisigner_as_base58_or_eth(
+            multisigner,
+            Some(network_specs.specs.base58prefix),
+            address_details.encryption,
+        ),
+        address,
+    })
+}
+
+fn generate_secret_qr(
+    multisigner: &MultiSigner,
+    address_details: &AddressDetails,
+    genesis_hash: &H256,
+    seed_phrase: &str,
+    pwd: Option<&str>,
+) -> Result<QrData> {
+    // create fixed-length string to avoid reallocations
+
+    let mut full_address = String::with_capacity(seed_phrase.len() + address_details.path.len());
+    full_address.push_str(seed_phrase);
+    full_address.push_str(&address_details.path);
+
+    let mut secret = match prepare_secret_key_for_export(multisigner, &full_address, pwd) {
+        Ok(a) => {
+            full_address.zeroize();
+            a
+        }
+        Err(e) => {
+            full_address.zeroize();
+            return Err(e);
+        }
+    };
+
+    let qr = QrData::Sensitive {
+        data: format!(
+            "secret:0x{}:{}",
+            hex::encode(secret),
+            hex::encode(genesis_hash)
+        )
+        .as_bytes()
+        .to_vec(),
+    };
+    secret.zeroize();
+    Ok(qr)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn potentially_exposed() {
+        assert!(is_potentially_exposed("//A//0", false, "//A", false));
+        assert!(!is_potentially_exposed("//A//0", false, "//A", true));
+        assert!(is_potentially_exposed("//A//0", true, "//A", false));
+        assert!(!is_potentially_exposed("//A", false, "//A//0", false));
+        assert!(is_potentially_exposed("//A//0", false, "//A//0", false));
+        assert!(is_potentially_exposed("//A/0", false, "//A", false));
+        assert!(is_potentially_exposed("//A//0//0", true, "//A", true));
+        assert!(!is_potentially_exposed("//A//0", false, "//B", false));
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/interface_signer.rs.html b/rustdocs/src/db_handling/interface_signer.rs.html new file mode 100644 index 0000000000..71b9d49782 --- /dev/null +++ b/rustdocs/src/db_handling/interface_signer.rs.html @@ -0,0 +1,1767 @@ +interface_signer.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+
//! Utils to communicate with the Vault frontend
+use bip39::{Language, Mnemonic};
+use definitions::helpers::IdenticonStyle;
+use hex;
+use parity_scale_codec::Encode;
+use sp_core::{blake2_256, sr25519, Pair};
+use sp_runtime::MultiSigner;
+use std::collections::{HashMap, HashSet};
+use zeroize::{Zeroize, ZeroizeOnDrop};
+
+use constants::{HISTORY, MAX_WORDS_DISPLAY, TRANSACTION};
+use definitions::navigation::{Identicon, MAddressCard, MKeyAndNetworkCard, MKeysNew, QrData};
+use definitions::network_specs::NetworkSpecs;
+use definitions::{
+    crypto::Encryption,
+    helpers::{
+        make_identicon_from_multisigner, multisigner_to_public, pic_meta,
+        print_multisigner_as_base58_or_eth,
+    },
+    keyring::{AddressKey, NetworkSpecsKey, VerifierKey},
+    navigation::{
+        Address, DerivationCheck as NavDerivationCheck, DerivationDestination, DerivationEntry,
+        DerivationPack, MBackup, MDeriveKey, MKeyDetails, MKeysCard, MMMNetwork, MMNetwork,
+        MManageMetadata, MMetadataRecord, MNetworkDetails, MNetworkMenu, MNewSeedBackup, MRawKey,
+        MSCNetworkInfo, MTypesInfo, MVerifier, Network, SeedNameCard,
+    },
+    network_specs::{OrderedNetworkSpecs, ValidCurrentVerifier},
+    qr_transfers::ContentLoadTypes,
+    users::AddressDetails,
+};
+
+use crate::helpers::{
+    get_address_details, get_all_networks, get_general_verifier, get_meta_values_by_name,
+    get_meta_values_by_name_version, get_network_specs, make_batch_clear_tree, open_tree,
+    try_get_types,
+};
+use crate::identities::{
+    derivation_check, generate_random_phrase, get_addresses_by_seed_name, get_all_addresses,
+    DerivationCheck,
+};
+use crate::{db_transactions::TrDbCold, helpers::get_valid_current_verifier};
+use crate::{Error, Result};
+
+/// Return a `Vec` with all seed names with seed key identicons if seed key is
+/// available.
+///
+/// Function processes all seeds known to Vault KMS (which are input as
+/// `&[String]`), including seeds without any corresponding addresses currently
+/// known to Vault (orphans).
+///
+/// If the same seed has more than one seed key in the database, i.e. it has
+/// been used to create seed keys with more than one
+/// [`Encryption`](definitions::crypto::Encryption) algorithm, only one
+/// identicon is selected, in order of preference: `Sr25519`, `Ed25519`,
+/// `Ecdsa`.
+pub fn get_all_seed_names_with_identicons(
+    database: &sled::Db,
+    names_phone_knows: &[String],
+) -> Result<Vec<SeedNameCard>> {
+    let mut data_set: HashMap<String, Identicon> = HashMap::new();
+    let mut derivation_count: HashMap<String, u32> = HashMap::new();
+    let mut used_in_networks: HashMap<String, HashSet<String>> = HashMap::new();
+    let mut network_names_cache: HashMap<NetworkSpecsKey, String> = HashMap::new();
+
+    for (multisigner, address_details) in get_all_addresses(database)?.into_iter() {
+        if address_details.is_root() {
+            let identicon =
+                make_identicon_from_multisigner(&multisigner, address_details.identicon_style());
+            data_set.insert(address_details.seed_name.to_string(), identicon);
+        } else {
+            if let Some(network) = address_details.network_id {
+                if !network_names_cache.contains_key(&network) {
+                    let name = get_network_specs(database, &network)?.specs.name;
+                    network_names_cache.insert(network.clone(), name);
+                }
+                if let Some(name) = network_names_cache.get(&network) {
+                    used_in_networks
+                        .entry(address_details.seed_name.to_string())
+                        .or_default()
+                        .insert(name.to_string());
+                }
+            }
+
+            derivation_count
+                .entry(address_details.seed_name.to_string())
+                .and_modify(|e| *e += 1)
+                .or_insert(1);
+            if data_set.get(&address_details.seed_name).is_none() {
+                data_set.insert(address_details.seed_name.to_string(), Identicon::default());
+            }
+        }
+    }
+    for x in names_phone_knows.iter() {
+        if data_set.get(x).is_none() {
+            data_set.insert(x.to_string(), Identicon::default());
+        }
+    }
+    let mut res: Vec<_> = data_set
+        .into_iter()
+        .map(|(seed_name, identicon)| {
+            let mut used_in_networks = used_in_networks
+                .get(&seed_name)
+                .cloned()
+                .map(|hs| hs.into_iter().collect())
+                .unwrap_or_else(Vec::new);
+            used_in_networks.sort();
+            SeedNameCard {
+                seed_name: seed_name.clone(),
+                identicon,
+                derived_keys_count: *derivation_count.get(&seed_name).unwrap_or(&0),
+                used_in_networks,
+            }
+        })
+        .collect();
+    res.sort_by(|a, b| a.seed_name.cmp(&b.seed_name));
+    Ok(res)
+}
+
+/// Return a `Vec` with address-associated public data for all addresses from the
+/// Vault database.
+///
+/// Function is used to show users all possible addresses, when selecting the
+/// address to generate
+/// [`SufficientCrypto`](definitions::crypto::SufficientCrypto) for signing
+/// updates with the Vault.
+pub fn print_all_identities(database: &sled::Db) -> Result<Vec<MRawKey>> {
+    Ok(get_all_addresses(database)?
+        .into_iter()
+        .filter_map(|(multisigner, address_details)| {
+            match &address_details.network_id {
+                Some(id) => {
+                    let network_specs = get_network_specs(database, id).unwrap();
+
+                    let address_key = AddressKey::new(
+                        multisigner.clone(),
+                        Some(network_specs.specs.genesis_hash),
+                    ); // to click
+                    let public_key = multisigner_to_public(&multisigner); // to display
+                    let style = address_details.identicon_style();
+                    let identicon = make_identicon_from_multisigner(&multisigner, style);
+                    Some(MRawKey {
+                        address: Address {
+                            identicon,
+                            has_pwd: address_details.has_pwd,
+                            path: address_details.path,
+                            secret_exposed: address_details.secret_exposed,
+                            seed_name: address_details.seed_name,
+                        },
+                        address_key: hex::encode(address_key.key()),
+                        public_key: hex::encode(public_key),
+                        network_logo: network_specs.specs.logo,
+                    })
+                }
+                None => None,
+            }
+        })
+        .collect())
+}
+
+pub fn keys_by_seed_name(database: &sled::Db, seed_name: &str) -> Result<MKeysNew> {
+    let (root, derived): (Vec<_>, Vec<_>) = get_addresses_by_seed_name(database, seed_name)?
+        .into_iter()
+        .partition(|(_, address)| address.is_root());
+
+    let root = root.first().map(|root| {
+        let address = Address {
+            has_pwd: false,
+            path: String::new(),
+            seed_name: seed_name.to_string(),
+            identicon: make_identicon_from_multisigner(&root.0, root.1.identicon_style()),
+            secret_exposed: root.1.secret_exposed,
+        };
+        // TODO: root always prefix 42 for substrate.
+        let address_key = hex::encode(AddressKey::new(root.0.clone(), None).key());
+        MAddressCard {
+            base58: print_multisigner_as_base58_or_eth(&root.0, None, root.1.encryption),
+            address_key,
+            address,
+        }
+    });
+
+    let mut set = vec![];
+    for (multisigner, address_details) in derived.into_iter() {
+        if let Some(id) = &address_details.network_id {
+            let network_specs = get_network_specs(database, id)?;
+
+            let identicon =
+                make_identicon_from_multisigner(&multisigner, address_details.identicon_style());
+            let base58 = print_multisigner_as_base58_or_eth(
+                &multisigner,
+                Some(network_specs.specs.base58prefix),
+                network_specs.specs.encryption,
+            );
+            let address_key = hex::encode(
+                AddressKey::new(multisigner.clone(), Some(network_specs.specs.genesis_hash)).key(),
+            );
+            let address = Address {
+                path: address_details.path,
+                has_pwd: address_details.has_pwd,
+                identicon,
+                secret_exposed: address_details.secret_exposed,
+                seed_name: seed_name.to_owned(),
+            };
+            let key = MKeysCard {
+                address,
+                base58,
+                address_key,
+                swiped: false,
+            };
+            let network_specs_key = NetworkSpecsKey::from_parts(
+                &network_specs.specs.genesis_hash,
+                &network_specs.specs.encryption,
+            );
+            let network = MSCNetworkInfo {
+                network_title: network_specs.specs.name,
+                network_logo: network_specs.specs.logo,
+                network_specs_key: hex::encode(network_specs_key.key()),
+            };
+
+            set.push(MKeyAndNetworkCard { key, network })
+        }
+    }
+
+    Ok(MKeysNew { root, set })
+}
+
+/// Get address-associated public data for all addresses from the Vault
+/// database with given seed name and network [`NetworkSpecsKey`].
+pub fn addresses_set_seed_name_network(
+    database: &sled::Db,
+    seed_name: &str,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<Vec<(MultiSigner, AddressDetails)>> {
+    Ok(get_addresses_by_seed_name(database, seed_name)?
+        .into_iter()
+        .filter(|(_, address_details)| {
+            address_details.network_id.as_ref() == Some(network_specs_key)
+        })
+        .collect())
+}
+
+/// Return `Vec` with network information for all networks in the Vault database,
+/// with bool indicator which one is currently selected.
+pub fn show_all_networks_with_flag(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<MNetworkMenu> {
+    let mut networks: Vec<_> = get_all_networks(database)?
+        .into_iter()
+        .map(|network| {
+            let network_specs_key_current =
+                NetworkSpecsKey::from_parts(&network.specs.genesis_hash, &network.specs.encryption);
+            let mut n: Network = network.into();
+            n.selected = network_specs_key == &network_specs_key_current;
+            n
+        })
+        .collect();
+    networks.sort_by(|a, b| a.order.cmp(&b.order));
+
+    Ok(MNetworkMenu { networks })
+}
+
+/// Make `Vec` with network information for all networks in the Vault database,
+/// without any selection.
+pub fn show_all_networks(database: &sled::Db) -> Result<Vec<MMNetwork>> {
+    let networks = get_all_networks(database)?;
+    let mut networks = networks
+        .into_iter()
+        .map(|n| MMNetwork {
+            key: hex::encode(
+                NetworkSpecsKey::from_parts(&n.specs.genesis_hash, &n.specs.encryption).key(),
+            ),
+            title: n.specs.name,
+            logo: n.specs.logo,
+            order: n.order,
+            path_id: n.specs.path_id,
+        })
+        .collect::<Vec<_>>();
+    networks.sort_by(|a, b| a.order.cmp(&b.order));
+
+    Ok(networks)
+}
+
+/// Sort database networks by the order and get the network specs for the first
+/// network on the list.
+///
+/// If there are no networks in the system, throws error.
+pub fn first_network(database: &sled::Db) -> Result<Option<OrderedNetworkSpecs>> {
+    let mut networks = get_all_networks(database)?;
+    if networks.is_empty() {
+        return Err(Error::NoNetworksAvailable);
+    }
+    networks.sort_by(|a, b| a.order.cmp(&b.order));
+    Ok(networks.first().cloned())
+}
+
+/// Prepare export key screen struct [`MKeyDetails`].
+///
+/// For QR code the address information is put in format
+/// `substrate:{public key as base58}:0x{network genesis hash}`
+/// transformed into bytes, to be compatible with `polkadot-js` interface.
+///
+/// Note that no [`Encryption`](definitions::crypto::Encryption) algorithm
+/// information is contained in the QR code. If there are multiple `Encryption`
+/// algorithms supported by the network, the only visible difference in exports
+/// would be the identicon.
+pub fn export_key(
+    database: &sled::Db,
+    multisigner: &MultiSigner,
+    expected_seed_name: &str,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<MKeyDetails> {
+    let ordered_network_specs = get_network_specs(database, network_specs_key)?;
+    let network_specs = ordered_network_specs.specs;
+    let address_key = AddressKey::new(multisigner.clone(), Some(network_specs.genesis_hash));
+    let address_details = get_address_details(database, &address_key);
+    let address_details = if address_details.is_err() {
+        let address_key = AddressKey::new(multisigner.clone(), None);
+        get_address_details(database, &address_key)
+    } else {
+        address_details
+    };
+
+    let address_details = address_details?;
+
+    if address_details.seed_name != expected_seed_name {
+        return Err(Error::SeedNameNotMatching {
+            address_key,
+            expected_seed_name: expected_seed_name.to_string(),
+            real_seed_name: address_details.seed_name,
+        });
+    }
+    let base58 = print_multisigner_as_base58_or_eth(
+        multisigner,
+        Some(network_specs.base58prefix),
+        network_specs.encryption,
+    );
+
+    let public_key = multisigner_to_public(multisigner);
+    let identicon = make_identicon_from_multisigner(multisigner, address_details.identicon_style());
+    let qr = {
+        if address_details.network_id.as_ref() == Some(network_specs_key) {
+            let prefix = if network_specs.encryption == Encryption::Ethereum {
+                "ethereum"
+            } else {
+                "substrate"
+            };
+            QrData::Regular {
+                data: format!(
+                    "{}:{}:0x{}",
+                    prefix,
+                    base58,
+                    hex::encode(network_specs.genesis_hash)
+                )
+                .as_bytes()
+                .to_vec(),
+            }
+        } else {
+            return Err(Error::NetworkSpecsKeyForAddressNotFound {
+                network_specs_key: network_specs_key.to_owned(),
+                address_key,
+            });
+        }
+    };
+    let address = Address {
+        path: address_details.path,
+        has_pwd: address_details.has_pwd,
+        identicon,
+        seed_name: address_details.seed_name,
+        secret_exposed: address_details.secret_exposed,
+    };
+
+    let network_info = MSCNetworkInfo {
+        network_title: network_specs.name,
+        network_logo: network_specs.logo,
+        network_specs_key: hex::encode(network_specs_key.key()),
+    };
+
+    Ok(MKeyDetails {
+        qr,
+        pubkey: hex::encode(public_key),
+        network_info,
+        base58,
+        address,
+    })
+}
+
+/// Prepare seed backup screen struct [`MBackup`] for given seed name.
+///
+/// Function inputs seed name, outputs `Vec` with all known derivations in all
+/// networks.
+pub fn backup_prep(database: &sled::Db, seed_name: &str) -> Result<MBackup> {
+    let networks = get_all_networks(database)?;
+    if networks.is_empty() {
+        return Err(Error::NoNetworksAvailable);
+    }
+    let mut derivations = Vec::new();
+    for network in networks.into_iter() {
+        let id_set: Vec<_> = addresses_set_seed_name_network(
+            database,
+            seed_name,
+            &NetworkSpecsKey::from_parts(&network.specs.genesis_hash, &network.specs.encryption),
+        )?
+        .into_iter()
+        .map(|a| DerivationEntry {
+            path: a.1.path,
+            has_pwd: a.1.has_pwd,
+        })
+        .collect();
+        if !id_set.is_empty() {
+            derivations.push(DerivationPack {
+                network_title: network.specs.name,
+                network_logo: network.specs.logo,
+                network_order: network.order.to_string(),
+                id_set,
+            });
+        }
+    }
+
+    derivations.sort_by(|a, b| a.network_order.cmp(&b.network_order));
+
+    Ok(MBackup {
+        seed_name: seed_name.to_string(),
+        derivations,
+    })
+}
+
+/// Prepare key derivation screen struct [`MDeriveKey`].
+///
+/// Function inputs seed name, network [`NetworkSpecsKey`] and user-suggested
+/// derivation, outputs struct with derived address data and, if the derived
+/// address already exists in the database, shows the its data.
+///
+// TODO: the `collision` part is actually a mislabel, it is really
+// `derivation_exists`, and is referring to the derivation with same
+// [`AddressKey`] in same network (that would be cause by same seed used, same
+// derivation path and same password if any password exists) - this mislabel
+// should be corrected, after json fix; `seed_name` in existing derivation
+// display also seems to be excessive
+pub fn derive_prep(
+    _database: &sled::Db,
+    seed_name: &str,
+    _collision: Option<(MultiSigner, AddressDetails)>,
+    _suggest: &str,
+    _keyboard: bool,
+) -> Result<MDeriveKey> {
+    Ok(MDeriveKey {
+        seed_name: seed_name.to_string(),
+    })
+}
+
+/// Return [`NavDerivationCheck`] with allowed action details for new key derivation.
+///
+/// Function is used to dynamically check from the frontend if user is allowed
+/// to proceed with the proposed derived key generation.
+///
+/// User is allowed to try to proceed only if the derivation is valid and, in
+/// case of derivations without password, if the derivation does not already
+/// exist in the database. Passworded valid derivations are allowed to proceed,
+/// but result in an error later on, if the derivation exists.
+///
+/// Function makes only preliminary check on password-free derivations, it
+/// **does not** use seed phrase and does not calculate the [`AddressKey`], i.e.
+/// it can't check passworded derivations, and allows them to proceed anyway.
+pub fn dynamic_path_check(
+    database: &sled::Db,
+    seed_name: &str,
+    path: &str,
+    network_specs_key_hex: &str,
+) -> NavDerivationCheck {
+    match NetworkSpecsKey::from_hex(network_specs_key_hex) {
+        Ok(key) => dynamic_path_check_unhexed(database, seed_name, path, &key),
+        Err(e) => NavDerivationCheck {
+            error: Some(e.to_string()),
+            ..Default::default()
+        },
+    }
+}
+
+fn dynamic_path_check_unhexed(
+    database: &sled::Db,
+    seed_name: &str,
+    path: &str,
+    network_specs_key: &NetworkSpecsKey,
+) -> NavDerivationCheck {
+    match get_network_specs(database, network_specs_key) {
+        Ok(ordered_network_specs) => {
+            match derivation_check(database, seed_name, path, network_specs_key) {
+                Ok(DerivationCheck::BadFormat) => NavDerivationCheck {
+                    button_good: false,
+                    ..Default::default()
+                },
+                Ok(DerivationCheck::Password) => NavDerivationCheck {
+                    button_good: true,
+                    where_to: Some(DerivationDestination::Pwd),
+                    ..Default::default()
+                },
+                Ok(DerivationCheck::NoPassword(None)) => NavDerivationCheck {
+                    button_good: true,
+                    where_to: Some(DerivationDestination::Pin),
+                    ..Default::default()
+                },
+                Ok(DerivationCheck::NoPassword(Some((multisigner, address_details)))) => {
+                    let address_base58 = print_multisigner_as_base58_or_eth(
+                        &multisigner,
+                        Some(ordered_network_specs.specs.base58prefix),
+                        address_details.encryption,
+                    );
+                    let identicon = make_identicon_from_multisigner(
+                        &multisigner,
+                        address_details.identicon_style(),
+                    );
+                    let address_key = hex::encode(
+                        AddressKey::new(
+                            multisigner,
+                            Some(ordered_network_specs.specs.genesis_hash),
+                        )
+                        .key(),
+                    );
+                    let collision_display = MAddressCard {
+                        base58: address_base58,
+                        address_key,
+                        address: Address {
+                            path: address_details.path,
+                            has_pwd: address_details.has_pwd,
+                            identicon,
+                            seed_name: seed_name.to_string(),
+                            secret_exposed: address_details.secret_exposed,
+                        },
+                    };
+                    NavDerivationCheck {
+                        button_good: false,
+                        collision: Some(collision_display),
+                        ..Default::default()
+                    }
+                }
+                Err(e) => NavDerivationCheck {
+                    error: Some(e.to_string()),
+                    ..Default::default()
+                },
+            }
+        }
+        Err(e) => NavDerivationCheck {
+            error: Some(e.to_string()),
+            ..Default::default()
+        },
+    }
+}
+
+/// Return [`MNetworkDetails`] with network specs and metadata set information
+/// for network with given [`NetworkSpecsKey`].
+pub fn network_details_by_key(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<MNetworkDetails> {
+    let OrderedNetworkSpecs {
+        specs:
+            NetworkSpecs {
+                base58prefix,
+                color,
+                decimals,
+                encryption,
+                genesis_hash,
+                logo,
+                name,
+                path_id,
+                secondary_color,
+                title,
+                unit,
+            },
+        order,
+    } = get_network_specs(database, network_specs_key)?;
+    let verifier_key = VerifierKey::from_parts(genesis_hash);
+    let general_verifier = get_general_verifier(database)?;
+    let current_verifier = get_valid_current_verifier(database, &verifier_key)?;
+    let meta: Vec<_> = get_meta_values_by_name(database, &name)?
+        .into_iter()
+        .map(|m| {
+            let meta_hash = blake2_256(&m.meta);
+            let meta_id_pic = pic_meta(&meta_hash);
+
+            MMetadataRecord {
+                specname: m.name,
+                specs_version: m.version.to_string(),
+                meta_hash: hex::encode(meta_hash),
+                meta_id_pic,
+            }
+        })
+        .collect();
+
+    let (ttype, details) = match current_verifier {
+        ValidCurrentVerifier::General => ("general".to_string(), general_verifier.show_card()),
+        ValidCurrentVerifier::Custom { v } => ("custom".to_string(), v.show_card()),
+    };
+    let current_verifier = MVerifier { ttype, details };
+
+    Ok(MNetworkDetails {
+        base58prefix,
+        color,
+        decimals,
+        encryption,
+        genesis_hash,
+        logo,
+        name,
+        order: order.to_string(),
+        path_id,
+        secondary_color,
+        title,
+        unit,
+        current_verifier,
+        meta,
+    })
+}
+
+/// Return [`MManageMetadata`] with metadata details for network with given
+/// [`NetworkSpecsKey`] and given version.
+pub fn metadata_details(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+    network_version: u32,
+) -> Result<MManageMetadata> {
+    let ordered_network_specs = get_network_specs(database, network_specs_key)?;
+    let network_specs = ordered_network_specs.specs;
+    let meta_values =
+        get_meta_values_by_name_version(database, &network_specs.name, network_version)?;
+    let networks: Vec<_> = get_all_networks(database)?
+        .into_iter()
+        .filter(|a| a.specs.name == network_specs.name)
+        .map(|network| MMMNetwork {
+            title: network.specs.title,
+            logo: network.specs.logo,
+            order: network.order as u32,
+            current_on_screen: &NetworkSpecsKey::from_parts(
+                &network.specs.genesis_hash,
+                &network.specs.encryption,
+            ) == network_specs_key,
+        })
+        .collect();
+
+    let meta_hash = blake2_256(&meta_values.meta);
+    let meta_id_pic = pic_meta(&meta_hash);
+    Ok(MManageMetadata {
+        name: network_specs.name,
+        version: network_version.to_string(),
+        meta_hash: hex::encode(meta_hash),
+        meta_id_pic,
+        networks,
+    })
+}
+
+/// Make types status display.
+pub fn show_types_status(database: &sled::Db) -> Result<MTypesInfo> {
+    match try_get_types(database)? {
+        Some(a) => {
+            let (types_hash, types_id_pic) = ContentLoadTypes::generate(&a).show();
+            Ok(MTypesInfo {
+                types_on_file: true,
+                types_hash: Some(types_hash),
+                types_id_pic: Some(types_id_pic),
+            })
+        }
+        None => Ok(MTypesInfo {
+            types_on_file: false,
+            types_hash: None,
+            types_id_pic: None,
+        }),
+    }
+}
+
+/// Generate new random seed phrase, make identicon for `sr25519` public key,
+/// and send to Vault screen.
+pub fn print_new_seed(seed_name: &str) -> Result<MNewSeedBackup> {
+    let seed_phrase = generate_random_phrase(24)?;
+    let sr25519_pair =
+        sr25519::Pair::from_string(&seed_phrase, None).map_err(Error::SecretStringError)?;
+    let identicon = make_identicon_from_multisigner(
+        &MultiSigner::Sr25519(sr25519_pair.public()),
+        IdenticonStyle::Dots,
+    );
+    Ok(MNewSeedBackup {
+        seed: seed_name.to_string(),
+        seed_phrase,
+        identicon,
+    })
+}
+
+/// Get database history tree checksum to be displayed in log screen.
+pub fn history_hex_checksum(database: &sled::Db) -> Result<String> {
+    let history = open_tree(database, HISTORY)?;
+    let checksum = history.checksum()?;
+    Ok(hex::encode(checksum.encode()).to_uppercase())
+}
+
+/// Clear transaction tree of the database.
+///
+/// Function is intended for cases when transaction is declined by the user
+/// (e.g. user has scanned something, read it, clicked `back` or `decline`)
+pub fn purge_transactions(database: &sled::Db) -> Result<()> {
+    TrDbCold::new()
+        .set_transaction(make_batch_clear_tree(database, TRANSACTION)?) // clear transaction
+        .apply(database)
+}
+
+/// Get possible options of English `bip39` words that start with user-entered
+/// word part.
+///
+/// List length limit is [`MAX_WORDS_DISPLAY`].
+pub fn guess(word_part: &str) -> Vec<&'static str> {
+    let dictionary = Language::English.wordlist();
+    let words = dictionary.get_words_by_prefix(word_part);
+    if words.len() > MAX_WORDS_DISPLAY {
+        words[..MAX_WORDS_DISPLAY].to_vec()
+    } else {
+        words.to_vec()
+    }
+}
+
+/// Maximum word count in `bip39` standard.
+///
+/// See <https://docs.rs/tiny-bip39/0.8.2/src/bip39/mnemonic_type.rs.html#60>
+pub const BIP_CAP: usize = 24;
+
+/// Maximum word length in `bip39` standard.
+pub const WORD_LENGTH: usize = 8;
+
+/// Zeroizeable seed phrase draft.
+#[derive(Debug, Clone, Zeroize, ZeroizeOnDrop)]
+pub struct SeedDraft {
+    /// User-entered word part.
+    user_input: String,
+
+    /// Already completed `bip39` words.
+    saved: Vec<SeedElement>,
+}
+
+/// Zeroizeable wrapper around complete `bip39` word entered by user.
+#[derive(Debug, Clone, Zeroize, ZeroizeOnDrop)]
+struct SeedElement(String);
+
+impl SeedElement {
+    /// Make `SeedElement` from checked `bip39` word.
+    fn from_checked_str(word: &str) -> Self {
+        let mut new = String::with_capacity(WORD_LENGTH);
+        new.push_str(word);
+        SeedElement(new)
+    }
+
+    /// Get `bip39` word from the `SeedElement`.
+    fn word(&self) -> &str {
+        &self.0
+    }
+}
+
+impl SeedDraft {
+    /// Start new `SeedDraft`
+    pub fn initiate() -> Self {
+        Self {
+            user_input: String::with_capacity(WORD_LENGTH), // capacity corresponds to maximum word length in `bip39` standard;
+            saved: Vec::with_capacity(BIP_CAP), // capacity corresponds to maximum word count in `bip39` standard; set here to avoid reallocation;
+        }
+    }
+
+    /// Modify `SeedDraft` with updated `user_text` from the frontend.
+    ///
+    /// Note that `user_text` input by default starts with ' ' (space). If user
+    /// removes this space, it results in removing whole previous word.
+    pub fn text_field_update(&mut self, user_text: &str) {
+        if self.saved.len() <= BIP_CAP {
+            if user_text.is_empty() {
+                // user has removed all text, including the first default symbol
+                // if there are words in draft, remove the last one
+                self.remove_last();
+                // restore the user input to empty one
+                self.user_input.clear();
+            } else {
+                let user_text = user_text.trim_start();
+
+                // ' ' (space) in the end of the word indicates user attempt to
+                // submit the word into seed phrase
+                if user_text.ends_with(' ') {
+                    let word = user_text.trim();
+                    if self.added(word, None) {
+                        self.user_input.clear() // added the word successfully, clear `user_input`
+                    } else if !guess(word).is_empty() {
+                        self.user_input = String::from(word) // did not add the word, there are still possible variants, keep trimmed `user_input`
+                    }
+                } else if !guess(user_text).is_empty() {
+                    self.user_input = String::from(user_text)
+                }
+            }
+        } else {
+            self.user_input.clear()
+        }
+    }
+
+    /// User tries to add the word to the `saved` field of the `SeedDraft`.
+    /// Output is `true` if addition happens. `SeedDraft` gets modified in the
+    /// process.
+    ///
+    /// Optional `position` input could be used to mark the position in seed
+    /// phrase to add the word to.
+    pub fn added(&mut self, word: &str, position: Option<u32>) -> bool {
+        // maximum number of the words is not reached
+        if self.saved.len() < BIP_CAP {
+            let guesses = guess(word);
+            let definitive_guess = {
+                if guesses.len() == 1 {
+                    Some(guesses[0]) // only one possible variant
+                } else if guesses.contains(&word) {
+                    Some(word) // exactly matching variant
+                } else {
+                    None // no definitive match, no addition
+                }
+            };
+            if let Some(guess) = definitive_guess {
+                let new = SeedElement::from_checked_str(guess);
+                match position {
+                    Some(p) => {
+                        let p = p as usize;
+                        if p <= self.saved.len() {
+                            self.saved.insert(p, new) // position is reasonable, use it
+                        } else {
+                            self.saved.push(new) // position is **not** reasonable, add word at the end of the list
+                        }
+                    }
+                    None => self.saved.push(new), // no position, add word at the end of the list
+                }
+                self.user_input.clear();
+                true
+            } else {
+                false
+            }
+        } else {
+            false
+        }
+    }
+
+    /// Remove word at given position from the saved seed phrase draft.
+    pub fn remove(&mut self, position: u32) {
+        let position = position as usize;
+        if position < self.saved.len() {
+            self.saved.remove(position);
+        }
+    }
+
+    /// Remove last word from the saved seed phrase draft.
+    pub fn remove_last(&mut self) {
+        if !self.saved.is_empty() {
+            self.saved.remove(self.saved.len() - 1);
+        }
+    }
+
+    /// Make a `String` with a seed phrase draft.
+    ///
+    /// Returned string contains a secret and should be handled as such.
+    pub fn draft(&self) -> Vec<String> {
+        self.saved.iter().map(|w| w.word().to_string()).collect()
+    }
+
+    /// Combines all draft elements into seed phrase proposal,
+    /// and checks its validity.
+    /// If valid, outputs secret seed phrase.
+    pub fn try_finalize(&self) -> Option<String> {
+        let mut seed_phrase_proposal = String::with_capacity((WORD_LENGTH + 1) * BIP_CAP);
+        for (i, x) in self.saved.iter().enumerate() {
+            if i > 0 {
+                seed_phrase_proposal.push(' ');
+            }
+            seed_phrase_proposal.push_str(x.word());
+        }
+        if Mnemonic::validate(&seed_phrase_proposal, Language::English).is_ok() {
+            Some(seed_phrase_proposal)
+        } else {
+            seed_phrase_proposal.zeroize();
+            None
+        }
+    }
+
+    /// Output the user input back into user interface.
+    pub fn user_input(&self) -> &str {
+        &self.user_input
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/lib.rs.html b/rustdocs/src/db_handling/lib.rs.html new file mode 100644 index 0000000000..48bc4a42ab --- /dev/null +++ b/rustdocs/src/db_handling/lib.rs.html @@ -0,0 +1,227 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+
//! This crate deals with standard database-related procedures used in
+//! [Vault](https://github.com/paritytech/parity-signer) and Vault-supporting
+//! ecosystem.  
+//!
+//! This crate:
+//!
+//! - contains helpers to operate the databases, used throughout Vault system
+//! - generates cold (used in air-gapped Vault) and hot (used in
+//! `generate_message` client) databases with default settings
+//! - deals with taking data out of the database and putting the data in the
+//! database
+//! - contains Vault interface interactions, allowing exports of data to the
+//! interface
+//! - deals with address generation for Vault
+//!
+//! # Features
+//!
+//! Feature `"active"` corresponds to all Vault-related things happening
+//! **without** air-gap, including the generation of the database for Vault
+//! during the build.
+
+#![deny(rustdoc::broken_intra_doc_links)]
+
+// possibly TODO: rename all database_name into database_path or whatever,
+// currently it is quite confusing
+
+#[cfg(feature = "active")]
+use constants::{COLD_DB_NAME_RELEASE, HOT_DB_NAME};
+
+pub mod cold_default;
+
+pub mod db_transactions;
+
+pub mod helpers;
+
+#[cfg(feature = "active")]
+mod hot_default;
+
+pub mod identities;
+
+pub mod interface_signer;
+
+pub mod manage_history;
+
+mod error;
+
+pub use error::{Error, Result};
+
+#[cfg(test)]
+pub mod tests;
+
+#[cfg(feature = "active")]
+use cold_default::populate_cold_release;
+#[cfg(feature = "active")]
+use hot_default::reset_hot_database;
+
+/// Generate or restore "cold" database with default values, **for release
+/// build**.
+///
+/// Resulting database should be copied verbatim into Vault files during the
+/// build.
+///
+/// The location of the generated database is either optional user-provided
+/// path, or default [`COLD_DB_NAME_RELEASE`] folder.
+///
+/// The cold release database, as generated, contains:
+///
+/// - network specs for default networks (Polkadot, Kusama, Westend)
+/// - verifier information for default networks, with verifiers set to the
+/// general one
+/// - two latest metadata versions for default networks
+/// - default types information and clean danger status
+///
+/// The trees `ADDRTREE`, `HISTORY`, and `TRANSACTION` are empty.
+///
+/// Note that resulting database history is not initialized and general
+/// verifier is not set.
+///
+/// This operation is performed **not** on Vault device, and is governed by
+/// the active side.
+#[cfg(feature = "active")]
+pub fn default_cold_release(database: Option<&sled::Db>) -> Result<()> {
+    let database = if let Some(database) = database {
+        database.clone()
+    } else {
+        sled::open(COLD_DB_NAME_RELEASE)?
+    };
+    populate_cold_release(&database)
+}
+
+/// Generate or restore "hot" database with default values.
+///
+/// The location of the generated database is default [`HOT_DB_NAME`] folder.
+///
+/// The hot database, as generated, contains:
+///
+/// - address book entries for default networks (Polkadot, Kusama, Westend)
+/// - network specs for default networks
+/// - default types information
+/// - **no** metadata entries
+/// - **no** metadata block history entries
+///
+/// All metadata-related entries get in the hot database only through RPC calls.
+#[cfg(feature = "active")]
+pub fn default_hot(database: Option<&sled::Db>) -> Result<()> {
+    let database = if let Some(database) = database {
+        database.clone()
+    } else {
+        sled::open(HOT_DB_NAME)?
+    };
+
+    reset_hot_database(&database)
+}
+
\ No newline at end of file diff --git a/rustdocs/src/db_handling/manage_history.rs.html b/rustdocs/src/db_handling/manage_history.rs.html new file mode 100644 index 0000000000..343b21d617 --- /dev/null +++ b/rustdocs/src/db_handling/manage_history.rs.html @@ -0,0 +1,381 @@ +manage_history.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+
//! Displaying and updating history log
+//!
+//! The Vault keeps a history log of all events that change the database and
+//! affect security. It is stored in [`HISTORY`] tree of the cold database.
+//!
+//! Each history log [`Entry`] contains [`Event`] set and a timestamp. Database
+//! key for [`Entry`] value is [`Order`], SCALE-encoded number of the entry.
+//!
+//! In addition to keeping the log, Vault also displays [`HISTORY`] tree
+//! checksum for user to possibly keep the track of.
+// TODO: substantial part of this will go obsolete with interface updates;
+// some functions are not called at the moment from the user interface - kept
+// for now in case they make a return, commented.
+use parity_scale_codec::Decode;
+use parity_scale_codec::Encode;
+use sled::Batch;
+
+use constants::DANGER;
+use constants::HISTORY;
+use definitions::{
+    history::{Entry, Event},
+    keyring::Order,
+};
+
+use definitions::danger::DangerRecord;
+
+use crate::helpers::open_tree;
+use crate::Error;
+use crate::Result;
+use crate::{db_transactions::TrDbCold, helpers::make_batch_clear_tree};
+
+/// Print total number of pages, for maximum [`HISTORY_PAGE_SIZE`](constants::HISTORY_PAGE_SIZE) number of
+/// entries per page.
+pub fn history_total_pages(database: &sled::Db) -> Result<u32> {
+    use constants::HISTORY_PAGE_SIZE;
+
+    let history = get_history(database)?;
+    let total_pages = {
+        if history.len() % HISTORY_PAGE_SIZE == 0 {
+            history.len() / HISTORY_PAGE_SIZE
+        } else {
+            history.len() / HISTORY_PAGE_SIZE + 1
+        }
+    };
+    Ok(total_pages as u32)
+}
+
+/// Get history log contents from the database.
+pub fn get_history(database: &sled::Db) -> Result<Vec<(Order, Entry)>> {
+    let history = open_tree(database, HISTORY)?;
+    let mut out: Vec<(Order, Entry)> = Vec::new();
+    for (order_encoded, history_entry_encoded) in history.iter().flatten() {
+        let order = Order::from_ivec(&order_encoded)?;
+        let history_entry = <Entry>::decode(&mut &history_entry_encoded[..])?;
+        out.push((order, history_entry));
+    }
+    out.sort_by(|a, b| b.0.stamp().cmp(&a.0.stamp()));
+    Ok(out)
+}
+
+/// Get from the database a history log [`Entry`] by `u32` order identifier
+/// received from the frontend.
+pub fn get_history_entry_by_order(database: &sled::Db, order: u32) -> Result<Entry> {
+    let history = open_tree(database, HISTORY)?;
+    let mut found = None;
+    let order = Order::from_number(order);
+    for (order_encoded, history_entry_encoded) in history.iter().flatten() {
+        let order_found = Order::from_ivec(&order_encoded)?;
+        if order_found == order {
+            found = Some(<Entry>::decode(&mut &history_entry_encoded[..])?);
+            break;
+        }
+    }
+    found.ok_or_else(|| Error::HistoryEntryNotFound(order.stamp()))
+}
+
+/// Clear Vault history and make a log [`Entry`] that history was cleared.
+pub fn clear_history(database: &sled::Db) -> Result<()> {
+    let batch = make_batch_clear_tree(database, HISTORY)?;
+    let events = vec![Event::HistoryCleared];
+    let for_history = events_in_batch(database, true, batch, events)?;
+    TrDbCold::new().set_history(for_history).apply(database)?;
+
+    Ok(())
+}
+
+/// Timestamp [`Event`] set and make with it a new [`Batch`], that could be
+/// applied to the [`HISTORY`] tree.
+pub fn events_to_batch(database: &sled::Db, events: Vec<Event>) -> Result<Batch> {
+    events_in_batch(database, false, Batch::default(), events)
+}
+
+/// Timestamp [`Event`] set and add it to existing [`Batch`], that could be
+/// applied to the [`HISTORY`] tree.
+///
+/// Note that existing [`Batch`] must contain no [`Entry`] additions, only
+/// removals are possible. Only one [`Event`] set, transformed into [`Entry`]
+/// with a single timestamp could be added in a single database transaction.
+pub(crate) fn events_in_batch(
+    database: &sled::Db,
+    start_zero: bool,
+    mut out_prep: Batch,
+    events: Vec<Event>,
+) -> Result<Batch> {
+    let history = open_tree(database, HISTORY)?;
+    let order = {
+        if start_zero {
+            Order::from_number(0u32)
+        } else {
+            Order::from_number(history.len() as u32)
+        }
+    };
+    let timestamp = time::OffsetDateTime::now_utc().format(&time::macros::format_description!(
+        "[year]-[month]-[day] [hour]:[minute]:[second].[subsecond]"
+    ))?;
+    let history_entry = Entry { timestamp, events };
+    out_prep.insert(order.store(), history_entry.encode());
+    Ok(out_prep)
+}
+
+/// Enter [`Event`] set into the database as a single database transaction.
+pub fn enter_events(database: &sled::Db, events: Vec<Event>) -> Result<()> {
+    TrDbCold::new()
+        .set_history(events_to_batch(database, events)?)
+        .apply(database)
+}
+
+/// Enter user-generated [`Event`] into the database.
+pub fn history_entry_user(database: &sled::Db, string_from_user: &str) -> Result<()> {
+    let events = vec![Event::UserEntry {
+        user_entry: string_from_user.to_string(),
+    }];
+    enter_events(database, events)
+}
+
+/// Enter system-generated [`Event`] into the database.
+// TODO possibly obsolete
+pub fn history_entry_system(database: &sled::Db, event: Event) -> Result<()> {
+    // let events = vec![Event::SystemEntry(string_from_system)];
+    let events = vec![event];
+    enter_events(database, events)
+}
+
+/// Process the fact that the Vault device was online.
+///
+/// - Add history log entry with `Event::DeviceWasOnline`.
+/// - Update [`DangerRecord`] stored in [`SETTREE`](constants::SETTREE) with
+/// `device_was_online = true` flag.
+///
+/// Unacknowledged non-safe [`DangerRecord`] block the use of Vault in the
+/// frontend.
+pub fn device_was_online(database: &sled::Db) -> Result<()> {
+    let events = vec![Event::DeviceWasOnline];
+    let mut settings_batch = Batch::default();
+    settings_batch.insert(DANGER, DangerRecord::set_was_online().store());
+    TrDbCold::new()
+        .set_history(events_to_batch(database, events)?)
+        .set_settings(settings_batch)
+        .apply(database)
+}
+
+/// Acknowledge that the Vault device was online and reset the
+/// [`DangerRecord`] back to safe.
+///
+/// - Add history log entry with `Event::ResetDangerRecord`.
+/// - Reset [`DangerRecord`] stored in [`SETTREE`](constants::SETTREE) to
+/// `safe`, i.e. with `device_was_online = false` flag.
+///
+/// Acknowledged and reset [`DangerRecord`] allow to resume the use of Vault in
+/// the frontend. Use it wisely.
+pub fn reset_danger_status_to_safe(database: &sled::Db) -> Result<()> {
+    let events = vec![Event::ResetDangerRecord];
+    let mut settings_batch = Batch::default();
+    settings_batch.insert(DANGER, DangerRecord::safe().store());
+    TrDbCold::new()
+        .set_history(events_to_batch(database, events)?)
+        .set_settings(settings_batch)
+        .apply(database)
+}
+
+/// Record in history log that certain seed was shown on Vault screen,
+/// presumably for backup.
+///
+/// Seeds are distinguished by the seed name.
+pub fn seed_name_was_shown(database: &sled::Db, seed_name_was_shown: String) -> Result<()> {
+    let events = vec![Event::SeedNameWasShown {
+        seed_name_was_shown,
+    }];
+    enter_events(database, events)
+}
+
\ No newline at end of file diff --git a/rustdocs/src/defaults/error.rs.html b/rustdocs/src/defaults/error.rs.html new file mode 100644 index 0000000000..6f1a9621da --- /dev/null +++ b/rustdocs/src/defaults/error.rs.html @@ -0,0 +1,51 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+
pub type Result<T> = std::result::Result<T, Error>;
+
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error(transparent)]
+    IoError(#[from] std::io::Error),
+
+    #[error(transparent)]
+    DefinitionsError(#[from] definitions::error::Error),
+
+    /// Base58 prefix from metadata (`meta`) does not match base58 prefix in specs (`specs`)
+    #[error(
+        "Base58 prefix {specs} from system pallet constants does \
+        not match the base58 prefix from network specs {meta}."
+    )]
+    Base58PrefixSpecsMismatch { specs: u16, meta: u16 },
+
+    /// Default metadata set contains metadata files that have no corresponding
+    /// default network specs and address book entries.
+    #[error(
+        "Default metadata for {name} from {filename} \
+        does not have corresponding default network specs."
+    )]
+    OrphanMetadata { name: String, filename: String },
+}
+
\ No newline at end of file diff --git a/rustdocs/src/defaults/lib.rs.html b/rustdocs/src/defaults/lib.rs.html new file mode 100644 index 0000000000..680aeb6d3d --- /dev/null +++ b/rustdocs/src/defaults/lib.rs.html @@ -0,0 +1,967 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+
//! Default data for [Vault](https://github.com/paritytech/parity-signer)
+//! and Vault-supporting ecosystem.
+//!
+//! This crate deals with data loaded into Vault on build and retained on reset.
+//!
+//! Vault supports by default three networks: Polkadot, Kusama, and Westend,
+//! both on the cold and the hot side. More default networks could be considered
+//! in the future.
+//!
+//! # Defaults in the cold database
+//!
+//! Default build of the cold database for Vault includes:
+//!
+//! - general verifier `Verifier` set to `Some(VerifierValue)` with Parity
+//! public key as a verifier value
+//! - network specs `OrderedNetworkSpecs` for default networks
+//! - verifiers for default networks, set to
+//! `CurrentVerifier::Valid(ValidCurrentVerifier::General)`
+//! - two latest metadata versions for each of the default networks
+//! - default types information
+//!
+//! Latest metadata entries get updated as soon as they are published and could
+//! be fetched via RPC calls. For this, new metadata entry is added into
+//! `release_metadata` folder, and older one is removed.
+//!
+//! # Defaults in the hot database
+//!
+//! Default hot database contains:
+//!
+//! - network specs `NetworkSpecs` for default networks
+//! - address book containing the data for default networks
+//! - default types information
+//!
+//! # Features
+//! Feature `"signer"` corresponds to everything related to Vault air-gapped
+//! device. Currently the only Vault-related default is `Verifier` with Parity
+//! public key, that could be set up as a general verifier after Vault wipe by
+//! the user.
+//!
+//! Feature `"active"` corresponds to all Vault-related things happening
+//! **without** air-gap. This includes generating default:
+//! - network specs sets for cold and hot databases
+//! - verifiers for cold databases
+//! - metadata sets for cold databases
+//! - address book for hot database
+//! - types information for cold and hot databases
+//!
+//! Feature `"test"` includes both `"signer"` and `"active"` features, along
+//! with some testing, and is the default one.  
+
+#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+#[cfg(feature = "active")]
+use sp_core::H256;
+use sp_runtime::MultiSigner;
+
+#[cfg(feature = "active")]
+use std::fs;
+
+#[cfg(feature = "active")]
+use regex::Regex;
+
+#[cfg(feature = "active")]
+use lazy_static::lazy_static;
+
+#[cfg(feature = "active")]
+use std::str::FromStr;
+
+#[cfg(feature = "active")]
+use definitions::{
+    crypto::Encryption,
+    keyring::VerifierKey,
+    metadata::{AddressBookEntry, MetaValues},
+    network_specs::{CurrentVerifier, NetworkSpecs, OrderedNetworkSpecs, ValidCurrentVerifier},
+    qr_transfers::ContentLoadTypes,
+    types::{Description, EnumVariant, EnumVariantType, StructField, TypeEntry},
+};
+
+use definitions::network_specs::{Verifier, VerifierValue};
+
+mod error;
+pub use error::{Error, Result};
+
+/// Real Parity public key, with `Sr25519` encryption
+///
+/// To be used in [`VerifierValue`] for general verifier in default cold
+/// database
+pub const DEFAULT_VERIFIER_PUBLIC: [u8; 32] = [
+    0xc4, 0x6a, 0x22, 0xb9, 0xda, 0x19, 0x54, 0x0a, 0x77, 0xcb, 0xde, 0x23, 0x19, 0x7e, 0x5f, 0xd9,
+    0x04, 0x85, 0xc7, 0x2b, 0x4e, 0xcf, 0x3c, 0x59, 0x9e, 0xcc, 0xa6, 0x99, 0x8f, 0x39, 0xbd, 0x57,
+];
+
+/// Generate default general verifier [`Verifier`], with Parity public key
+/// inside.
+pub fn default_general_verifier() -> Verifier {
+    Verifier {
+        v: Some(VerifierValue::Standard {
+            m: MultiSigner::Sr25519(sp_core::sr25519::Public::from_raw(DEFAULT_VERIFIER_PUBLIC)),
+        }),
+    }
+}
+
+/// Network information that is not expected to change, source for network specs
+/// entries in cold and hot databases and address book entries in hot database
+#[cfg(feature = "active")]
+struct DefaultNetworkInfo {
+    address: String,
+    base58prefix: u16,
+    color: String,
+    decimals: u8,
+    encryption: Encryption,
+    genesis_hash: H256,
+    logo: String,
+    name: String,
+    order: u8,
+    path_id: String,
+    secondary_color: String,
+    title: String,
+    unit: String,
+}
+
+/// Populate `DefaultNetworkInfo` for default networks
+#[cfg(feature = "active")]
+fn default_network_info() -> [DefaultNetworkInfo; 3] {
+    [
+        DefaultNetworkInfo {
+            address: String::from("wss://kusama-rpc.polkadot.io"),
+            base58prefix: 2,
+            color: String::from("#000"),
+            decimals: 12,
+            encryption: Encryption::Sr25519,
+            genesis_hash: H256::from_str(
+                "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
+            )
+            .expect("known value"),
+            logo: String::from("kusama"),
+            name: String::from("kusama"),
+            order: 1,
+            path_id: String::from("//kusama"),
+            secondary_color: String::from("#262626"),
+            title: String::from("Kusama"),
+            unit: String::from("KSM"),
+        },
+        DefaultNetworkInfo {
+            address: String::from("wss://rpc.polkadot.io"),
+            base58prefix: 0,
+            color: String::from("#E6027A"),
+            decimals: 10,
+            encryption: Encryption::Sr25519,
+            genesis_hash: H256::from_str(
+                "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
+            )
+            .expect("known value"),
+            logo: String::from("polkadot"),
+            name: String::from("polkadot"),
+            order: 0,
+            path_id: String::from("//polkadot"),
+            secondary_color: String::from("#262626"),
+            title: String::from("Polkadot"),
+            unit: String::from("DOT"),
+        },
+        DefaultNetworkInfo {
+            address: String::from("wss://westend-rpc.polkadot.io"),
+            base58prefix: 42,
+            color: String::from("#660D35"),
+            decimals: 12,
+            encryption: Encryption::Sr25519,
+            genesis_hash: H256::from_str(
+                "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e",
+            )
+            .expect("known value"),
+            logo: String::from("westend"),
+            name: String::from("westend"),
+            order: 2,
+            path_id: String::from("//westend"),
+            secondary_color: String::from("#262626"),
+            title: String::from("Westend"),
+            unit: String::from("WND"),
+        },
+    ]
+}
+
+/// Generate network specs [`OrderedNetworkSpecs`] set for the default networks, for
+/// cold database
+#[cfg(feature = "active")]
+pub fn default_chainspecs() -> Vec<OrderedNetworkSpecs> {
+    let mut out: Vec<OrderedNetworkSpecs> = Vec::new();
+    for x in default_network_info() {
+        let new = OrderedNetworkSpecs {
+            specs: NetworkSpecs {
+                base58prefix: x.base58prefix,
+                color: x.color.to_string(),
+                decimals: x.decimals,
+                encryption: x.encryption,
+                genesis_hash: x.genesis_hash,
+                logo: x.logo.to_string(),
+                name: x.name.to_string(),
+                path_id: x.path_id.to_string(),
+                secondary_color: x.secondary_color.to_string(),
+                title: x.title.to_string(),
+                unit: x.unit.to_string(),
+            },
+            order: x.order,
+        };
+        out.push(new);
+    }
+    out
+}
+
+/// Generate verifiers set for the default networks, for cold database
+#[cfg(feature = "active")]
+pub fn default_verifiers() -> Vec<(VerifierKey, CurrentVerifier)> {
+    let mut out: Vec<(VerifierKey, CurrentVerifier)> = Vec::new();
+    for x in default_network_info() {
+        out.push((
+            VerifierKey::from_parts(x.genesis_hash),
+            CurrentVerifier::Valid(ValidCurrentVerifier::General),
+        ));
+    }
+    out
+}
+
+/// Generate network specs [`NetworkSpecs`] set for the default networks,
+/// for hot database
+#[cfg(feature = "active")]
+pub fn default_chainspecs_to_send() -> Vec<NetworkSpecs> {
+    let mut out: Vec<NetworkSpecs> = Vec::new();
+    for x in default_network_info() {
+        let new = NetworkSpecs {
+            base58prefix: x.base58prefix,
+            color: x.color.to_string(),
+            decimals: x.decimals,
+            encryption: x.encryption,
+            genesis_hash: x.genesis_hash,
+            logo: x.logo.to_string(),
+            name: x.name.to_string(),
+            path_id: x.path_id.to_string(),
+            secondary_color: x.secondary_color.to_string(),
+            title: x.title.to_string(),
+            unit: x.unit.to_string(),
+        };
+        out.push(new);
+    }
+    out
+}
+
+/// Generate address book set for the default networks, for hot database
+#[cfg(feature = "active")]
+pub fn default_address_book() -> Vec<AddressBookEntry> {
+    let mut out: Vec<AddressBookEntry> = Vec::new();
+    for x in default_network_info() {
+        let new = AddressBookEntry {
+            name: x.name.to_string(),
+            genesis_hash: x.genesis_hash,
+            address: x.address.to_string(),
+            encryption: x.encryption,
+            def: true,
+        };
+        out.push(new);
+    }
+    out
+}
+
+/// Read metadata files from given directory. Is used to populate different
+/// variants of cold database (release and tests)
+#[cfg(feature = "active")]
+fn metadata(dir: &str) -> Result<Vec<MetaValues>> {
+    let mut out: Vec<MetaValues> = Vec::new();
+    let path_set = std::fs::read_dir(dir)?;
+    for x in path_set.flatten() {
+        if let Some(filename) = x.path().to_str() {
+            let meta_str = std::fs::read_to_string(x.path())?;
+            let new = MetaValues::from_str_metadata(meta_str.trim())?;
+            let mut found = false;
+            for a in default_network_info() {
+                if new.name == a.name {
+                    found = true;
+                    if let Some(prefix_from_meta) = new.optional_base58prefix {
+                        if prefix_from_meta != a.base58prefix {
+                            return Err(Error::Base58PrefixSpecsMismatch {
+                                specs: a.base58prefix,
+                                meta: prefix_from_meta,
+                            });
+                        }
+                    }
+                    break;
+                }
+            }
+            if !found {
+                return Err(Error::OrphanMetadata {
+                    name: new.name,
+                    filename: filename.to_string(),
+                });
+            }
+            out.push(new)
+        }
+    }
+    Ok(out)
+}
+
+/// Read metadata set for test cold database from `test_metadata` folder
+#[cfg(feature = "active")]
+pub fn test_metadata() -> Result<Vec<MetaValues>> {
+    metadata("../defaults/test_metadata")
+}
+
+/// Read metadata set for navigation test cold database from `nav_test_metadata`
+/// folder
+#[cfg(feature = "active")]
+pub fn nav_test_metadata() -> Result<Vec<MetaValues>> {
+    metadata("../defaults/nav_test_metadata")
+}
+
+/// Read metadata set for release cold database from `release_metadata` folder
+#[cfg(feature = "active")]
+pub fn release_metadata() -> Result<Vec<MetaValues>> {
+    Ok(vec![])
+}
+
+#[cfg(feature = "active")]
+lazy_static! {
+    static ref REG_STRUCTS_WITH_NAMES: Regex = Regex::new(r"(pub )?struct (?P<name>.*?)( )?\{(?P<description>(\n +(pub )?\w+: .*(,)?)*\n)\}").expect("checked construction");
+    static ref REG_STRUCTS_NO_NAMES: Regex = Regex::new(r"(pub )?struct (?P<name>.*?)( )?\((pub )?(?P<description>.*)\)").expect("checked construction");
+    static ref REG_STRUCT_FIELDS: Regex = Regex::new(r"(?m)^ +(pub )?(?P<field_name>[\w]+): (?P<field_type>[^ ,]*\(.*\)[^ ,]*|[^ ,]*<.*>[^ ,]*|[^ ,]*\[.*\][^ ,]*|[^ ,]+)(,)?$").expect("checked construction");
+    static ref REG_ENUM: Regex = Regex::new(r"(pub )?enum (?P<name>.*?)( )?\{(?P<description>(\n +\w+( )?(\(.*\))?(\{[^}]*\})?(,)?)*)\n\}").expect("checked construction");
+    static ref REG_ENUM_VARIANTS: Regex = Regex::new(r"(?m)^ +(?P<variant_name>\w+)(( )?(?P<variant_type>(\(.*\))|(\{[^}]*\})))?(,)?$").expect("checked construction");
+    static ref REG_ENUM_SIMPLE: Regex = Regex::new(r"(?m)^(?P<simple_type>([^, ]*\[.*\][^, ]*)|([^, ]*<.*>[^, ]*)|([^, ]*\([^)]*\)[^, ]*)|([^, ]+))$").expect("checked construction");
+    static ref REG_ENUM_TUPLE: Regex = Regex::new(r"(?P<type_in_tuple>([^, ]*\[.*\][^, ]*)|([^, ]*<.*>[^, ]*)|([^, ]*\([^)]*\)[^, ]*)|([^, ]+))(, )?").expect("checked construction");
+    static ref REG_ENUM_STRUCT: Regex = Regex::new(r"(\n)?( +)?(?P<struct_field_name>\w+): (?P<struct_field_type>)(?P<fieldtype>[^ ,]*\(.*\)[^ ,]*|[^ ,]*<.*>[^ ,]*|[^ ,]*\[.*\][^ ,]*|[^ ,]+)(,)?").expect("checked construction");
+    static ref REG_TYPES: Regex = Regex::new(r#"(?m)(pub )?type (?P<name>.*) = (?P<description>.*);$"#).expect("checked construction");
+}
+
+/// Generate default types as [`TypeEntry`] set
+///
+/// Type definitions stored in `../defaults/default_types/full_types_information`
+/// are recorded with standard Rust syntax, processed with regular expressions
+/// to categorize, and collected as `TypeEntry` set.
+///
+/// Types information is necessary only to parse transactions produced with
+/// `RuntimeVersion` of the network metadata below `V14`. Therefore, it is
+/// obsolete for default networks.
+///
+/// Types information currently on file was collected for older metadata
+/// versions of Westend, Polkadot, Kusama, and Rococo, when they were still
+/// using metadata runtime version `V12` and `V13`. Type definitions were gathered
+/// (mostly) from substrate crates and in some cases from js client code, when
+/// it was not possible to find explicit descriptions in substrate crates.
+///
+/// This types collection is totally not expected to be exhaustive for any
+/// network a user may encounter, although the most common types are likely
+/// described. If user gets an error that certain type is unknown, this type
+/// description could be added into types file by user, and types update could
+/// be generated by user.
+#[cfg(feature = "active")]
+pub fn default_types_vec() -> Result<Vec<TypeEntry>> {
+    let filename = "../defaults/default_types/full_types_information";
+    let type_info = fs::read_to_string(filename)?;
+
+    let mut types_prep: Vec<TypeEntry> = Vec::new();
+
+    for caps1 in REG_STRUCTS_WITH_NAMES.captures_iter(&type_info) {
+        let struct_name = (caps1["name"]).to_string();
+        let struct_description = (caps1["description"]).to_string();
+        let mut struct_fields: Vec<StructField> = Vec::new();
+        for caps2 in REG_STRUCT_FIELDS.captures_iter(&struct_description) {
+            let new = StructField {
+                field_name: Some((caps2["field_name"]).to_string()),
+                field_type: (caps2["field_type"]).to_string(),
+            };
+            struct_fields.push(new);
+        }
+        let new_entry = TypeEntry {
+            name: struct_name,
+            description: Description::Struct(struct_fields),
+        };
+        types_prep.push(new_entry);
+    }
+    for caps in REG_STRUCTS_NO_NAMES.captures_iter(&type_info) {
+        let only_field = StructField {
+            field_name: None,
+            field_type: (caps["description"]).to_string(),
+        };
+        let new_entry = TypeEntry {
+            name: (caps["name"]).to_string(),
+            description: Description::Struct(vec![only_field]),
+        };
+        types_prep.push(new_entry);
+    }
+    for caps1 in REG_ENUM.captures_iter(&type_info) {
+        let enum_name = (caps1["name"]).to_string();
+        let enum_description = (caps1["description"]).to_string();
+        let enum_variants = enum_description
+            .lines()
+            .filter(|line| REG_ENUM_VARIANTS.is_match(line))
+            .map(|line| {
+                let caps2 = REG_ENUM_VARIANTS
+                    .captures(line)
+                    .expect("just checked it is match");
+                let variant_name = (caps2["variant_name"]).to_string();
+                let variant_type = match caps2.name("variant_type") {
+                    None => EnumVariantType::None,
+                    Some(a) => {
+                        let x = a.as_str().to_string();
+                        if x.starts_with('(') {
+                            // either a single type or a tuple
+                            match REG_ENUM_SIMPLE.captures(&x[1..x.len() - 1]) {
+                                // single type
+                                Some(b) => EnumVariantType::Type((b["simple_type"]).to_string()),
+                                // tuple
+                                None => EnumVariantType::Type(x),
+                            }
+                        } else {
+                            // struct with struct-like fields
+                            let mut type_is_struct: Vec<StructField> = Vec::new();
+                            for caps3 in REG_ENUM_STRUCT.captures_iter(&x) {
+                                let new = StructField {
+                                    field_name: Some((caps3["field_name"]).to_string()),
+                                    field_type: (caps3["field_type"]).to_string(),
+                                };
+                                type_is_struct.push(new);
+                            }
+                            EnumVariantType::Struct(type_is_struct)
+                        }
+                    }
+                };
+                EnumVariant {
+                    variant_name,
+                    variant_type,
+                }
+            })
+            .collect();
+        let new_entry = TypeEntry {
+            name: enum_name,
+            description: Description::Enum(enum_variants),
+        };
+        types_prep.push(new_entry);
+    }
+    for caps in REG_TYPES.captures_iter(&type_info) {
+        let new_entry = TypeEntry {
+            name: (caps["name"]).to_string(),
+            description: Description::Type((caps["description"]).to_string()),
+        };
+        types_prep.push(new_entry);
+    }
+
+    Ok(types_prep)
+}
+
+/// Generate default types as [`ContentLoadTypes`]
+#[cfg(feature = "active")]
+pub fn default_types_content() -> Result<ContentLoadTypes> {
+    Ok(ContentLoadTypes::generate(&default_types_vec()?))
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    /// Check that can generate test metadata set
+    #[test]
+    fn can_get_test_metadata() {
+        assert!(test_metadata().is_ok());
+    }
+
+    /// Check that can generate test metadata set for `navigator` crate testing
+    #[test]
+    fn can_get_nav_test_metadata() {
+        assert!(nav_test_metadata().is_ok());
+    }
+
+    /// Check that can generate release metadata set
+    #[test]
+    fn can_get_release_metadata() {
+        assert!(release_metadata().is_ok());
+    }
+
+    /// Check that can generate types information set
+    #[test]
+    fn can_get_default_types_vec() {
+        assert!(default_types_vec().is_ok());
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/crypto.rs.html b/rustdocs/src/definitions/crypto.rs.html new file mode 100644 index 0000000000..22f8f57135 --- /dev/null +++ b/rustdocs/src/definitions/crypto.rs.html @@ -0,0 +1,411 @@ +crypto.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+
//! Encryption-related types with public information  
+//!
+//! Vault supports all three encryption algorithms currently used by the
+//! Substrate: `Ed25519`, `Sr25519`, and `Ecdsa`.
+//!
+//! In addition to [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)
+//! and [`MultiSignature`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSignature.html),
+//! Vault uses similarly structured enums [`Encryption`] with only encryption
+//! algorithm information and [`SufficientCrypto`] with encryption, public key
+//! and data signature combined.  
+//!
+//! Networks are expected to use certain encryption algorithm [`Encryption`].
+//! This is reflected in [`OrderedNetworkSpecs`](crate::network_specs::OrderedNetworkSpecs)
+//! and in [`NetworkSpecs`](crate::network_specs::NetworkSpecs)
+//! field `encryption`, and also in corresponding database keys
+//! [`NetworkSpecsKey`](crate::keyring::NetworkSpecsKey).
+//! In principle, network could support more than one encryption algorithm,
+//! in this case there would be more than one database entry for the network
+//! specs with different keys.  
+//! Default networks (Polkadot, Kusama, and Westend) all operate with `Sr25519`
+//! encryption.  
+//!
+//! Each address in Vault has an associated encryption algorithm
+//! [`Encryption`]. This is reflected in [`AddressDetails`](crate::users::AddressDetails)
+//! field `encryption` and in corresponding database key
+//! [`AddressKey`](crate::keyring::AddressKey). Address is associated with a
+//! network, and only matching [`Encryption`] is allowed.
+//! Address is generated from seed phrase and derivation, public keys produced
+//! for different encryption algorithms with same seed phrase and derivation
+//! are totally different.  
+//!
+//! Both general verifier and each individual network
+//! [`CurrentVerifier`](crate::network_specs::CurrentVerifier) also have
+//! associated [`Encryption`]. Encryption algorithm used by verifiers could be
+//! different from the one used by the network they are verifying, it is used
+//! only to check the validity of the signed update.  
+//!
+//! Vault receives Substrate transactions starting in hexadecimal recording
+//! with `53xxyy` where `xx` corresponds to the encryption type.
+//!
+//! Possible signature schemes are:
+//!
+//! - `00` for `Ed25519`
+//! - `01` for `Sr25519`
+//! - `02` for `Ecdsa`
+//!
+//! To be able to sign transaction in Vault, address producing transaction
+//! must be associated with declared encryption algorithm and with transaction
+//! network with. Also, transaction network must have entry in the database
+//! having declared encryption algorithm.
+//!
+//! Updating transaction, in addition to three variants above, also may be
+//! unsigned, with `ff` as an encryption piece. `ff` means only that no
+//! signature is provided, it has no corresponding value in [`Encryption`].
+//!
+//! [`SufficientCrypto`] is a construction that could be created in Vault
+//! and exported through static QR code. It contains encryption algorithm,
+//! public key and corresponding signature for some data. Data could be network
+//! specs, network metadata, or types information, that is loaded into Vault.
+//! The information in [`SufficientCrypto`] is sufficient to verify the updating
+//! payload validity elsewhere.
+//!
+//! This way Vault user can produce verified updating transactions with
+//! own signatures.  
+//!
+//! [`SufficientCrypto`] could be used by the hot-side client to generate QR
+//! codes with updating payloads signed by an address from Vault.
+//!
+//! Vault keeps track of the generated [`SufficientCrypto`] QR codes in
+//! history log.  
+use parity_scale_codec::{Decode, Encode};
+use sp_core;
+use sp_runtime::{MultiSignature, MultiSigner};
+
+use crate::error::Error;
+use crate::{helpers::IdenticonStyle, network_specs::VerifierValue};
+
+/// Encryption algorithm
+///
+/// Lists all encryption algorithms supported by Substrate
+#[derive(Copy, Clone, Debug, Decode, Encode, PartialEq, Eq)]
+pub enum Encryption {
+    Ed25519,
+    Sr25519,
+    Ecdsa,
+    Ethereum,
+}
+
+impl Encryption {
+    /// Display the encryption  
+    ///
+    /// This is used both in error printing and in json data exports  
+    pub fn show(&self) -> String {
+        match &self {
+            Encryption::Ed25519 => String::from("ed25519"),
+            Encryption::Sr25519 => String::from("sr25519"),
+            Encryption::Ecdsa => String::from("ecdsa"),
+            Encryption::Ethereum => String::from("ethereum"),
+        }
+    }
+
+    /// The style to use for identicons.
+    ///
+    /// Dots ss58
+    /// Blockies for ethereum h160 addrs.
+    pub fn identicon_style(&self) -> IdenticonStyle {
+        match self {
+            Encryption::Ethereum => IdenticonStyle::Blockies,
+            _ => IdenticonStyle::Dots,
+        }
+    }
+}
+
+impl TryFrom<String> for Encryption {
+    type Error = Error;
+
+    fn try_from(value: String) -> Result<Self, Self::Error> {
+        match value.to_lowercase().as_str() {
+            "ed25519" => Ok(Encryption::Ed25519),
+            "sr25519" => Ok(Encryption::Sr25519),
+            "ecdsa" => Ok(Encryption::Ecdsa),
+            "ethereum" => Ok(Encryption::Ethereum),
+            _ => Err(Error::UnknownEncryption(value)),
+        }
+    }
+}
+
+/// Data sufficient to generate signed update  
+///
+/// Contains public key and signature for data within certain encryption
+/// algorithm.  
+///
+/// Stores no information on what data exactly is signed, supposedly user
+/// keeps track of what they are signing.  
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub enum SufficientCrypto {
+    /// `Ed25519` encryption algorithm
+    Ed25519 {
+        /// public key of the signature author
+        public: sp_core::ed25519::Public,
+        /// signature for the data
+        signature: sp_core::ed25519::Signature,
+    },
+
+    /// `Sr25519` encryption algorithm
+    Sr25519 {
+        /// public key of the signature author
+        public: sp_core::sr25519::Public,
+        /// signature for the data
+        signature: sp_core::sr25519::Signature,
+    },
+
+    /// `Ecdsa` encryption algorithm
+    Ecdsa {
+        /// public key of the signature author
+        public: sp_core::ecdsa::Public,
+        /// signature for the data
+        signature: sp_core::ecdsa::Signature,
+    },
+}
+
+impl SufficientCrypto {
+    /// Get [`VerifierValue`] from public key part of [`SufficientCrypto`]
+    pub fn verifier_value(&self) -> VerifierValue {
+        match &self {
+            SufficientCrypto::Ed25519 {
+                public,
+                signature: _,
+            } => VerifierValue::Standard {
+                m: MultiSigner::Ed25519(public.to_owned()),
+            },
+            SufficientCrypto::Sr25519 {
+                public,
+                signature: _,
+            } => VerifierValue::Standard {
+                m: MultiSigner::Sr25519(public.to_owned()),
+            },
+            SufficientCrypto::Ecdsa {
+                public,
+                signature: _,
+            } => VerifierValue::Standard {
+                m: MultiSigner::Ecdsa(public.to_owned()),
+            },
+        }
+    }
+
+    /// Get [`MultiSignature`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSignature.html)
+    /// from signature part of [`SufficientCrypto`]
+    pub fn multi_signature(&self) -> MultiSignature {
+        match &self {
+            SufficientCrypto::Ed25519 {
+                public: _,
+                signature,
+            } => MultiSignature::Ed25519(signature.to_owned()),
+            SufficientCrypto::Sr25519 {
+                public: _,
+                signature,
+            } => MultiSignature::Sr25519(signature.to_owned()),
+            SufficientCrypto::Ecdsa {
+                public: _,
+                signature,
+            } => MultiSignature::Ecdsa(signature.to_owned()),
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/danger.rs.html b/rustdocs/src/definitions/danger.rs.html new file mode 100644 index 0000000000..90180e7e3b --- /dev/null +++ b/rustdocs/src/definitions/danger.rs.html @@ -0,0 +1,153 @@ +danger.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+
//! Record of the Vault exposure to dangerous events
+//!
+//! Vault potentially dangerous exposures are recorded in `SETTREE` as
+//! encoded [`DangerRecord`] under key `DANGER`.
+//!
+//! Vault should stay offline (i.e. air-gapped) throughout its usage.
+//!
+//! In case Vault finds itself online, it records this in the database
+//! danger record and generates log entry in `HISTORY` tree.
+//!
+//! [`DangerRecord`] could be reset only by designated reset function, and the
+//! fact of the reset is also recorded in the history log.  
+use parity_scale_codec::{Decode, Encode};
+use sled::IVec;
+
+use crate::error::Result;
+
+/// Danger status in the Vault database
+///
+/// Indicates if the Vault has a record of unsafe exposure.
+pub struct DangerRecord(Vec<u8>);
+
+/// Decoded `DangerRecord` content, struct with boolean fields corresponding
+/// to different exposure modes inside  
+///
+/// Currently contains only `device_was_online` flag
+#[derive(Decode, Encode)]
+struct DecodedDangerRecord {
+    device_was_online: bool,
+}
+
+impl DangerRecord {
+    /// Set danger record to "safe".  
+    ///
+    /// Switch all exposure flags to `false`.  
+    pub fn safe() -> Self {
+        Self(
+            DecodedDangerRecord {
+                device_was_online: false,
+            }
+            .encode(),
+        )
+    }
+
+    /// Set `device_was_online` exposure flag to `true`.  
+    ///
+    /// Having `device_was_online` flag `true` makes danger record "not safe".  
+    pub fn set_was_online() -> Self {
+        Self(
+            DecodedDangerRecord {
+                device_was_online: true,
+            }
+            .encode(),
+        )
+    }
+
+    /// Get `DangerRecord` with content from the encoded value,
+    /// as it is stored in the database.  
+    ///
+    /// Infallible, as the validity of the value is not checked.
+    pub fn from_ivec(ivec: &IVec) -> Self {
+        Self(ivec.to_vec())
+    }
+
+    /// Get the value of `device_was_online` flag from `DangerRecord`.  
+    ///
+    /// Could result in error if the `DangerRecord` content is corrupted.  
+    pub fn device_was_online(&self) -> Result<bool> {
+        Ok(<DecodedDangerRecord>::decode(&mut &self.0[..])?.device_was_online)
+    }
+
+    /// Transform `DangerRecord` into `Vec<u8>` to put in the database.  
+    pub fn store(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/derivations.rs.html b/rustdocs/src/definitions/derivations.rs.html new file mode 100644 index 0000000000..b9be6e7994 --- /dev/null +++ b/rustdocs/src/definitions/derivations.rs.html @@ -0,0 +1,141 @@ +derivations.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+
use crate::crypto::Encryption;
+use crate::navigation::Identicon;
+use sp_core::H256;
+
+use sp_runtime::MultiSigner;
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub struct SeedKeysPreview {
+    /// Name of the seed.
+    pub name: String,
+
+    /// Public key of the root key.
+    pub multisigner: MultiSigner,
+
+    /// Derived keys.
+    pub derived_keys: Vec<DerivedKeyPreview>,
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub struct DerivedKeyPreview {
+    /// Address in the network.
+    ///
+    /// This is either `ss58` form for substrate-based chains or
+    /// h160 form for ethereum based chains
+    pub address: String,
+
+    /// The derivation path of the key if user provided one
+    pub derivation_path: Option<String>,
+
+    /// The type of encryption in the network
+    pub encryption: Encryption,
+
+    /// Genesis hash
+    pub genesis_hash: H256,
+
+    pub identicon: Identicon,
+
+    /// Has to be calculated using `inject_derivations_has_pwd`. Otherwise, `None`
+    pub has_pwd: Option<bool>,
+
+    /// Might be `None` if network specs were not imported into the Vault
+    pub network_title: Option<String>,
+
+    pub status: DerivedKeyStatus,
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum DerivedKeyStatus {
+    /// Key can be imported into the Vault
+    Importable,
+
+    /// Key is already into the Vault. Unable to determine for a key with password
+    AlreadyExists,
+
+    Invalid {
+        errors: Vec<DerivedKeyError>,
+    },
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum DerivedKeyError {
+    /// Network specs were not imported into the Vault
+    NetworkMissing,
+
+    /// Seed is not in the Vault
+    KeySetMissing,
+
+    /// Bad format of the derivation path
+    BadFormat,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/dynamic_derivations.rs.html b/rustdocs/src/definitions/dynamic_derivations.rs.html new file mode 100644 index 0000000000..96a2c94bdb --- /dev/null +++ b/rustdocs/src/definitions/dynamic_derivations.rs.html @@ -0,0 +1,123 @@ +dynamic_derivations.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+
use crate::crypto::Encryption;
+
+use sp_core::H256;
+
+use parity_scale_codec::{Decode, Encode};
+
+use sp_runtime::MultiSigner;
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub enum DynamicDerivationsRequest {
+    V1(DynamicDerivationsAddressRequestV1),
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct DynamicDerivationsAddressRequestV1 {
+    pub addr: DynamicDerivationsRequestInfo,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct DynamicDerivationsRequestInfo {
+    /// Public key of the root key
+    pub multisigner: MultiSigner,
+    pub dynamic_derivations: Vec<DynamicDerivationRequestInfo>,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct DynamicDerivationRequestInfo {
+    /// Dynamic derivation path
+    pub derivation_path: String,
+    /// The type of encryption in the network
+    pub encryption: Encryption,
+    /// Genesis hash of the network for the dynamic derivation
+    pub genesis_hash: H256,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub enum DynamicDerivationsAddressResponse {
+    V1(DynamicDerivationsAddressResponseV1),
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct DynamicDerivationsAddressResponseV1 {
+    pub addr: DynamicDerivationsResponseInfo,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct DynamicDerivationsResponseInfo {
+    /// Public key of the root key
+    pub multisigner: MultiSigner,
+    pub dynamic_derivations: Vec<DynamicDerivationResponseInfo>,
+}
+
+#[derive(Clone, Encode, Decode, Debug, Eq, PartialEq)]
+pub struct DynamicDerivationResponseInfo {
+    /// Dynamic derivation path
+    pub derivation_path: String,
+    /// The type of encryption in the network
+    pub encryption: Encryption,
+    /// Public key of the derivation path. The address may be derived from it.
+    pub public_key: MultiSigner,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/error.rs.html b/rustdocs/src/definitions/error.rs.html new file mode 100644 index 0000000000..bc8451544e --- /dev/null +++ b/rustdocs/src/definitions/error.rs.html @@ -0,0 +1,391 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+
use hex::FromHexError;
+use sp_core::H256;
+
+use crate::{
+    crypto::Encryption,
+    keyring::{AddressKey, NetworkSpecsKey},
+};
+
+pub type Result<T> = std::result::Result<T, Error>;
+
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error(transparent)]
+    HexDecodingError(#[from] FromHexError),
+
+    #[error(transparent)]
+    CodecError(#[from] parity_scale_codec::Error),
+
+    #[error(transparent)]
+    Wasm(#[from] crate::error_active::Wasm),
+
+    #[error(transparent)]
+    Ss58(#[from] sp_core::crypto::PublicError),
+
+    #[error(transparent)]
+    Io(#[from] std::io::Error),
+
+    #[error(transparent)]
+    LibSecp(#[from] libsecp256k1::Error),
+
+    /// Received public key length is different from the one expected for
+    /// given encryption algorithm.
+    #[error("Public key length does not match the encryption.")]
+    WrongPublicKeyLength,
+
+    /// `Error` when there is encryption mismatch between one of
+    /// [`NetworkSpecsKey`] in `network_id` field of [`AddressDetails`] and the
+    /// `encryption` field of [`AddressDetails`]
+    ///
+    /// [`AddressDetails`]: crate::users::AddressDetails
+    #[error(
+        "Address details entry with address key {} has not matching encryption {}.",
+        hex::encode(address_key.key()),
+        encryption.show(),
+    )]
+    EncryptionMismatch {
+        address_key: AddressKey,
+        encryption: Encryption,
+    },
+
+    /// [`NetworkSpecsKey`] is built using network genesis hash and [`Encryption`].
+    /// [`OrderedNetworkSpecs`](crate::network_specs::OrderedNetworkSpecs) entry stored under
+    /// this `NetworkSpecsKey` in `SPECSTREE` tree of the cold database
+    /// contains `genesis_hash` field with a different genesis hash.
+    #[error(
+        "Network specs (NetworkSpecs) entry with network specs key {} \
+        has not matching genesis hash {}.",
+        hex::encode(network_specs_key.key()),
+        hex::encode(genesis_hash),
+    )]
+    SpecsGenesisHashMismatch {
+        network_specs_key: NetworkSpecsKey,
+        genesis_hash: H256,
+    },
+
+    /// [`NetworkSpecsKey`] is built using network genesis hash and [`Encryption`].
+    /// [`NetworkSpecs`](crate::network_specs::NetworkSpecs) entry
+    /// stored under this `NetworkSpecsKey` in `SPECSTREEPREP` tree of the hot
+    /// database contains `encryption` field with a different [`Encryption`].
+    #[error(
+        "specs encryption mismatch {} {}`",
+        hex::encode(network_specs_key.key()),
+        encryption.show()
+    )]
+    SpecsToSendEncryptionMismatch {
+        network_specs_key: NetworkSpecsKey,
+        encryption: Encryption,
+    },
+
+    /// [`NetworkSpecsKey`] is built using network genesis hash and [`Encryption`].
+    /// [`NetworkSpecs`](crate::network_specs::NetworkSpecs) entry
+    /// stored under this `NetworkSpecsKey` in `SPECSTREEPREP` tree of the hot
+    /// database contains `genesis_hash` field with a different genesis hash.
+    #[error(
+        "Network specs (NetworkSpecs) entry with network specs key {} \
+        has wrong genesis hash {}.",
+        hex::encode(network_specs_key.key()),
+        hex::encode(genesis_hash),
+    )]
+    SpecsToSendGenesisHash {
+        network_specs_key: NetworkSpecsKey,
+        genesis_hash: H256,
+    },
+
+    #[error(transparent)]
+    MetadataError(#[from] MetadataError),
+
+    /// Network name and/or network version in [`MetaKey`] do not match the
+    /// network name and network version from `Version` constant, `System`
+    /// pallet of the metadata stored under this [`MetaKey`].
+    ///
+    /// Error could be encountered only in the hot database.
+    ///
+    /// [`MetaKey`]: crate::keyring::MetaKey
+    #[error(
+        "Meta key corresponds to {this_name}{this_version}. \
+        Stored metadata is {that_name}{that_version}."
+    )]
+    MetadataMismatch {
+        this_name: String,
+        this_version: u32,
+        that_name: String,
+        that_version: u32,
+    },
+
+    #[error("Cannot convert {0} to valid encryption.")]
+    UnknownEncryption(String),
+}
+
+/// Error decoding transfer content
+///
+/// All variants could be encountered both on the active side
+/// (when checking the message content while signing it)
+/// and on the Vault side (when processing the received messages)
+#[derive(Debug)]
+pub enum TransferContent {
+    /// `add_specs` message content
+    AddSpecs,
+
+    /// `load_metadata` message content
+    LoadMeta,
+
+    /// `load_types` message content
+    LoadTypes,
+}
+
+impl TransferContent {
+    /// Display [`TransferContent`] in readable form
+    pub fn show(&self) -> String {
+        let insert = match &self {
+            TransferContent::AddSpecs => "`add_specs`",
+            TransferContent::LoadMeta => "`load_meta`",
+            TransferContent::LoadTypes => "`load_types`",
+        };
+        format!("Payload could not be decoded as {insert}.")
+    }
+}
+
+/// Intrinsic problems of the metadata making it unsuitable for Vault use
+#[derive(Debug, PartialEq, thiserror::Error)]
+pub enum MetadataError {
+    /// Supported are `V12`, `V13`, and `V14` versions of
+    /// [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html).
+    ///
+    /// Any other version results in error.
+    #[error("version incompatible")]
+    VersionIncompatible,
+
+    /// Metadata does not have `System` pallet, i.e. there is no place to look
+    /// for network
+    /// [`RuntimeVersion`](https://docs.rs/sp-version/latest/sp_version/struct.RuntimeVersion.html)
+    #[error("no system pallet")]
+    NoSystemPallet,
+
+    /// Metadata does not have `Version` constant in `System` pallet, i.e.
+    /// there is no place to look for network
+    /// [`RuntimeVersion`](https://docs.rs/sp-version/latest/sp_version/struct.RuntimeVersion.html)
+    #[error("no version in constants")]
+    NoVersionInConstants,
+
+    /// `Vec<u8>` retrieved from `Version` constant in `System` pallet could
+    /// not be decoded as
+    /// [`RuntimeVersion`](https://docs.rs/sp-version/latest/sp_version/struct.RuntimeVersion.html)
+    #[error("runtime version not decodeable")]
+    RuntimeVersionNotDecodeable,
+
+    /// Metadata has `SS58Prefix` constant in `System` pallet, but its content
+    /// could not be decoded as valid base58 prefix, i.e. as `u16` or `u8`
+    /// number
+    #[error("base58 prefix not decodable")]
+    Base58PrefixNotDecodeable,
+
+    /// Base58 prefix from metadata (`meta`) does not match base58 prefix in specs (`specs`)
+    #[error("base58 prefix from metadata {} mismatches prefix from specs {}", .specs, .meta)]
+    Base58PrefixSpecsMismatch { specs: u16, meta: u16 },
+
+    /// Metadata first 4 bytes are not expected `b"meta"` prelude
+    #[error("metadata first bytes are not \"meta\" magic")]
+    NotMeta,
+
+    /// Metadata body (after `b"meta"` prelude) could not be decoded as
+    /// [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html)
+    #[error("metadata body is not decodable")]
+    UnableToDecode,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/error_active.rs.html b/rustdocs/src/definitions/error_active.rs.html new file mode 100644 index 0000000000..58a4f2fae7 --- /dev/null +++ b/rustdocs/src/definitions/error_active.rs.html @@ -0,0 +1,107 @@ +error_active.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+
//! Errors occurring on the active side, i.e. while operating `generate_message`
+//! client
+//!
+//! Active side deals with both preparation of cold database that would be
+//! loaded in Vault on build and with hot database operations. Cold database
+//! could be the *release* cold database (the actual one for Vault build) or
+//! the *test* cold database (with test Alice identities, used for tests).
+
+use crate::error::MetadataError;
+
+/// Errors with `wasm` files processing
+// TODO add links to external errors and definitions, when the `sc-...` crates
+// are published
+#[derive(Debug, thiserror::Error)]
+pub enum Wasm {
+    /// Failed to make `Metadata_metadata` call on data extracted from `wasm`
+    /// file.
+    #[error(transparent)]
+    Executor(#[from] sc_executor_common::error::Error),
+
+    /// Metadata extracted from `wasm` file could not be decoded.
+    #[error("metadata from file could not be decoded")]
+    DecodingMetadata,
+
+    /// Metadata extracted from `wasm` file is not suitable to be used in
+    /// Vault.
+    ///
+    /// Associated data is [`MetadataError`] specifying what exactly is wrong
+    /// with the metadata.
+    #[error(transparent)]
+    FaultyMetadata(#[from] MetadataError),
+
+    /// Error reading `wasm` file.
+    #[error(transparent)]
+    File(#[from] std::io::Error),
+
+    #[error(transparent)]
+    WasmError(#[from] sc_executor_common::error::WasmError),
+}
+
+/// Error checking metadata file
+#[derive(Debug)]
+pub enum Check {
+    /// Metadata extracted from the metadata file is not suitable to be used in
+    /// Vault.
+    ///
+    /// Associated data is [`MetadataError`] specifying what exactly is wrong
+    /// with the metadata.
+    FaultyMetadata(MetadataError),
+
+    /// Unable to read directory with default metadata
+    MetadataFile(std::io::Error),
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/error_signer.rs.html b/rustdocs/src/definitions/error_signer.rs.html new file mode 100644 index 0000000000..0aa3e9e55e --- /dev/null +++ b/rustdocs/src/definitions/error_signer.rs.html @@ -0,0 +1,653 @@ +error_signer.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+
//! Errors occurring in Vault
+
+/// Content that should have been verified by the general verifier
+#[derive(Debug, PartialEq)]
+pub enum GeneralVerifierForContent {
+    /// Network data.
+    /// Associated data is the network name.
+    Network { name: String },
+
+    /// Types information.
+    Types,
+}
+
+/// Errors in transaction parsing
+#[derive(Debug)]
+pub enum ParserError {
+    SeparateMethodExtensions,
+
+    /// Errors occurring during the decoding procedure.
+    Decoding(ParserDecodingError),
+
+    /// Errors occurring because the metadata
+    /// [`RuntimeMetadataV14`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/v14/struct.RuntimeMetadataV14.html)
+    /// has extensions not acceptable in existing safety paradigm for
+    /// signable transactions.
+    FundamentallyBadV14Metadata(ParserMetadataError),
+
+    /// While parsing transaction with certain version of network metadata,
+    /// found that the version found in signable extensions does not match
+    /// the version of the metadata used for parsing.
+    ///
+    /// Transaction parsing in Vault is done by consecutively checking all
+    /// available metadata for a given network name, starting with the highest
+    /// available version, and looking for a matching network version in the
+    /// parsed extensions.
+    ///
+    /// For `RuntimeMetadataV12` and `RuntimeMetadataV13` the extensions set
+    /// is a fixed one, whereas for `RuntimeMetadataV14` is may vary and is
+    /// determined by the metadata itself.
+    WrongNetworkVersion {
+        /// metadata version from transaction extensions, as found through
+        /// parsing process
+        as_decoded: String,
+
+        /// metadata version actually used for parsing, from the `Version`
+        /// constant in `System` pallet of the metadata
+        in_metadata: u32,
+    },
+}
+
+/// Errors directly related to transaction parsing
+///
+/// Signable transactions are differentiated based on prelude:
+///
+/// - `53xx00` mortal transactions
+/// - `53xx02` immortal transactions
+/// - `53xx03` text message transactions
+///
+/// `53xx00` and `53xx02` transactions contain encoded transaction data, and
+/// are parsed prior to signing using the network metadata. Transaction is
+/// generated in client, for certain address and within certain network.
+/// To parse the transaction and to generate the signature, Vault must
+/// have the network information (network specs and correct network metadata)
+/// and the public address-associated information in its database.
+///
+/// `53xx00` and `53xx02` transcations consist of:
+///
+/// - prelude, `53xx00` or `53xx02`, where `xx` stands for the encryption
+/// algorithm associated with address and network used
+/// - public key corresponding to the address that can sign the transaction
+/// - encoded call data, the body of the transaction
+/// - extensions, as set in the network metadata
+/// - genesis hash of the network in which the transaction was generated
+///
+/// Parsing process first separates the prelude, public key, genesis hash and
+/// the combined call + extensions data.
+///
+/// The call information is SCALE-encoded into `Vec<u8>` bytes and then those
+/// bytes are SCALE-encoded again, so that the call data contained in the
+/// transaction consists of `compact` with encoded call length in bytes
+/// followed by the `Vec<u8>` with the encoded data.
+///
+/// Call and extensions are cut based on the call length declared at the start
+/// of the combined call + extensions data.
+///
+/// Then the extensions are decoded, and it is checked that the metadata version
+/// in extensions coincides with the metadata version used for the decoding.
+///
+/// Decoding the extensions for metadata with `RuntimeMetadataV12` or
+/// `RuntimeMetadataV13` is using a static set of extensions, namely:
+///
+/// - [`Era`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/generic/enum.Era.html)
+/// - nonce, compact `u64`
+/// - transaction tip, compact `u128`
+/// - metadata version, `u32`
+/// - tx version, `u32`
+/// - network genesis hash, `[u8; 32]`
+/// - block hash, `[u8; 32]`
+///
+/// Decoding the extensions for metadata with `RuntimeMetadataV14` uses
+/// dynamically acquired set of extensions from the metadata itself.
+///
+/// After the extensions, the call data itself is decoded using the network
+/// metadata. Each call first byte is the index of the pallet.
+///
+/// Metadata with `RuntimeMetadataV12` or `RuntimeMetadataV13` has only type
+/// names associated with call arguments. Vault finds what the types really
+/// are and how to decode them by using the types information that must be in
+/// Vault database.
+/// For `RuntimeMetadataV12` or `RuntimeMetadataV13` the second byte in call is
+/// the index of the method within the pallet, and thes Vault finds the types
+/// used by the method and proceeds to decode the call data piece by piece.
+///
+/// Metadata with `RuntimeMetadataV14` has types data in-built in the metadata
+/// itself, and the types needed to decode the call are resolved during the
+/// decoding. For `RuntimeMetadataV14` the second byte in call is also
+/// the index of the method within the pallet, but this already goes into the
+/// type resolver.
+///
+/// Calls may contain nested calls, for `RuntimeMetadataV12` or
+/// `RuntimeMetadataV13` metadata the call decoding always starts with pallet
+/// and method combination processing. For `RuntimeMetadataV14` metadata the
+/// nested calls are processed through the type resolver, i.e. the pallet index
+/// is processed independently only on the start of the decoding.
+///
+/// `53xx03` transaction consists of:
+///
+/// - prelude `53xx03`, where `xx` stands for the encryption algorithm
+/// associated with address and network used
+/// - public key corresponding to the address that can sign the transaction
+/// - SCALE-encoded `String` contents of the message
+/// - genesis hash of the network in which the transaction was generated
+///
+/// Vault assumes that every byte of the transaction will be processed, and
+/// shows an error if this is not the case.
+#[derive(Debug)]
+pub enum ParserDecodingError {
+    /// Transaction was announced by the prelude to be mortal (`53xx00`),
+    /// but has `Era::Immortal` in extensions
+    UnexpectedImmortality,
+
+    /// Transaction was announced by the prelude to be immortal (`53xx02`),
+    /// but has `Era::Mortal(_, _)` in extensions
+    UnexpectedMortality,
+
+    /// Genesis hash cut from the end of the transaction does not match the one
+    /// found in the extensions
+    GenesisHashMismatch,
+
+    /// In immortal transaction the block hash from the extensions is the
+    /// network genesis hash.
+    ///
+    /// This error happens when block hash is different with the genesis hash
+    /// cut from the end of the transaction.
+    ImmortalHashMismatch,
+
+    /// Error decoding the extensions using metadata with `RuntimeMetadataV12`
+    /// or `RuntimeMetadataV13`, with default extensions set.
+    ExtensionsOlder,
+
+    /// Used only for `RuntimeMetadataV12` or `RuntimeMetadataV13`,
+    /// indicates that method index (second byte of the call data) is not valid
+    /// for the pallet with found name.
+    MethodNotFound {
+        /// index of the method, second byte of the call data
+        method_index: u8,
+
+        /// name of the pallet, found from the first byte of the call data
+        pallet_name: String,
+    },
+
+    /// Used only for all calls in `RuntimeMetadataV12` or `RuntimeMetadataV13`,
+    /// and for entry call in `RuntimeMetadataV14` metadata. First byte of the
+    /// call data is not a valid pallet index.
+    ///
+    /// Associated data is what was thought to be a pallet index.
+    PalletNotFound(u8),
+
+    /// Only for entry call in `RuntimeMetadataV14`. Pallet found via first byte
+    /// of the call has no associated calls.
+    ///
+    /// Associated data is the pallet name.
+    NoCallsInPallet(String),
+
+    /// Only for `RuntimeMetadataV14`. Found type index could not be resolved
+    /// in types registry
+    V14TypeNotResolved,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`. Argument type
+    /// could not be taken out of `DecodeDifferent` construction.
+    ArgumentTypeError,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`. Argument name
+    /// could not be taken out of `DecodeDifferent` construction.
+    ArgumentNameError,
+
+    /// Parser was trying to find an encoded
+    /// [`compact`](https://docs.rs/parity-scale-codec/latest/parity_scale_codec/struct.Compact.html),
+    /// in the bytes sequence, but was unable to.
+    NoCompact,
+
+    /// Parser was expecting more data.
+    DataTooShort,
+
+    /// Parser was unable to decode the data piece into a primitive type.
+    ///
+    /// Associated data is primitive identifier.
+    PrimitiveFailure(String),
+
+    /// SCALE-encoded `Option<_>` can have as a first byte:
+    ///
+    /// - `0` if the value is `None`
+    /// - `1` if the value is `Some`
+    /// - `2` if the value is `Some(false)` for `Option<bool>` encoding
+    ///
+    /// This error appears if the parser encounters something unexpected in the
+    /// first byte of encoded `Option<_>` instead.
+    UnexpectedOptionVariant,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`.
+    /// Decoding
+    /// [`IdentityFields`](https://docs.substrate.io/rustdocs/latest/pallet_identity/struct.IdentityFields.html)
+    /// requires having correct type information for
+    /// [`IdentityField`](https://docs.substrate.io/rustdocs/latest/pallet_identity/enum.IdentityField.html)
+    /// in types information. If types information has no entry for
+    /// `IdentityFields` or it is not an enum, this error appears.
+    IdFields,
+
+    /// Parser processes certain types as balance (i.e. transforms the data
+    /// into appropriate float using decimals and units provided).
+    /// For some types the balance representation is not possible, this error
+    /// occurs if the parser tried to process as a balance some type not
+    /// suitable for it.
+    BalanceNotDescribed,
+
+    /// SCALE-encoded enum can have as a first byte only correct index of the
+    /// variant used.
+    ///
+    /// This error appears if the first byte is an invalid variant index.
+    UnexpectedEnumVariant,
+
+    /// Parser found that type declared as a
+    /// [`compact`](https://docs.rs/parity-scale-codec/latest/parity_scale_codec/struct.Compact.html)
+    /// has inner type that could not be encoded as a `compact`
+    UnexpectedCompactInsides,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`.
+    /// Parser has encountered a type that could not be interpreted using the
+    /// existing types information.
+    ///
+    /// Associated data is the type description as it was received by parser
+    /// from the metadata.
+    UnknownType(String),
+
+    /// Only for `RuntimeMetadataV14`.
+    /// While decoding
+    /// [`BitVec<T,O>`](https://docs.rs/bitvec/1.0.0/bitvec/vec/struct.BitVec.html),
+    /// parser encountered `T` type not implementing
+    /// [`BitStore`](https://docs.rs/bitvec/1.0.0/bitvec/store/trait.BitStore.html).
+    NotBitStoreType,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// While decoding
+    /// [`BitVec<T,O>`](https://docs.rs/bitvec/1.0.0/bitvec/vec/struct.BitVec.html),
+    /// parser encountered `O` type not implementing
+    /// [`BitOrder`](https://docs.rs/bitvec/1.0.0/bitvec/order/trait.BitOrder.html).
+    NotBitOrderType,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// Parser failed to decode
+    /// [`BitVec<T,O>`](https://docs.rs/bitvec/1.0.0/bitvec/vec/struct.BitVec.html),
+    /// even though `T` and `O` types were suitable.
+    BitVecFailure,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// Parser failed to decode data slice as
+    /// [`Era`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/generic/enum.Era.html).
+    Era,
+
+    /// Parser expects to use all data in decoding. This error appears if some
+    /// data was not used in parsing of the method.
+    SomeDataNotUsedMethod,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// Parser expects to use all data in decoding. This error appears if some
+    /// data from extensions is not used in the decoding.
+    SomeDataNotUsedExtensions,
+}
+
+/// Errors occurring because the network metadata
+/// [`RuntimeMetadataV14`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/v14/struct.RuntimeMetadataV14.html)
+/// has extensions not compatible with Vault.
+///
+/// To be compatible with signable transactions, metadata extensions must
+/// include:
+///
+/// - `Era` (once)
+/// - block hash (once)
+/// - metadata version (once)
+/// - network genesis hash (at most, once)
+///
+/// If the metadata does not follow those criteria, transactions could not be
+/// parsed, and therefore, could not be signed.
+#[derive(Debug)]
+pub enum ParserMetadataError {
+    /// Metadata extensions have no `Era`
+    NoEra,
+
+    /// Metadata extensions have no block hash
+    NoBlockHash,
+
+    /// Metadata extensions have no network metadata version
+    NoVersionExt,
+
+    /// Metadata extensions have more than one `Era`
+    EraTwice,
+
+    /// Metadata extensions have more than one genesis hash
+    GenesisHashTwice,
+
+    /// Metadata extensions have more than one block hash
+    BlockHashTwice,
+
+    /// Metadata extensions have more than one network metadata version
+    SpecVersionTwice,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/helpers.rs.html b/rustdocs/src/definitions/helpers.rs.html new file mode 100644 index 0000000000..2c00b5ea61 --- /dev/null +++ b/rustdocs/src/definitions/helpers.rs.html @@ -0,0 +1,655 @@ +helpers.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+
//! Common helper functions
+
+use hex;
+use sp_core::{crypto::AccountId32, ecdsa, ed25519, sr25519};
+use sp_core::{
+    crypto::{Ss58AddressFormat, Ss58Codec},
+    hexdisplay::HexDisplay,
+    Hasher, KeccakHasher, H160, H256,
+};
+use sp_runtime::MultiSigner;
+use std::convert::TryInto;
+
+use crate::crypto::Encryption;
+use crate::error::Error;
+use crate::error::Result;
+
+/// Decode hexadecimal `&str` into `Vec<u8>`, with descriptive error  
+///
+/// Function could be used both on hot and cold side.  
+///
+/// In addition to encoded `&str` required is input of `T::NotHex`, to produce
+/// error with details on what exactly turned out to be invalid hexadecimal
+/// string.  
+pub fn unhex(hex_entry: &str) -> Result<Vec<u8>> {
+    let hex_entry = {
+        if let Some(a) = hex_entry.strip_prefix("0x") {
+            a
+        } else {
+            hex_entry
+        }
+    };
+    Ok(hex::decode(hex_entry)?)
+}
+
+/// Get `Vec<u8>` public key from
+/// [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)  
+pub fn multisigner_to_public(m: &MultiSigner) -> Vec<u8> {
+    match m {
+        MultiSigner::Ed25519(a) => a.to_vec(),
+        MultiSigner::Sr25519(a) => a.to_vec(),
+        MultiSigner::Ecdsa(a) => a.0.to_vec(),
+    }
+}
+
+/// Get [`Encryption`](crate::crypto::Encryption) from
+/// [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)  
+pub fn multisigner_to_encryption(m: &MultiSigner) -> Encryption {
+    match m {
+        MultiSigner::Ed25519(_) => Encryption::Ed25519,
+        MultiSigner::Sr25519(_) => Encryption::Sr25519,
+        MultiSigner::Ecdsa(_) => Encryption::Ecdsa,
+    }
+}
+
+pub enum IdenticonStyle {
+    /// Default style for substrate-based networks, dots in a circle.
+    Dots,
+
+    /// Blockies style used in Ethereum networks.
+    Blockies,
+
+    /// Jdenticon style used to identify key sets.
+    Jdenticon,
+}
+
+use crate::navigation::Identicon;
+
+/// Print identicon from
+/// [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)  
+pub fn make_identicon_from_multisigner(
+    multisigner: &MultiSigner,
+    style: IdenticonStyle,
+) -> Identicon {
+    match style {
+        IdenticonStyle::Dots => Identicon::Dots {
+            identity: multisigner_to_public(multisigner),
+        },
+        IdenticonStyle::Blockies => {
+            if let MultiSigner::Ecdsa(ref public) = multisigner {
+                Identicon::Blockies {
+                    identity: print_ethereum_address(public),
+                }
+            } else {
+                Identicon::Blockies {
+                    identity: "".to_string(),
+                }
+            }
+        }
+        IdenticonStyle::Jdenticon => Identicon::Jdenticon {
+            identity: print_multisigner_as_base58_or_eth(
+                multisigner,
+                None,
+                multisigner_to_encryption(multisigner),
+            ),
+        },
+    }
+}
+
+pub fn make_identicon_from_id20(id: &[u8; 20]) -> Identicon {
+    let account = format!("0x{}", hex::encode(id));
+    Identicon::Blockies { identity: account }
+}
+
+pub fn make_identicon_from_account(account: AccountId32) -> Identicon {
+    make_identicon(&<[u8; 32]>::from(account))
+}
+
+fn make_identicon(into_id: &[u8]) -> Identicon {
+    Identicon::Dots {
+        identity: into_id.into(),
+    }
+}
+
+/// Get [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)
+/// from public key and [`Encryption`](crate::crypto::Encryption)
+pub fn get_multisigner(public: &[u8], encryption: &Encryption) -> Result<MultiSigner> {
+    match encryption {
+        Encryption::Ed25519 => {
+            let into_pubkey: [u8; 32] = public
+                .to_vec()
+                .try_into()
+                .map_err(|_| Error::WrongPublicKeyLength)?;
+            Ok(MultiSigner::Ed25519(ed25519::Public::from_raw(into_pubkey)))
+        }
+        Encryption::Sr25519 => {
+            let into_pubkey: [u8; 32] = public
+                .to_vec()
+                .try_into()
+                .map_err(|_| Error::WrongPublicKeyLength)?;
+            Ok(MultiSigner::Sr25519(sr25519::Public::from_raw(into_pubkey)))
+        }
+        Encryption::Ecdsa | Encryption::Ethereum => {
+            let into_pubkey: [u8; 33] = public
+                .to_vec()
+                .try_into()
+                .map_err(|_| Error::WrongPublicKeyLength)?;
+            Ok(MultiSigner::Ecdsa(ecdsa::Public::from_raw(into_pubkey)))
+        }
+    }
+}
+
+/// Print [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)
+/// in base58 format
+///
+/// Could be done for both
+/// [custom](https://docs.rs/sp-core/6.0.0/sp_core/crypto/trait.Ss58Codec.html#method.to_ss58check_with_version)
+/// network-specific base58 prefix by providing `Some(value)` as `optional_prefix` or with
+/// [default](https://docs.rs/sp-core/6.0.0/sp_core/crypto/trait.Ss58Codec.html#method.to_ss58check)
+/// one by leaving it `None`.
+pub fn print_multisigner_as_base58_or_eth(
+    multi_signer: &MultiSigner,
+    optional_prefix: Option<u16>,
+    encryption: Encryption,
+) -> String {
+    match optional_prefix {
+        Some(base58prefix) => {
+            let version_for_base58 = Ss58AddressFormat::custom(base58prefix);
+            match multi_signer {
+                MultiSigner::Ed25519(pubkey) => {
+                    pubkey.to_ss58check_with_version(version_for_base58)
+                }
+                MultiSigner::Sr25519(pubkey) => {
+                    pubkey.to_ss58check_with_version(version_for_base58)
+                }
+                MultiSigner::Ecdsa(pubkey) => {
+                    if encryption == Encryption::Ethereum {
+                        print_ethereum_address(pubkey)
+                    } else {
+                        pubkey.to_ss58check_with_version(version_for_base58)
+                    }
+                }
+            }
+        }
+        None => match multi_signer {
+            MultiSigner::Ed25519(pubkey) => {
+                let version = Ss58AddressFormat::try_from("BareEd25519")
+                    .expect("unable to make Ss58AddressFormat from `BareEd25519`");
+                pubkey.to_ss58check_with_version(version)
+            }
+            MultiSigner::Sr25519(pubkey) => {
+                let version = Ss58AddressFormat::try_from("BareSr25519")
+                    .expect("unable to make Ss58AddressFormat from `BareSr25519`");
+                pubkey.to_ss58check_with_version(version)
+            }
+            MultiSigner::Ecdsa(pubkey) => {
+                if encryption == Encryption::Ethereum {
+                    print_ethereum_address(pubkey)
+                } else {
+                    pubkey.to_ss58check()
+                }
+            }
+        },
+    }
+}
+
+/// Turn a `ecdsa::Public` addr into an Ethereum address.
+pub fn ecdsa_public_to_eth_address(public: &ecdsa::Public) -> Result<H160> {
+    let decompressed = libsecp256k1::PublicKey::parse_compressed(&public.0)?.serialize();
+    let mut m = [0u8; 64];
+    m.copy_from_slice(&decompressed[1..65]);
+    Ok(H160::from(H256::from_slice(
+        KeccakHasher::hash(&m).as_bytes(),
+    )))
+}
+
+/// Print a `ecdsa::Public` into `String`.
+///
+/// Panics if provided ecdsa public key is in wrong format.
+fn print_ethereum_address(public: &ecdsa::Public) -> String {
+    let account = ecdsa_public_to_eth_address(public).expect("Wrong ecdsa public key provided");
+
+    format!("0x{:?}", HexDisplay::from(&account.as_bytes()))
+}
+
+pub fn base58_or_eth_to_multisigner(
+    base58_or_eth: &str,
+    encryption: &Encryption,
+) -> Result<MultiSigner> {
+    match encryption {
+        Encryption::Ed25519 => {
+            let pubkey = ed25519::Public::from_ss58check(base58_or_eth)?;
+            Ok(MultiSigner::Ed25519(pubkey))
+        }
+        Encryption::Sr25519 => {
+            let pubkey = sr25519::Public::from_ss58check(base58_or_eth)?;
+            Ok(MultiSigner::Sr25519(pubkey))
+        }
+        Encryption::Ethereum | Encryption::Ecdsa => {
+            let pubkey = ecdsa::Public::from_ss58check(base58_or_eth)?;
+            Ok(MultiSigner::Ecdsa(pubkey))
+        }
+    }
+}
+
+/// Print id pic for metadata hash
+///
+/// Currently uses PNG identicon generator, could be changed later.
+pub fn pic_meta(meta_hash: &[u8]) -> Identicon {
+    make_identicon(meta_hash)
+}
+
+/// Print id pic for hash of SCALE-encoded types data
+///
+/// Currently uses PNG identicon generator, could be changed later.
+pub fn pic_types(types_hash: &[u8]) -> Identicon {
+    make_identicon(types_hash)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use pretty_assertions::assert_eq;
+    use sp_core::Pair;
+    use sp_runtime::MultiSigner::Sr25519;
+
+    #[test]
+    fn test_eth_account_1() {
+        let secret_key =
+            hex::decode("502f97299c472b88754accd412b7c9a6062ef3186fba0c0388365e1edec24875")
+                .unwrap();
+
+        let public_key = ecdsa::Pair::from_seed_slice(&secret_key).unwrap().public();
+
+        assert_eq!(
+            print_ethereum_address(&public_key),
+            "0x976f8456e4e2034179b284a23c0e0c8f6d3da50c"
+        )
+    }
+
+    #[test]
+    fn test_eth_account_2() {
+        let secret_key =
+            hex::decode("0f02ba4d7f83e59eaa32eae9c3c4d99b68ce76decade21cdab7ecce8f4aef81a")
+                .unwrap();
+
+        let public_key = ecdsa::Pair::from_seed_slice(&secret_key).unwrap().public();
+
+        assert_eq!(
+            print_ethereum_address(&public_key),
+            "0x420e9f260b40af7e49440cead3069f8e82a5230f",
+        )
+    }
+
+    #[test]
+    fn test_ss85_to_multisigner() {
+        let secret_key =
+            hex::decode("46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a")
+                .unwrap();
+        let encryption = Encryption::Sr25519;
+        let public = sr25519::Pair::from_seed_slice(&secret_key)
+            .unwrap()
+            .public();
+        let multisigner = Sr25519(public);
+
+        let ss58 = print_multisigner_as_base58_or_eth(&multisigner, None, encryption);
+        let result = base58_or_eth_to_multisigner(&ss58, &Encryption::Sr25519).unwrap();
+        assert_eq!(result, multisigner);
+    }
+
+    #[test]
+    fn test_print_multisigner_polkadot() {
+        let multisigner = Sr25519(sr25519::Public(
+            hex::decode("4a755d99a3cbafc1918769c292848bc87bc2e3cb3e09c17856a1c7d0c784b41c")
+                .unwrap()
+                .try_into()
+                .unwrap(),
+        ));
+        assert_eq!(
+            print_multisigner_as_base58_or_eth(&multisigner, Some(0), Encryption::Sr25519),
+            "12gdQgfKFbiuba7hHS81MMr1rQH2amezrCbWixXZoUKzAm3q"
+        );
+    }
+
+    #[test]
+    fn test_print_multisigner_no_network() {
+        let multisigner = Sr25519(sr25519::Public(
+            hex::decode("4a755d99a3cbafc1918769c292848bc87bc2e3cb3e09c17856a1c7d0c784b41c")
+                .unwrap()
+                .try_into()
+                .unwrap(),
+        ));
+        assert_eq!(
+            print_multisigner_as_base58_or_eth(&multisigner, None, Encryption::Sr25519),
+            "8UHfgCidtbdkdXABy12jG7SVtRKdxHX399eLeAsGKvUT2U6"
+        );
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/history.rs.html b/rustdocs/src/definitions/history.rs.html new file mode 100644 index 0000000000..0df9539f60 --- /dev/null +++ b/rustdocs/src/definitions/history.rs.html @@ -0,0 +1,1391 @@ +history.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+
//! Types used in Vault history log
+//!
+//! Vault keeps log of all events in `HISTORY` tree of the cold database.
+//!
+//! Every log [`Entry`] consists of timestamp and a set of simultaneously
+//! occurred events `Vec<Event>`. [`Entry`] is stored SCALE-encoded under key
+//! [`Order`](crate::keyring::Order). `Order` is produced from the order the
+//! event gets in history log when entered. `Order` is an addition to the
+//! timestamp, and normally arranging entries by the timestamp should
+//! coincide with arranging entries by `Order`.  
+//!
+//! Log by default starts with database init `Entry` containing:
+//!
+//! - `Event::DatabaseInitiated`
+//! - `Event::GeneralVerifierSet(_)`
+//!
+//! User can clear history log at any time. This indeed will remove all history
+//! entries, and the log will then start with `Entry` containing
+//! `Event::HistoryCleared`.
+use parity_scale_codec::{Decode, Encode};
+use sp_core::{blake2_256, H256};
+use sp_runtime::MultiSigner;
+use std::convert::TryInto;
+
+use crate::{
+    crypto::Encryption,
+    keyring::VerifierKey,
+    metadata::MetaValues,
+    network_specs::{
+        NetworkSpecs, OrderedNetworkSpecs, ValidCurrentVerifier, Verifier, VerifierValue,
+    },
+    qr_transfers::ContentLoadTypes,
+};
+
+/// Event content for importing or removing metadata of a known network
+///
+/// Contains network name, network version, metadata hash.
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct MetaValuesDisplay {
+    pub name: String,
+    pub version: u32,
+    pub meta_hash: H256,
+}
+
+impl MetaValuesDisplay {
+    pub fn new(name: String, version: u32, meta_hash: H256) -> Self {
+        Self {
+            name,
+            version,
+            meta_hash,
+        }
+    }
+
+    /// Generate [`MetaValuesDisplay`] from [`MetaValues`]
+    pub fn get(meta_values: &MetaValues) -> Self {
+        Self {
+            name: meta_values.name.to_string(),
+            version: meta_values.version,
+            meta_hash: blake2_256(&meta_values.meta).into(),
+        }
+    }
+}
+
+/// Event content for generating [`SufficientCrypto`](crate::crypto::SufficientCrypto)
+/// QR code for `load_metadata` message  
+///
+/// Effectively records that network metadata was signed by user.
+/// Contains network name, network version, metadata hash, and [`VerifierValue`]
+/// of address used for `SufficientCrypto` generation.  
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct MetaValuesExport {
+    pub name: String,
+    pub version: u32,
+    pub meta_hash: H256,
+    pub signed_by: VerifierValue,
+}
+
+impl MetaValuesExport {
+    pub fn new(name: String, version: u32, meta_hash: H256, signed_by: VerifierValue) -> Self {
+        Self {
+            name,
+            version,
+            meta_hash,
+            signed_by,
+        }
+    }
+
+    /// Generate [`MetaValuesExport`] from [`MetaValues`] and [`VerifierValue`]
+    /// of address used for `SufficientCrypto` generation.  
+    pub fn get(meta_values: &MetaValues, signed_by: &VerifierValue) -> Self {
+        Self {
+            name: meta_values.name.to_string(),
+            version: meta_values.version,
+            meta_hash: blake2_256(&meta_values.meta).into(),
+            signed_by: signed_by.to_owned(),
+        }
+    }
+}
+
+/// Event content for importing or removing network specs  
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct NetworkSpecsDisplay {
+    pub network: OrderedNetworkSpecs,
+    pub valid_current_verifier: ValidCurrentVerifier,
+    pub general_verifier: Verifier,
+}
+
+impl NetworkSpecsDisplay {
+    /// Generate [`NetworkSpecsDisplay`] from [`OrderedNetworkSpecs`],
+    /// network-associated [`ValidCurrentVerifier`], and
+    /// general verifier [`Verifier`]
+    pub fn get(
+        specs: &OrderedNetworkSpecs,
+        valid_current_verifier: &ValidCurrentVerifier,
+        general_verifier: &Verifier,
+    ) -> Self {
+        Self {
+            network: specs.to_owned(),
+            valid_current_verifier: valid_current_verifier.to_owned(),
+            general_verifier: general_verifier.to_owned(),
+        }
+    }
+}
+
+/// Event content for generating [`SufficientCrypto`](crate::crypto::SufficientCrypto)
+/// QR code for `add_specs` message  
+///
+/// Effectively records that network specs were signed by user.
+/// Contains [`NetworkSpecs`] and [`VerifierValue`] of address used for
+/// `SufficientCrypto` generation.  
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct NetworkSpecsExport {
+    pub specs_to_send: NetworkSpecs,
+    pub signed_by: VerifierValue,
+}
+
+impl NetworkSpecsExport {
+    /// Generate [`NetworkSpecsExport`] from [`NetworkSpecs`] and
+    /// [`VerifierValue`] of address used for `SufficientCrypto` generation.  
+    pub fn get(specs_to_send: &NetworkSpecs, signed_by: &VerifierValue) -> Self {
+        Self {
+            specs_to_send: specs_to_send.to_owned(),
+            signed_by: signed_by.to_owned(),
+        }
+    }
+}
+
+/// Event content for setting network verifier
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct NetworkVerifierDisplay {
+    pub genesis_hash: H256,
+    pub valid_current_verifier: ValidCurrentVerifier,
+    pub general_verifier: Verifier,
+}
+
+impl NetworkVerifierDisplay {
+    /// Generate [`NetworkVerifierDisplay`] from [`VerifierKey`],
+    /// [`ValidCurrentVerifier`], the setting of which the event records,
+    /// and general verifier [`Verifier`]  
+    pub fn get(
+        verifier_key: &VerifierKey,
+        valid_current_verifier: &ValidCurrentVerifier,
+        general_verifier: &Verifier,
+    ) -> Self {
+        Self {
+            genesis_hash: verifier_key.genesis_hash(),
+            valid_current_verifier: valid_current_verifier.to_owned(),
+            general_verifier: general_verifier.to_owned(),
+        }
+    }
+}
+
+/// Event content for importing or removing types information
+///
+/// Contains hash of SCALE-encoded types data and types information [`Verifier`].
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct TypesDisplay {
+    pub types_hash: H256,
+    pub verifier: Verifier,
+}
+
+impl TypesDisplay {
+    pub fn new(types_hash: H256, verifier: Verifier) -> Self {
+        Self {
+            types_hash,
+            verifier,
+        }
+    }
+
+    /// Generate [`TypesDisplay`] from [`ContentLoadTypes`] and types information
+    /// [`Verifier`]  
+    pub fn get(types_content: &ContentLoadTypes, verifier: &Verifier) -> Self {
+        Self {
+            types_hash: blake2_256(&types_content.store()).into(),
+            verifier: verifier.to_owned(),
+        }
+    }
+}
+
+/// Event content for generating [`SufficientCrypto`](crate::crypto::SufficientCrypto)
+/// QR code for `load_types` message  
+///
+/// Effectively records that types information was signed by user.
+/// used for `SufficientCrypto` generation.  
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct TypesExport {
+    /// Hash of SCALE-encoded types data
+    pub types_hash: H256,
+    /// [`VerifierValue`] of address
+    pub signed_by: VerifierValue,
+}
+
+impl TypesExport {
+    pub fn new(types_hash: H256, signed_by: VerifierValue) -> Self {
+        Self {
+            types_hash,
+            signed_by,
+        }
+    }
+
+    /// Generate [`TypesExport`] from [`ContentLoadTypes`] and [`VerifierValue`]
+    /// of address used for `SufficientCrypto` generation  
+    pub fn get(types_content: &ContentLoadTypes, signed_by: &VerifierValue) -> Self {
+        Self {
+            types_hash: blake2_256(&types_content.store()).into(),
+            signed_by: signed_by.to_owned(),
+        }
+    }
+}
+
+/// Event content for address generation or removal.
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct IdentityHistory {
+    /// The name of the seed.
+    pub seed_name: String,
+    /// [`Encryption`] scheme of the seed.
+    pub encryption: Encryption,
+    /// Public key.
+    pub public_key: Vec<u8>,
+    /// - path with soft (`/`) and hard (`//`) derivations only, **without** password  
+    pub path: String,
+    /// - genesis hash of the network within which the address is  
+    pub network_genesis_hash: H256,
+}
+
+impl IdentityHistory {
+    pub fn new(
+        seed_name: String,
+        encryption: Encryption,
+        public_key: Vec<u8>,
+        path: String,
+        network_genesis_hash: H256,
+    ) -> Self {
+        Self {
+            seed_name,
+            encryption,
+            public_key,
+            path,
+            network_genesis_hash,
+        }
+    }
+
+    /// Generate [`IdentityHistory`] from parts  
+    pub fn get(
+        seed_name: &str,
+        encryption: &Encryption,
+        public_key: &[u8],
+        path: &str,
+        network_genesis_hash: H256,
+    ) -> Self {
+        Self {
+            seed_name: seed_name.to_string(),
+            encryption: encryption.to_owned(),
+            public_key: public_key.to_vec(),
+            path: path.to_string(),
+            network_genesis_hash,
+        }
+    }
+}
+
+/// History log information about transactions, both successfully signed and
+/// the ones with wrong password entered by user
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct SignDisplay {
+    /// raw `Vec<u8>` transaction that user either tried to sign or signed  
+    pub transaction: Vec<u8>,
+
+    /// name for the network in which transaction is generated,
+    /// as it is recorded in the network specs and network metadata  
+    pub network_name: String,
+
+    /// address that has generated and signed the transaction  
+    pub signed_by: VerifierValue,
+
+    /// user entered comment for transaction
+    pub user_comment: String,
+}
+
+impl SignDisplay {
+    pub fn new(
+        transaction: Vec<u8>,
+        network_name: String,
+        signed_by: VerifierValue,
+        user_comment: String,
+    ) -> Self {
+        Self {
+            transaction,
+            network_name,
+            signed_by,
+            user_comment,
+        }
+    }
+
+    /// Generate [`SignDisplay`] from parts  
+    pub fn get(
+        transaction: &[u8],
+        network_name: &str,
+        signed_by: &VerifierValue,
+        user_comment: &str,
+    ) -> Self {
+        Self {
+            transaction: transaction.to_vec(),
+            network_name: network_name.to_string(),
+            signed_by: signed_by.to_owned(),
+            user_comment: user_comment.to_string(),
+        }
+    }
+
+    /// Get raw transaction, network name, and [`Encryption`] from [`SignDisplay`]  
+    pub fn transaction_network_encryption(&self) -> (Vec<u8>, String, Encryption) {
+        let encryption = match &self.signed_by {
+            VerifierValue::Standard {
+                m: MultiSigner::Ed25519(_),
+            } => Encryption::Ed25519,
+            VerifierValue::Standard {
+                m: MultiSigner::Sr25519(_),
+            } => Encryption::Sr25519,
+            VerifierValue::Standard {
+                m: MultiSigner::Ecdsa(_),
+            } => Encryption::Ecdsa,
+        };
+        (
+            self.transaction.to_vec(),
+            self.network_name.to_string(),
+            encryption,
+        )
+    }
+
+    /// Get raw transaction from [`SignDisplay`]  
+    pub fn transaction(&self) -> Vec<u8> {
+        self.transaction.to_vec()
+    }
+}
+
+/// History log information about messages, both successfully signed and
+/// the ones with wrong password entered by user
+#[derive(Debug, Decode, Encode, PartialEq, Eq, Clone)]
+pub struct SignMessageDisplay {
+    /// decoded message
+    pub message: String,
+
+    /// name for the network in which message transaction is generated,
+    /// as it is recorded in the network specs and network metadata  
+    pub network_name: String,
+
+    /// address that has generated and signed the message  
+    pub signed_by: VerifierValue,
+
+    /// user entered comment for message
+    pub user_comment: String,
+}
+
+impl SignMessageDisplay {
+    /// Generate [`SignMessageDisplay`] from parts  
+    pub fn get(
+        message: &str,
+        network_name: &str,
+        signed_by: &VerifierValue,
+        user_comment: &str,
+    ) -> Self {
+        Self {
+            message: message.to_string(),
+            network_name: network_name.to_string(),
+            signed_by: signed_by.to_owned(),
+            user_comment: user_comment.to_string(),
+        }
+    }
+}
+
+/// Events that could be recorded in the history log
+#[derive(PartialEq, Eq, Debug, Decode, Encode, Clone)]
+pub enum Event {
+    /// Network metadata was added
+    MetadataAdded {
+        meta_values_display: MetaValuesDisplay,
+    },
+
+    /// Network metadata was removed
+    MetadataRemoved {
+        meta_values_display: MetaValuesDisplay,
+    },
+
+    /// User has generated [`SufficientCrypto`](crate::crypto::SufficientCrypto)
+    /// with one of Vault addresses for `load_metadata` update
+    MetadataSigned {
+        meta_values_export: MetaValuesExport,
+    },
+
+    /// Network specs were added
+    NetworkSpecsAdded {
+        network_specs_display: NetworkSpecsDisplay,
+    },
+
+    /// Network specs were removed
+    NetworkSpecsRemoved {
+        network_specs_display: NetworkSpecsDisplay,
+    },
+
+    /// User has generated [`SufficientCrypto`](crate::crypto::SufficientCrypto)
+    /// with one of Vault addresses for `add_specs` update
+    NetworkSpecsSigned {
+        network_specs_export: NetworkSpecsExport,
+    },
+
+    /// Network verifier with [`ValidCurrentVerifier`] was set for network
+    NetworkVerifierSet {
+        network_verifier_display: NetworkVerifierDisplay,
+    },
+
+    /// General verifier was set up
+    GeneralVerifierSet { verifier: Verifier },
+
+    /// Types information was added
+    TypesAdded { types_display: TypesDisplay },
+
+    /// Types information was removed
+    TypesRemoved { types_display: TypesDisplay },
+
+    /// User has generated [`SufficientCrypto`](crate::crypto::SufficientCrypto)
+    /// with one of Vault addresses for `load_types` update
+    TypesSigned { types_export: TypesExport },
+
+    /// User has generated signature for a transaction
+    TransactionSigned { sign_display: SignDisplay },
+
+    /// User tried to generate signature for a transaction, but failed to enter
+    /// a valid password
+    TransactionSignError { sign_display: SignDisplay },
+
+    /// User has generated signature for a message
+    MessageSigned {
+        sign_message_display: SignMessageDisplay,
+    },
+
+    /// User tried to generate signature for a message, but failed to enter
+    /// a valid password
+    MessageSignError {
+        sign_message_display: SignMessageDisplay,
+    },
+
+    /// User generated a new address
+    IdentityAdded { identity_history: IdentityHistory },
+
+    /// User removed an address
+    IdentityRemoved { identity_history: IdentityHistory },
+
+    /// All identities were wiped
+    IdentitiesWiped,
+
+    /// Vault was online, i.e. the air-gap was broken
+    DeviceWasOnline,
+
+    /// User has acknowledged the dangers detected and has reset the Vault
+    /// danger status
+    ResetDangerRecord,
+
+    /// New seed was created (stored value here is the seed name)
+    SeedCreated { seed_created: String },
+
+    /// User removed a seed
+    SeedRemoved { seed_name: String },
+
+    /// User opened seed backup, and seed phrase for shortly shown as a plain
+    /// text on screen (stored value here is the seed name)
+    SeedNameWasShown { seed_name_was_shown: String }, // for individual seed_name
+
+    /// User has generated QR code for secret key export
+    SecretWasExported { identity_history: IdentityHistory },
+
+    /// A warning was produces and displayed to user
+    Warning { warning: String },
+
+    /// User has entered wrong password
+    WrongPassword,
+
+    /// User has manually added entry to history log
+    UserEntry { user_entry: String },
+
+    /// System-generated entry into history log
+    SystemEntry { system_entry: String },
+
+    /// History was cleared
+    HistoryCleared,
+
+    /// Database was initiated
+    DatabaseInitiated,
+}
+
+/// History log individual entry
+///
+/// Contains timestamp and set of simultaneously occurred events `Vec<Event>`.
+///
+/// `Entry` is stored SCALE-encoded in the `HISTORY` tree of the cold database,
+/// under key `Order`.
+#[derive(Debug, Decode, Encode, Clone, Eq, PartialEq)]
+pub struct Entry {
+    pub timestamp: String,
+    pub events: Vec<Event>, // events already in showable form
+}
+
+/// Test function generating a set of all possible events
+///
+/// Uses mock values and is needed to test [`Event`] format in displaying all events
+/// in user interface.  
+pub fn all_events_preview() -> Vec<Event> {
+    let meta_values = MetaValues {
+        name: String::from("westend"),
+        version: 9000,
+        optional_base58prefix: Some(42),
+        warn_incomplete_extensions: false,
+        meta: Vec::new(),
+    };
+    let public = [
+        142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147,
+        201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72,
+    ];
+    let verifier_value = VerifierValue::Standard {
+        m: MultiSigner::Sr25519(sp_core::sr25519::Public::from_raw(public)),
+    };
+    let verifier = Verifier {
+        v: Some(verifier_value.clone()),
+    };
+    let valid_current_verifier = ValidCurrentVerifier::General;
+    let known_value: [u8; 32] =
+        hex::decode("e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e")
+            .expect("known value")
+            .try_into()
+            .expect("known value");
+    let ordered_network_specs = OrderedNetworkSpecs {
+        specs: NetworkSpecs {
+            base58prefix: 42,
+            color: String::from("#660D35"),
+            decimals: 12,
+            encryption: Encryption::Sr25519,
+            genesis_hash: sp_core::H256::from(known_value),
+            logo: String::from("westend"),
+            name: String::from("westend"),
+            path_id: String::from("//westend"),
+            secondary_color: String::from("#262626"),
+            title: String::from("Westend"),
+            unit: String::from("WND"),
+        },
+        order: 3,
+    };
+    vec![
+        Event::MetadataAdded {
+            meta_values_display: MetaValuesDisplay::get(&meta_values),
+        },
+        Event::MetadataRemoved {
+            meta_values_display: MetaValuesDisplay::get(&meta_values),
+        },
+        Event::MetadataSigned {
+            meta_values_export: MetaValuesExport::get(&meta_values, &verifier_value),
+        },
+        Event::NetworkSpecsAdded {
+            network_specs_display: NetworkSpecsDisplay::get(
+                &ordered_network_specs,
+                &valid_current_verifier,
+                &verifier,
+            ),
+        },
+        Event::NetworkSpecsRemoved {
+            network_specs_display: NetworkSpecsDisplay::get(
+                &ordered_network_specs,
+                &valid_current_verifier,
+                &verifier,
+            ),
+        },
+        Event::NetworkSpecsSigned {
+            network_specs_export: NetworkSpecsExport::get(
+                &ordered_network_specs.specs,
+                &verifier_value,
+            ),
+        },
+        Event::NetworkVerifierSet {
+            network_verifier_display: NetworkVerifierDisplay::get(
+                &VerifierKey::from_parts(ordered_network_specs.specs.genesis_hash),
+                &valid_current_verifier,
+                &verifier,
+            ),
+        },
+        Event::GeneralVerifierSet {
+            verifier: verifier.to_owned(),
+        },
+        Event::TypesAdded {
+            types_display: TypesDisplay::get(&ContentLoadTypes::from_slice(&[]), &verifier),
+        },
+        Event::TypesRemoved {
+            types_display: TypesDisplay::get(&ContentLoadTypes::from_slice(&[]), &verifier),
+        },
+        Event::TypesSigned {
+            types_export: TypesExport::get(&ContentLoadTypes::from_slice(&[]), &verifier_value),
+        },
+        Event::TransactionSigned {
+            sign_display: SignDisplay::get(
+                &Vec::new(),
+                "westend",
+                &verifier_value,
+                "send to Alice",
+            ),
+        },
+        Event::TransactionSignError {
+            sign_display: SignDisplay::get(
+                &Vec::new(),
+                "westend",
+                &verifier_value,
+                "send to Alice",
+            ),
+        },
+        Event::MessageSigned {
+            sign_message_display: SignMessageDisplay::get(
+                "This is Alice\nRoger",
+                "westend",
+                &verifier_value,
+                "send to Alice",
+            ),
+        },
+        Event::MessageSignError {
+            sign_message_display: SignMessageDisplay::get(
+                "This is Alice\nRoger",
+                "westend",
+                &verifier_value,
+                "send to Alice",
+            ),
+        },
+        Event::IdentityAdded {
+            identity_history: IdentityHistory::get(
+                "Alice",
+                &Encryption::Sr25519,
+                &public,
+                "//",
+                ordered_network_specs.specs.genesis_hash,
+            ),
+        },
+        Event::IdentityRemoved {
+            identity_history: IdentityHistory::get(
+                "Alice",
+                &Encryption::Sr25519,
+                &public,
+                "//",
+                ordered_network_specs.specs.genesis_hash,
+            ),
+        },
+        Event::IdentitiesWiped,
+        Event::DeviceWasOnline,
+        Event::ResetDangerRecord,
+        Event::SeedCreated {
+            seed_created: String::from("Alice"),
+        },
+        Event::SeedNameWasShown {
+            seed_name_was_shown: String::from("AliceSecretSeed"),
+        },
+        Event::SecretWasExported {
+            identity_history: IdentityHistory::get(
+                "Alice",
+                &Encryption::Sr25519,
+                &public,
+                "//1",
+                ordered_network_specs.specs.genesis_hash,
+            ),
+        },
+        Event::Warning {
+            warning: String::from("Received network information is not verified."),
+        },
+        Event::WrongPassword,
+        Event::UserEntry {
+            user_entry: String::from("Lalala!!!"),
+        },
+        Event::SystemEntry {
+            system_entry: String::from("Blip blop"),
+        },
+        Event::HistoryCleared,
+        Event::DatabaseInitiated,
+    ]
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/keyring.rs.html b/rustdocs/src/definitions/keyring.rs.html new file mode 100644 index 0000000000..173d158391 --- /dev/null +++ b/rustdocs/src/definitions/keyring.rs.html @@ -0,0 +1,927 @@ +keyring.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+
//! Key types and key generation for hot and cold databases
+//!
+//! Cold database has following trees:  
+//!
+//! - `SPECSTREE`, for network specs `OrderedNetworkSpecs` entries, with keys
+//! [`NetworkSpecsKey`]  
+//! - `VERIFIERS`, for network verifier [`CurrentVerifier`](crate::network_specs::CurrentVerifier)
+//! entries, with keys [`VerifierKey`]  
+//! - `METATREE`, for `Vec<u8>` metadata entries, with keys [`MetaKey`] and
+//! prefix search with [`MetaKeyPrefix`]  
+//! - `ADDRTREE`, for [`AddressDetails`](crate::users::AddressDetails) entries
+//! with public information associated with user addresses, with keys
+//! [`AddressKey`]  
+//! - `SETTREE`, for types information, Vault danger status, and general
+//! verifier  
+//! - `TRANSACTION`, to temporarily store transaction information while waiting
+//! for user approval  
+//! - `HISTORY`, for [`Entry`](crate::history::Entry) log of all events
+//! happening in Vault, with keys [`Order`]
+//!
+//! Hot database has following trees:  
+//!
+//! - `SPECSTREEPREP`, for network specs [`NetworkSpecs`](crate::network_specs::NetworkSpecs)
+//! entries, with keys [`NetworkSpecsKey`]  
+//! - `METATREE`, for `Vec<u8>` metadata entries, with keys [`MetaKey`] and
+//! prefix search with [`MetaKeyPrefix`]  
+//! - `META_HISTORY`, for [`H256`] block hash entries, with keys [`MetaKey`] and
+//! prefix search with [`MetaKeyPrefix`]
+//! - `SETTREE`, for types information  
+//! - `ADDRESS_BOOK` for `AddressBookEntry` data needed to maintain hot database
+//! and send RPC calls to fetch network information, with keys `AddressBookKey`
+//!
+use parity_scale_codec::{Decode, Encode};
+use sled::IVec;
+use sp_core::H256;
+use sp_runtime::MultiSigner;
+
+use crate::helpers::{get_multisigner, unhex};
+use crate::{
+    crypto::Encryption,
+    error::{Error, Result},
+};
+
+/// Key in `SPECSTREE` tree (cold database) and in `SPECSPREPTREE` (hot database)  
+///
+/// [`NetworkSpecsKey`] is used to retrieve the
+/// [`OrderedNetworkSpecs`](crate::network_specs::OrderedNetworkSpecs) in cold database and
+/// [`NetworkSpecs`](crate::network_specs::NetworkSpecs) in hot
+/// database.  
+///
+/// Key is derived from network genesis hash and encryption algorithm.  
+///
+/// Network could support more than one encryption algorithm. In this case
+/// there would be more than one database entry with different
+/// [`NetworkSpecsKey`] values. Such entries do not conflict.  
+#[derive(Decode, Hash, Encode, PartialEq, Eq, Debug, Clone)]
+pub struct NetworkSpecsKey(Vec<u8>);
+
+/// Decoded `NetworkSpecsKey` content, encryption-based variants with vector
+/// genesis hash inside
+#[derive(Decode, Encode)]
+enum NetworkSpecsKeyContent {
+    Ed25519(H256),
+    Sr25519(H256),
+    Ecdsa(H256),
+    Ethereum(H256),
+}
+
+impl NetworkSpecsKey {
+    /// Generate [`NetworkSpecsKey`] from parts: network genesis hash and
+    /// [`Encryption`]
+    pub fn from_parts(genesis_hash: &H256, encryption: &Encryption) -> Self {
+        let network_key_content = match encryption {
+            Encryption::Ed25519 => NetworkSpecsKeyContent::Ed25519(*genesis_hash),
+            Encryption::Sr25519 => NetworkSpecsKeyContent::Sr25519(*genesis_hash),
+            Encryption::Ecdsa => NetworkSpecsKeyContent::Ecdsa(*genesis_hash),
+            Encryption::Ethereum => NetworkSpecsKeyContent::Ethereum(*genesis_hash),
+        };
+        Self(network_key_content.encode())
+    }
+
+    /// Transform database `IVec` key into [`NetworkSpecsKey`] prior to processing  
+    ///
+    /// Infallible, no check of encryption validity is done here.
+    pub fn from_ivec(ivec: &IVec) -> Self {
+        Self(ivec.to_vec())
+    }
+
+    /// Transform hexadecimal `String` into [`NetworkSpecsKey`]  
+    ///
+    /// Vault receives hexadecimal strings from user interface.
+    ///
+    /// This function checks only that hexadecimal format is valid, no check
+    /// of encryption validity is done here.  
+    pub fn from_hex(hex_line: &str) -> Result<Self> {
+        Ok(Self(unhex(hex_line)?))
+    }
+
+    /// Get genesis hash as `H256` and [`Encryption`] from [`NetworkSpecsKey`]
+    pub fn genesis_hash_encryption(&self) -> Result<(H256, Encryption)> {
+        match <NetworkSpecsKeyContent>::decode(&mut &self.0[..])? {
+            NetworkSpecsKeyContent::Ed25519(b) => Ok((b, Encryption::Ed25519)),
+            NetworkSpecsKeyContent::Sr25519(b) => Ok((b, Encryption::Sr25519)),
+            NetworkSpecsKeyContent::Ecdsa(b) => Ok((b, Encryption::Ecdsa)),
+            NetworkSpecsKeyContent::Ethereum(b) => Ok((b, Encryption::Ethereum)),
+        }
+    }
+
+    /// Transform [`NetworkSpecsKey`] into `Vec<u8>` database key  
+    pub fn key(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+}
+
+/// Key in `VERIFIERS` tree (cold database)  
+///
+/// [`VerifierKey`] is used to retrieve network verifier information.  
+///
+/// Key is derived from network genesis hash.  
+///
+/// Same [`VerifierKey`] and same [`CurrentVerifier`](crate::network_specs::CurrentVerifier)
+/// are corresponding to all network-associated information:
+///
+/// - network specs, for any encryption algorithm  
+/// - network metadata
+#[derive(Decode, Encode, Debug, Clone, PartialEq, Eq)]
+pub struct VerifierKey(H256);
+
+impl VerifierKey {
+    /// Generate [`VerifierKey`] from network genesis hash
+    pub fn from_parts(genesis_hash: H256) -> Self {
+        Self(genesis_hash)
+    }
+
+    /// Transform database `IVec` key into [`VerifierKey`]  
+    pub fn from_ivec(ivec: &IVec) -> Result<Self> {
+        let bytes: [u8; 32] = ivec
+            .to_vec()
+            .try_into()
+            .map_err(|_| Error::WrongPublicKeyLength)?;
+        Ok(Self(bytes.into()))
+    }
+
+    /// Get genesis hash from the [`VerifierKey`]
+    pub fn genesis_hash(&self) -> H256 {
+        self.0
+    }
+
+    /// Transform [`VerifierKey`] into `Vec<u8>` database key  
+    pub fn key(&self) -> Vec<u8> {
+        self.0.as_bytes().to_vec()
+    }
+}
+
+/// Key in `ADDRTREE` tree (cold database)  
+///
+/// [`AddressKey`] is used to retrieve the address associated public information.  
+///
+/// Key is derived from public key and encryption algorithm.  
+///
+/// To create an address in Vault, sufficient information is:
+///
+/// - seed phrase  
+/// - derivation: soft (`/`) and hard (`//`) junctions and password (`///`)  
+/// - encryption algorithm  
+/// - network for address to be used with (network must support the encryption
+/// algorithm)  
+///
+/// The seed phrase and password are **not** stored in rust-managed database.
+/// For storing seed phrases, Vault device's own key management system is used.
+/// Passwords are never stored.  
+/// Cold database stores only **non-secret** address associated information.  
+///
+/// Each address is defined by combination of public key, encryption algorithm,
+/// and network.  
+///
+/// More than one address could be created for same seed phrase and derivation,
+/// with same encryption algorithm, but for different networks.
+///
+/// For the user interface these addresses would appear as separate entities,
+/// however, the database stores them under same [`AddressKey`], with a set of
+/// allowed networks.  
+#[derive(Decode, Encode, Debug, PartialEq, Eq, Clone)]
+pub struct AddressKey {
+    multisigner: MultiSigner,
+    /// the root address is not used on any network and hence has no genesis hash.
+    genesis_hash: Option<H256>,
+}
+
+impl AddressKey {
+    /// Generate [`AddressKey`] from corresponding
+    /// [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html) value  
+    /// and a network prefix.
+    pub fn new(multisigner: MultiSigner, genesis_hash: Option<H256>) -> Self {
+        Self {
+            multisigner,
+            genesis_hash,
+        }
+    }
+
+    /// Generate [`AddressKey`] from parts: raw public key and [`Encryption`]  
+    ///
+    /// Could result in error if public key length does not match the
+    /// expected length for chosen encryption algorithm.  
+    pub fn from_parts(
+        public: &[u8],
+        encryption: &Encryption,
+        genesis_hash: Option<H256>,
+    ) -> Result<Self> {
+        let multisigner = get_multisigner(public, encryption)?;
+        Ok(Self::new(multisigner, genesis_hash))
+    }
+
+    /// Transform database `IVec` key into [`AddressKey`] prior to processing  
+    ///
+    /// Infallible, the validity of resulting `AddressKey` is not checked.
+    pub fn from_ivec(ivec: &IVec) -> Result<Self> {
+        let vec = ivec.to_vec();
+        Ok(Self::decode(&mut &vec[..])?)
+    }
+
+    /// Transform hexadecimal `String` into [`AddressKey`]  
+    ///
+    /// Vault receives hexadecimal strings from user interface.
+    ///
+    /// This function checks only that hexadecimal format is valid, no length
+    /// check happens here.  
+    pub fn from_hex(hex_address_key: &str) -> Result<Self> {
+        Ok(Self::decode(&mut &unhex(hex_address_key)?[..])?)
+    }
+
+    /// Get public key and [`Encryption`] from the [`AddressKey`]  
+    pub fn public_key_encryption(&self) -> Result<(Vec<u8>, Encryption)> {
+        match &self.multisigner {
+            MultiSigner::Ed25519(b) => Ok((b.to_vec(), Encryption::Ed25519)),
+            MultiSigner::Sr25519(b) => Ok((b.to_vec(), Encryption::Sr25519)),
+            MultiSigner::Ecdsa(b) => Ok((b.0.to_vec(), Encryption::Ecdsa)),
+        }
+    }
+
+    /// Get [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)
+    /// from the [`AddressKey`]  
+    pub fn multi_signer(&self) -> &MultiSigner {
+        &self.multisigner
+    }
+
+    /// Transform [`AddressKey`] into `Vec<u8>` database key  
+    pub fn key(&self) -> Vec<u8> {
+        self.encode()
+    }
+}
+
+/// Key in `METATREE` (cold and hot database) and in `META_HISTORY` tree (hot
+/// database)
+///
+/// [`MetaKey`] is used to retrieve raw `Vec<u8>` metadata from `METATREE` and
+/// relevant block hash entries from `META_HISTORY`.  
+///
+/// Key is derived from network name as it appears in the metadata and network
+/// version.  
+///
+/// Each [`MetaKey`] corresponds to single metadata entry and each metadata
+/// entry has unique [`MetaKey`]. This is so because:
+///
+/// - Metadata that could be used in Vault must contain `Version` constant in
+/// pallet `System`, and only such metadata can be added in the databases.  
+///
+/// - Two raw metadata entries corresponding to same network name and network
+/// version must be identical. If the metadata changes without bumping the
+/// network version, both Vault and hot database client would produce an error.
+/// It is not possible to switch the metadata in cold or hot database to the
+/// changed one without removing the old entry first.  
+#[derive(Debug, Clone)]
+pub struct MetaKey(Vec<u8>);
+
+/// Decoded `MetaKey` content, struct with network name and network version inside  
+#[derive(Decode, Encode)]
+struct MetaKeyContent {
+    name: String,
+    version: u32,
+}
+
+impl MetaKey {
+    /// Generate [`MetaKey`] from parts: network name and network version
+    pub fn from_parts(name: &str, version: u32) -> Self {
+        let meta_key_content = MetaKeyContent {
+            name: name.to_string(),
+            version,
+        };
+        Self(meta_key_content.encode())
+    }
+
+    /// Transform database `IVec` key into [`MetaKey`] prior to processing  
+    ///
+    /// Infallible, the validity of resulting `MetaKey` is not checked.
+    pub fn from_ivec(ivec: &IVec) -> Self {
+        Self(ivec.to_vec())
+    }
+
+    /// Get network name and network version from the [`MetaKey`]
+    ///
+    /// Could result in error if key is corrupted.  
+    pub fn name_version(&self) -> Result<(String, u32)> {
+        let res = <MetaKeyContent>::decode(&mut &self.0[..])?;
+        Ok((res.name, res.version))
+    }
+
+    /// Transform [`MetaKey`] into `Vec<u8>` database key  
+    pub fn key(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+}
+
+/// Prefix for searching in `METATREE` (cold and hot database) and in
+/// `META_HISTORY` tree (hot database)
+///
+/// [`MetaKeyPrefix`] is used to retrieve all available `Vec<u8>` metadata
+/// for a given network name from `METATREE` and all relevant block hash entries
+/// from `META_HISTORY`.  
+///
+/// Prefix is derived from network name as it appears in the metadata.  
+///
+/// [`MetaKey`] consists of concatenated encoded network name and encoded
+/// network version.
+/// [`MetaKeyPrefix`] consists only of encoded network name, and is therefore
+/// a common prefix for all [`MetaKey`] corresponding to the given network
+/// name and all available network versions.  
+#[derive(Debug)]
+pub struct MetaKeyPrefix(Vec<u8>);
+
+/// Decoded `MetaKeyPrefix` content, struct with network name inside  
+#[derive(Decode, Encode)]
+struct MetaKeyPrefixContent(String);
+
+impl MetaKeyPrefix {
+    /// Generate [`MetaKeyPrefix`] from network name
+    pub fn from_name(name: &str) -> Self {
+        let meta_key_prefix_content = MetaKeyPrefixContent(name.to_string());
+        Self(meta_key_prefix_content.encode())
+    }
+
+    /// Transform [`MetaKeyPrefix`] into `Vec<u8>` database key prefix  
+    pub fn prefix(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+}
+
+/// Key in `HISTORY` tree (cold database)  
+///
+/// [`Order`] is used to retrieve history log entry.  
+///
+/// History log [`Entry`](crate::history::Entry) contains timestamp and a set
+/// of simultaneously occurred events.
+///
+/// Order is generated from the number of the history entry in the database
+/// `HISTORY` tree.  
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct Order(u32);
+
+impl Order {
+    /// Transform database `IVec` key into [`Order`].  
+    ///
+    /// If `Order` could not be decoded, i.e. entry is corrupted, produces an
+    /// error.  
+    pub fn from_ivec(ivec: &IVec) -> Result<Self> {
+        Ok(Self(<u32>::decode(&mut &ivec[..])?))
+    }
+
+    /// Generate [`Order`] from `u32` number
+    pub fn from_number(n: u32) -> Self {
+        Self(n)
+    }
+
+    /// Produce `u32` number from the [`Order`].
+    ///
+    /// Number here is the number of history entry in the `HISTORY` database.
+    pub fn stamp(&self) -> u32 {
+        self.0
+    }
+
+    /// Transform [`Order`] into `Vec<u8>` database key
+    pub fn store(&self) -> Vec<u8> {
+        self.0.encode()
+    }
+}
+
+/// Key in `ADDRESS_BOOK` tree (hot database)  
+///
+/// Key is used to retrieve the `AddressBookEntry` for network.
+///
+/// Key is a SCALE-encoded address book title, which is either a network name
+/// as it is stated in the metadata for default networks, or the name with
+/// `-<encryption>` added for non-default networks.
+///
+/// Database could have a few entries for related networks, for example,
+/// entry "westend" for default Westend, and entry "westend-ed25519" for
+/// Westend with `Ed25519` encryption. Such entries would not conflict.
+#[derive(Debug, Clone)]
+#[cfg(feature = "active")]
+pub struct AddressBookKey(Vec<u8>);
+
+/// Decoded `AddressBookKey` content, struct with network address book title inside  
+#[derive(Decode, Encode)]
+#[cfg(feature = "active")]
+struct AddressBookKeyContent(String);
+
+#[cfg(feature = "active")]
+impl AddressBookKey {
+    /// Generate [`AddressBookKey`] from network address book title
+    pub fn from_title(title: &str) -> Self {
+        let address_book_key_content = AddressBookKeyContent(title.to_string());
+        Self(address_book_key_content.encode())
+    }
+
+    /// Transform database `IVec` key into [`AddressBookKey`] prior to processing  
+    ///
+    /// Infallible, the validity of resulting `AddressBookKey` is not checked.
+    pub fn from_ivec(ivec: &IVec) -> Self {
+        Self(ivec.to_vec())
+    }
+
+    /// Get the network address book title from the [`AddressBookKey`]
+    ///
+    /// Could result in error if key is corrupted.
+    pub fn title(&self) -> Result<String> {
+        Ok(<AddressBookKeyContent>::decode(&mut &self.0[..])?.0)
+    }
+
+    /// Transform [`AddressBookKey`] into `Vec<u8>` database key  
+    pub fn key(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn error_in_network_specs_key_signer() {
+        let network_specs_key_hex =
+            "0450e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e";
+        let network_specs_key = NetworkSpecsKey::from_hex(network_specs_key_hex).unwrap();
+        let error = network_specs_key.genesis_hash_encryption().unwrap_err();
+        if let Error::CodecError(_) = error {
+        } else {
+            panic!("Expected codec error, received {error:?}");
+        }
+    }
+
+    #[test]
+    fn error_in_network_specs_key_active() {
+        let network_specs_key_hex =
+            "0450e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e";
+        let network_specs_key =
+            NetworkSpecsKey::from_ivec(&IVec::from(hex::decode(network_specs_key_hex).unwrap()));
+        let error = network_specs_key.genesis_hash_encryption().unwrap_err();
+        if let Error::CodecError(_) = error {
+        } else {
+            panic!("Expected codec error, received {error:?}");
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/lib.rs.html b/rustdocs/src/definitions/lib.rs.html new file mode 100644 index 0000000000..8a4703f4ac --- /dev/null +++ b/rustdocs/src/definitions/lib.rs.html @@ -0,0 +1,97 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+
//! Definitions and common methods for types used in [Vault](https://github.com/paritytech/parity-signer)
+//! and Vault-supporting ecosystem.
+//!
+//! ## Features
+//! Feature `"signer"` corresponds to everything related to Vault air-gapped
+//! device.
+//!
+//! Feature `"active"` corresponds to all Vault-related things happening
+//! **without** air-gap.
+//!
+//! Feature `"test"` includes both `"signer"` and `"active"` features, along
+//! with some testing, and is the default one.
+
+#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+pub mod crypto;
+
+pub mod danger;
+
+pub mod error;
+
+pub mod error_active;
+
+pub mod error_signer;
+
+pub mod helpers;
+
+pub mod history;
+
+pub mod keyring;
+
+pub mod metadata;
+
+pub mod network_specs;
+
+pub mod qr_transfers;
+
+pub mod types;
+
+pub mod users;
+
+pub mod navigation;
+
+pub mod derivations;
+
+pub mod dynamic_derivations;
+pub mod schema_version;
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/metadata.rs.html b/rustdocs/src/definitions/metadata.rs.html new file mode 100644 index 0000000000..3406f5f1b0 --- /dev/null +++ b/rustdocs/src/definitions/metadata.rs.html @@ -0,0 +1,1609 @@ +metadata.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+
//! Network metadata and related types
+//!
+//! The main purpose of the Vault is to generate signatures for transactions.
+//! Vault reads the transactions as QR codes with SCALE-encoded
+//! information.
+//! Any transaction before user is able to sign it must be decoded.
+//!
+//! Transaction decoding uses network metadata, and Vault needs latest
+//! available network metadata to parse freshly generated transactions.  
+//!
+//! New network metadata could be added to Vault through scanning `load_metadata`
+//! QR code for the network metadata. Vault allows loading new metadata only if
+//! the network has network specs in the database and the incoming `load_metadata`
+//! payload is signed by the verifier already associated with the network.  
+//!
+//! Metadata is stored both in cold and in hot databases tree `METATREE` as
+//! SCALE-encoded [`MetaValues`] under key [`MetaKey`].  
+
+use frame_metadata::{decode_different::DecodeDifferent, v14::RuntimeMetadataV14, RuntimeMetadata};
+use parity_scale_codec::{Decode, Encode};
+#[cfg(feature = "active")]
+use sc_executor_common::{
+    runtime_blob::RuntimeBlob,
+    wasm_runtime::{InvokeMethod, WasmModule},
+};
+#[cfg(feature = "active")]
+use sc_executor_wasmi::create_runtime;
+use sled::IVec;
+#[cfg(feature = "active")]
+use sp_core::H256;
+#[cfg(feature = "active")]
+use sp_io::SubstrateHostFunctions;
+use sp_version::RuntimeVersion;
+#[cfg(feature = "active")]
+use sp_wasm_interface::HostFunctions;
+use std::collections::HashMap;
+
+#[cfg(feature = "active")]
+use crate::{crypto::Encryption, error_active::Wasm, helpers::unhex, keyring::AddressBookKey};
+use crate::{
+    error::{Error, MetadataError, Result},
+    keyring::MetaKey,
+};
+
+/// Network information extracted from the metadata: name, version, optional
+/// base58 prefix, warning about extensions incompatible with transaction
+/// parsing for `RuntimeMetadata` with version 14 and above
+#[derive(Decode, Encode, PartialEq, Eq)]
+pub struct MetaInfo {
+    /// Network name, from metadata `Version` constant  
+    pub name: String,
+
+    /// Network version, from in metadata `Version` constant  
+    pub version: u32,
+
+    /// Network base58 prefix, could be encountered in metadata `SS58Prefix`
+    /// constant  
+    ///
+    /// If `SS58Prefix` constant is present in metadata, the prefix derived
+    /// from it is expected to match `base58prefix` from `OrderedNetworkSpecs`.
+    pub optional_base58prefix: Option<u16>,
+
+    /// Flag to indicate that extrinsic set from metadata with
+    /// [`RuntimeMetadataV14`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/v14/struct.RuntimeMetadataV14.html)
+    /// is insufficient for transaction decoding  
+    pub warn_incomplete_extensions: bool,
+}
+
+/// Metadata values: name, version, optional base58 prefix, warning about
+/// extensions incompatible with transaction parsing for `RuntimeMetadata` with
+/// version 14 and above, and metadata itself as raw `Vec<u8>`
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub struct MetaValues {
+    /// Network name, from metadata `Version` constant  
+    pub name: String,
+
+    /// Network version, from in metadata `Version` constant  
+    pub version: u32,
+
+    /// Network base58 prefix, could be encountered in metadata `SS58Prefix`
+    /// constant  
+    ///
+    /// If `SS58Prefix` constant is present in metadata, the prefix derived
+    /// from it is expected to match `base58prefix` from `OrderedNetworkSpecs`.
+    pub optional_base58prefix: Option<u16>,
+
+    /// Flag to indicate that extrinsic set from metadata with
+    /// [`RuntimeMetadataV14`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/v14/struct.RuntimeMetadataV14.html)
+    /// is insufficient for transaction decoding  
+    pub warn_incomplete_extensions: bool,
+
+    /// raw metadata
+    pub meta: Vec<u8>,
+}
+
+impl MetaValues {
+    /// Generates [`MetaValues`] from value extracted from database tree
+    /// `METATREE` either in cold or in hot database using known associated
+    /// network name and network version  
+    ///
+    /// Checks that input name and version match the ones in metadata `Version`
+    /// constant.  
+    pub fn from_entry_name_version_checked(
+        name: &str,
+        version: u32,
+        meta_encoded: IVec,
+    ) -> Result<Self> {
+        let meta_values = Self::from_slice_metadata(&meta_encoded)?;
+        if (meta_values.name != name) || (meta_values.version != version) {
+            return Err(Error::MetadataMismatch {
+                this_name: name.to_string(),
+                this_version: version,
+                that_name: meta_values.name.to_string(),
+                that_version: meta_values.version,
+            });
+        }
+        Ok(meta_values)
+    }
+
+    /// Gets [`MetaValues`] from either cold or hot database tree `METATREE`
+    /// (key, value) entry  
+    ///
+    /// Checks that name and version from [`MetaKey`] match the ones in metadata
+    /// `Version` constant.  
+    pub fn from_entry_checked((meta_key_vec, meta_encoded): (IVec, IVec)) -> Result<Self> {
+        let (name, version) = MetaKey::from_ivec(&meta_key_vec).name_version()?;
+        Self::from_entry_name_version_checked(&name, version, meta_encoded)
+    }
+
+    /// Gets [`MetaValues`] from raw metadata in `Vec<u8>` format
+    ///
+    /// Produces [`MetadataError`] if the metadata is somehow not suitable for
+    /// use in Vault.
+    pub fn from_slice_metadata(meta_slice: &[u8]) -> Result<Self> {
+        let meta_info = info_from_metadata(&runtime_metadata_from_slice(meta_slice)?)?;
+        Ok(Self {
+            name: meta_info.name.to_string(),
+            version: meta_info.version,
+            optional_base58prefix: meta_info.optional_base58prefix,
+            warn_incomplete_extensions: meta_info.warn_incomplete_extensions,
+            meta: meta_slice.to_vec(),
+        })
+    }
+
+    /// Gets [`MetaValues`] from `wasm` file
+    ///
+    /// Could be used to generate metadata updates before metadata release.
+    #[cfg(feature = "active")]
+    pub fn from_wasm_file(filename: &str) -> Result<Self> {
+        let metadata = convert_wasm_into_metadata(filename)?;
+        Self::from_slice_metadata(&metadata)
+    }
+
+    /// Gets [`MetaValues`] from raw hexadecimal metadata
+    ///
+    /// Is used only on Active side, for:
+    /// (a) default and test metadata loading;
+    /// (b) decoding and evaluating fetched metadata;
+    #[cfg(feature = "active")]
+    pub fn from_str_metadata(meta: &str) -> Result<Self> {
+        let meta_vec = unhex(meta)?;
+        Self::from_slice_metadata(&meta_vec)
+    }
+}
+
+/// Extracts raw metadata in `Vec<u8>` format from `wasm` file.
+///
+/// Is used only on Active side, to generate metadata updates before metadata
+/// release.
+#[cfg(feature = "active")]
+pub fn convert_wasm_into_metadata(filename: &str) -> Result<Vec<u8>> {
+    let buffer = std::fs::read(filename).map_err(Wasm::File)?;
+    let runtime_blob = RuntimeBlob::uncompress_if_needed(&buffer).map_err(Wasm::WasmError)?;
+    let wasmi_runtime = create_runtime(
+        runtime_blob,
+        64,
+        SubstrateHostFunctions::host_functions(),
+        false,
+    )
+    .map_err(Wasm::WasmError)?;
+    let mut wasmi_instance = wasmi_runtime.new_instance().map_err(Wasm::Executor)?;
+    let data = wasmi_instance
+        .call(InvokeMethod::Export("Metadata_metadata"), &[])
+        .map_err(Wasm::Executor)?;
+    Ok(<Vec<u8>>::decode(&mut &data[..]).map_err(|_| Wasm::DecodingMetadata)?)
+}
+
+/// Get [`MetaInfo`] from
+/// [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html)
+///
+/// Searches `System` pallet within the metadata, gets from it `Version` and
+/// optionally `SS58Prefix` constants.
+///
+/// Produces [`MetaInfo`] if the metadata is suitable for the Vault, and
+/// [`MetadataError`] if not.
+///
+/// `RuntimeMetadata` suitable for use in Vault:
+///
+/// - must be of runtime version `V12` or above
+/// - must have 'System' pallet  
+/// - must have `Version` constant in `System` pallet, SCALE-decodeable  
+/// - can have `SS58Prefix` constant in `System` pallet, and if it does, the
+/// constant must be SCALE-decodeable  
+///
+/// Additionally, for [`RuntimeMetadataV14`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/v14/struct.RuntimeMetadataV14.html)
+/// the extensions set must be decoding-compatible for any signable transaction.  
+pub fn info_from_metadata(runtime_metadata: &RuntimeMetadata) -> Result<MetaInfo> {
+    let mut runtime_version_encoded: Option<&[u8]> = None;
+    let mut base58_prefix_encoded: Option<&[u8]> = None;
+    let mut warn_incomplete_extensions = false;
+    let mut system_block = false;
+    match runtime_metadata {
+        RuntimeMetadata::V12(metadata_v12) => {
+            if let DecodeDifferent::Decoded(meta_vector) = &metadata_v12.modules {
+                for x in meta_vector.iter() {
+                    if x.name == DecodeDifferent::Encode("System") {
+                        system_block = true;
+                        if let DecodeDifferent::Decoded(constants_vector) = &x.constants {
+                            for y in constants_vector.iter() {
+                                if y.name == DecodeDifferent::Encode("Version") {
+                                    if let DecodeDifferent::Decoded(fin) = &y.value {
+                                        runtime_version_encoded = Some(fin);
+                                    }
+                                }
+                                if y.name == DecodeDifferent::Encode("SS58Prefix") {
+                                    if let DecodeDifferent::Decoded(fin) = &y.value {
+                                        base58_prefix_encoded = Some(fin);
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        RuntimeMetadata::V13(metadata_v13) => {
+            if let DecodeDifferent::Decoded(meta_vector) = &metadata_v13.modules {
+                for x in meta_vector.iter() {
+                    if x.name == DecodeDifferent::Encode("System") {
+                        system_block = true;
+                        if let DecodeDifferent::Decoded(constants_vector) = &x.constants {
+                            for y in constants_vector.iter() {
+                                if y.name == DecodeDifferent::Encode("Version") {
+                                    if let DecodeDifferent::Decoded(fin) = &y.value {
+                                        runtime_version_encoded = Some(fin);
+                                    }
+                                }
+                                if y.name == DecodeDifferent::Encode("SS58Prefix") {
+                                    if let DecodeDifferent::Decoded(fin) = &y.value {
+                                        base58_prefix_encoded = Some(fin);
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        RuntimeMetadata::V14(metadata_v14) => {
+            for x in metadata_v14.pallets.iter() {
+                if x.name == "System" {
+                    system_block = true;
+                    for y in x.constants.iter() {
+                        if y.name == "Version" {
+                            runtime_version_encoded = Some(&y.value)
+                        }
+                        if y.name == "SS58Prefix" {
+                            base58_prefix_encoded = Some(&y.value)
+                        }
+                    }
+                    break;
+                }
+            }
+            warn_incomplete_extensions = need_v14_warning(metadata_v14);
+        }
+        _ => return Err(MetadataError::VersionIncompatible.into()),
+    }
+    if !system_block {
+        return Err(MetadataError::NoSystemPallet.into());
+    }
+    let runtime_version = match runtime_version_encoded {
+        Some(mut x) => match RuntimeVersion::decode(&mut x) {
+            Ok(a) => a,
+            Err(_) => return Err(MetadataError::RuntimeVersionNotDecodeable.into()),
+        },
+        None => return Err(MetadataError::NoVersionInConstants.into()),
+    };
+    let optional_base58prefix = match base58_prefix_encoded {
+        Some(mut x) => match <u16>::decode(&mut x) {
+            Ok(a) => Some(a),
+            Err(_) => match <u8>::decode(&mut x) {
+                // in some older metadata `u8` is used for base58 prefix, likely a legacy thing
+                Ok(a) => Some(a as u16),
+                Err(_) => return Err(MetadataError::Base58PrefixNotDecodeable.into()),
+            },
+        },
+        None => None,
+    };
+    Ok(MetaInfo {
+        name: runtime_version.spec_name.to_string(),
+        version: runtime_version.spec_version,
+        optional_base58prefix,
+        warn_incomplete_extensions,
+    })
+}
+
+/// Get [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html)
+/// from slice of raw `Vec<u8>` metadata
+///
+/// Raw `Vec<u8>` metadata suitable for use in Vault:
+///
+/// - must begin with b"meta"  
+/// - after that must be SCALE-encoded `RuntimeMetadata` with runtime version `V12` or above
+pub fn runtime_metadata_from_slice(meta: &[u8]) -> Result<RuntimeMetadata> {
+    if !meta.starts_with(&[109, 101, 116, 97]) {
+        return Err(MetadataError::NotMeta.into());
+    }
+    if meta[4] < 12 {
+        return Err(MetadataError::VersionIncompatible.into());
+    }
+    Ok(RuntimeMetadata::decode(&mut &meta[4..]).map_err(|_| MetadataError::UnableToDecode)?)
+}
+
+/// Checks if the `v14` metadata has all signed extensions required for transaction decoding.
+/// True if extensions are incomplete.
+///
+/// Currently, the decoding of the transaction demands that metadata version, network genesis hash,
+/// and era are among signed extensions. Otherwise, a `ParserMetadataError` would occur on decoding.
+/// However, we can not simply forbid the loading of the metadata without required set of
+/// signed extensions into Vault.
+///
+/// This function should be used for warnings only on `generate_message` side and during metadata
+/// loading into Vault.
+fn need_v14_warning(metadata_v14: &RuntimeMetadataV14) -> bool {
+    let mut signed_extensions = HashMap::new();
+    for x in metadata_v14.extrinsic.signed_extensions.iter() {
+        let count = signed_extensions
+            .entry(x.identifier.to_string())
+            .or_insert(0);
+        *count += 1;
+    }
+    !(signed_extensions.get("CheckSpecVersion") == Some(&1)
+        && signed_extensions.get("CheckGenesis") == Some(&1)
+        && signed_extensions.get("CheckMortality") == Some(&1)) // no warning needed if each one encountered, and only once
+}
+
+/// Metadata as checked [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html)
+/// with network info extracted from it, for transaction decoding
+pub struct MetaSetElement {
+    /// Network name, from metadata `Version` constant
+    name: String,
+
+    /// Network version, from in metadata `Version` constant  
+    version: u32,
+
+    /// Network base58 prefix, could be encountered in metadata `SS58Prefix`
+    /// constant  
+    ///
+    /// If `SS58Prefix` constant is present in metadata, the prefix derived
+    /// from it is expected to match `base58prefix` from `OrderedNetworkSpecs`.
+    optional_base58prefix: Option<u16>,
+
+    /// [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html)
+    /// [`MetaSetElement`] is successfully generated only if metadata is a
+    /// suitable one
+    runtime_metadata: RuntimeMetadata,
+}
+
+impl MetaSetElement {
+    /// Generates `MetaSetElement` from Vault database tree `METATREE` (key, value)
+    /// entry  
+    ///
+    /// Checks that name and version from [`MetaKey`] match the ones in metadata
+    /// `Version` constant.  
+    ///
+    /// Also checks that the metadata is suitable for use in Vault. Since the
+    /// metadata already was accepted in the database at some point, errors here
+    /// are very unlikely to happen and would indicate the database corruption
+    pub fn from_entry((meta_key_vec, meta_encoded): (IVec, IVec)) -> Result<Self> {
+        let (network_name, network_version) = MetaKey::from_ivec(&meta_key_vec).name_version()?;
+        let runtime_metadata = runtime_metadata_from_slice(&meta_encoded)?;
+        let (name, version, optional_base58prefix) = {
+            let a = info_from_metadata(&runtime_metadata)?;
+            if (a.version != network_version) || (a.name != network_name) {
+                return Err(Error::MetadataMismatch {
+                    this_name: network_name,
+                    this_version: network_version,
+                    that_name: a.name.to_string(),
+                    that_version: a.version,
+                });
+            }
+            (a.name, a.version, a.optional_base58prefix)
+        };
+        Ok(Self {
+            name,
+            version,
+            optional_base58prefix,
+            runtime_metadata,
+        })
+    }
+
+    /// Gets network name
+    pub fn name(&self) -> String {
+        self.name.to_string()
+    }
+
+    /// Gets network version
+    pub fn version(&self) -> u32 {
+        self.version
+    }
+
+    /// Gets optional base58 prefix, if there is one in the metadata
+    pub fn optional_base58prefix(&self) -> Option<u16> {
+        self.optional_base58prefix
+    }
+
+    /// Gets runtime metadata, to be used in transcation decoding
+    pub fn runtime_metadata(&self) -> &RuntimeMetadata {
+        &self.runtime_metadata
+    }
+}
+
+/// Network information needed for RPC calls in the network and for managing the
+/// hot database  
+///
+/// Hot database contains tree `ADDRESS_BOOK` with information needed to perform
+/// RPC calls in networks and generate `load_metadata` and `add_specs` payloads.
+///
+/// `ADDRESS_BOOK` tree stores SCALE-encoded [`AddressBookEntry`] entries under
+/// keys [`AddressBookKey`]
+#[derive(Debug, Decode, Encode, PartialEq, Eq)]
+#[cfg(feature = "active")]
+pub struct AddressBookEntry {
+    /// Network name, as it appears in `Version` constant in metadata  
+    ///
+    /// If network data is queried through RPC call, retrieved metadata must
+    /// have exactly same network name in `Version` constant  
+    pub name: String,
+
+    /// Network genesis hash  
+    ///
+    /// If network data is queried through RPC call, retrieved version must
+    /// be same as the one in address book  
+    pub genesis_hash: H256,
+
+    /// URL address for RPC calls, with or without preferred port
+    pub address: String,
+
+    /// [`Encryption`] that is supported by the network  
+    pub encryption: Encryption,
+
+    /// Address book entry is the default one  
+    ///
+    /// Default networks currently are Polkadot, Kusama, Westend with `Sr25519`
+    /// encryption  
+    pub def: bool,
+}
+
+#[cfg(feature = "active")]
+impl AddressBookEntry {
+    /// Gets [`AddressBookEntry`] from from hot database tree `ADDRESS_BOOK`
+    /// (key, value) entry.  
+    pub fn from_entry(
+        (address_book_key_encoded, address_book_entry_encoded): (IVec, IVec),
+    ) -> Result<AddressBookEntry> {
+        let title = AddressBookKey::from_ivec(&address_book_key_encoded).title()?;
+        AddressBookEntry::from_entry_with_title(&title, &address_book_entry_encoded)
+    }
+
+    /// Gets network address book title and [`AddressBookEntry`] as a tuple from
+    /// from hot database tree `ADDRESS_BOOK` (key, value) entry.  
+    ///
+    /// Network address book title **differs** from `title` in network specs.
+    /// This is just a key in hot database `ADDRESS_BOOK`, and is not displayed
+    /// anywhere else.  
+    pub fn process_entry(
+        (address_book_key_encoded, address_book_entry_encoded): (IVec, IVec),
+    ) -> Result<(String, AddressBookEntry)> {
+        let title = AddressBookKey::from_ivec(&address_book_key_encoded).title()?;
+        let address_book_entry =
+            AddressBookEntry::from_entry_with_title(&title, &address_book_entry_encoded)?;
+        Ok((title, address_book_entry))
+    }
+
+    /// Gets [`AddressBookEntry`] from network address book title and associated
+    /// value from hot database tree `ADDRESS_BOOK`.  
+    pub fn from_entry_with_title(
+        _title: &str,
+        address_book_entry_encoded: &IVec,
+    ) -> Result<AddressBookEntry> {
+        Ok(<AddressBookEntry>::decode(
+            &mut &address_book_entry_encoded[..],
+        )?)
+    }
+}
+
+/// `META_HISTORY` tree entry
+#[derive(Debug, PartialEq, Eq)]
+#[cfg(feature = "active")]
+pub struct MetaHistoryEntry {
+    /// network name, from key
+    pub name: String,
+
+    /// network metadata version, from key
+    pub version: u32,
+
+    /// block hash at which the metadata was fetched, from value
+    pub block_hash: H256,
+}
+
+#[cfg(feature = "active")]
+impl MetaHistoryEntry {
+    /// From the whole entry
+    pub fn from_entry((meta_key_vec, hash_encoded): (IVec, IVec)) -> Result<Self> {
+        let (name, version) = MetaKey::from_ivec(&meta_key_vec).name_version()?;
+        Self::from_entry_with_key_parts(&name, version, &hash_encoded)
+    }
+
+    /// From the entry with already known key parts
+    pub fn from_entry_with_key_parts(
+        name: &str,
+        version: u32,
+        hash_encoded: &IVec,
+    ) -> Result<Self> {
+        let block_hash = H256::decode(&mut &hash_encoded[..])?;
+        Ok(MetaHistoryEntry {
+            name: name.to_string(),
+            version,
+            block_hash,
+        })
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use std::fs::read_to_string;
+
+    #[test]
+    fn westend9070() {
+        let filename = String::from("for_tests/westend9070");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"westend",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9070,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn westend9033() {
+        let filename = String::from("for_tests/westend9033");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"westend",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9033,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn westend9030() {
+        let filename = String::from("for_tests/westend9030");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"westend",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9030,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn rococo9004() {
+        let filename = String::from("for_tests/rococo9004");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"rococo",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9004,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn rococo9002() {
+        let filename = String::from("for_tests/rococo9002");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"rococo",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9002,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn polkadot9080() {
+        let filename = String::from("for_tests/polkadot9080");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"polkadot",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9080,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn polkadot30() {
+        let filename = String::from("for_tests/polkadot30");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"polkadot",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 30,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn polkadot29() {
+        let filename = String::from("for_tests/polkadot29");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"polkadot",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 29,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn kusama9040() {
+        let filename = String::from("for_tests/kusama9040");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"kusama",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9040,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn kusama9010() {
+        let filename = String::from("for_tests/kusama9010");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"kusama",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9010,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+    }
+
+    #[test]
+    fn edgeware() {
+        let filename = String::from("for_tests/edgeware");
+        let meta = read_to_string(filename).unwrap();
+
+        match MetaValues::from_str_metadata(meta.trim()) {
+            Ok(x) => panic!("Unexpectedly decoded as {} version {}", x.name, x.version),
+            Err(e) => {
+                if let Error::MetadataError(MetadataError::NoVersionInConstants) = e {
+                } else {
+                    panic!("expected Error::WrongPublicKeyLength, got {e:?}");
+                }
+            }
+        }
+    }
+
+    #[test]
+    fn centrifuge_amber() {
+        let filename = String::from("for_tests/centrifugeAmber");
+        let meta = read_to_string(filename).unwrap();
+
+        match MetaValues::from_str_metadata(meta.trim()) {
+            Ok(x) => panic!("Unexpectedly decoded as {} version {}", x.name, x.version),
+            Err(e) => {
+                if let Error::MetadataError(MetadataError::VersionIncompatible) = e {
+                } else {
+                    panic!("expected Error::WrongPublicKeyLength, got {e:?}");
+                }
+            }
+        }
+    }
+
+    #[test]
+    fn westend9150() {
+        let filename = String::from("for_tests/westend9150");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"westend",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9150,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+        assert!(
+            !meta_values.warn_incomplete_extensions,
+            "Expected complete extensions in westend9150."
+        )
+    }
+
+    #[test]
+    fn shell200() {
+        let filename = String::from("for_tests/shell200");
+        let meta = read_to_string(filename).unwrap();
+        let meta_values = MetaValues::from_str_metadata(meta.trim()).unwrap();
+        assert!(
+            meta_values.name == *"shell",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 200,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+        assert!(
+            meta_values.warn_incomplete_extensions,
+            "Expected incomplete extensions warning in shell200."
+        )
+    }
+
+    #[test]
+    fn unwasm_westend9150() {
+        let filename = "for_tests/westend_runtime-v9150.compact.compressed.wasm";
+        let meta_values = MetaValues::from_wasm_file(filename).unwrap();
+        assert!(
+            meta_values.name == *"westend",
+            "Unexpected network name: {}",
+            meta_values.name
+        );
+        assert!(
+            meta_values.version == 9150,
+            "Unexpected network name: {}",
+            meta_values.version
+        );
+        assert!(
+            !meta_values.warn_incomplete_extensions,
+            "Expected complete extensions in westend9150."
+        )
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/navigation.rs.html b/rustdocs/src/definitions/navigation.rs.html new file mode 100644 index 0000000000..c2e6c11af9 --- /dev/null +++ b/rustdocs/src/definitions/navigation.rs.html @@ -0,0 +1,1565 @@ +navigation.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+
use sp_core::H256;
+
+use crate::derivations::SeedKeysPreview;
+use crate::{
+    crypto::Encryption, history::Event, keyring::NetworkSpecsKey,
+    network_specs::OrderedNetworkSpecs,
+};
+
+pub use crate::network_specs::NetworkSpecs;
+
+#[derive(PartialEq, Eq, Clone)]
+pub struct SeedNameWithIdenticon {
+    pub seed_name: String,
+    pub identicon: Identicon,
+}
+
+/// A single transaction signing action.
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub struct TransactionSignAction {
+    /// Parsed contents of the transaction.
+    pub content: TransactionCardSet,
+
+    /// If this transaction should be signed with a passworded key.
+    pub has_pwd: bool,
+
+    /// Information about the signing key of this transaction.
+    pub author_info: MAddressCard,
+
+    /// Info about the network this tx happens on.
+    pub network_info: OrderedNetworkSpecs,
+}
+
+/// Enum containing card sets for four different outcomes:
+/// importing derivations (Derivations), signing (Sign),
+/// accepting (Stub) and reading, for example, in case of an error (Read)
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum TransactionAction {
+    Derivations {
+        content: Box<TransactionCardSet>,
+    },
+    Sign {
+        actions: Vec<TransactionSignAction>,
+        checksum: u32,
+    },
+    Stub {
+        s: Box<TransactionCardSet>,
+        u: u32,
+        stub: StubNav,
+    },
+    Read {
+        r: Box<TransactionCardSet>,
+    },
+}
+
+/// Enum describing Stub content.
+/// Is used for proper navigation. Variants:
+/// `AddSpecs` (with associated `NetworkSpecsKey`), `LoadMeta` (with associated
+/// `NetworkSpecsKey` for the first by order network using those metadata),
+/// and `LoadTypes`
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum StubNav {
+    AddSpecs { n: NetworkSpecsKey },
+    LoadMeta { l: NetworkSpecsKey },
+    LoadTypes,
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum FooterButton {
+    Log,
+    Scan,
+    Keys,
+    Settings,
+    Back,
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum RightButton {
+    LogRight,
+    NewSeed,
+    Backup,
+    MultiSelect,
+    NDMenu,
+    TypesInfo,
+    KeyMenu,
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum ScreenNameType {
+    H1,
+    H4,
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum ShieldAlert {
+    Past,
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum AlertData {
+    Shield { f: Option<ShieldAlert> },
+    ErrorData { f: String },
+    Confirm,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct ActionResult {
+    pub screen_label: String,
+    pub back: bool,
+    pub footer: bool,
+    pub footer_button: Option<FooterButton>,
+    pub right_button: Option<RightButton>,
+    pub screen_name_type: ScreenNameType,
+    pub screen_data: ScreenData,
+    pub modal_data: Option<ModalData>,
+    pub alert_data: Option<AlertData>,
+}
+
+#[derive(Clone, PartialEq, Eq)]
+pub struct LogScreenEntry {
+    pub timestamp: String,
+    pub events: Vec<Event>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum ScreenData {
+    Scan,
+    Keys { f: String },
+    Settings { f: MSettings },
+    Log { f: MLog },
+    LogDetails { f: MLogDetails },
+    Transaction { f: Vec<MTransaction> },
+    SeedSelector { f: MSeeds },
+    KeyDetails { f: Option<MKeyDetails> },
+    NewSeed { f: MNewSeed },
+    RecoverSeedName { f: MRecoverSeedName },
+    RecoverSeedPhrase { f: MRecoverSeedPhrase },
+    DeriveKey { f: MDeriveKey },
+    VVerifier { f: MVerifierDetails },
+    ManageNetworks { f: MManageNetworks },
+    NNetworkDetails { f: MNetworkDetails },
+    SignSufficientCrypto { f: MSignSufficientCrypto },
+    SelectSeedForBackup { f: MSeeds },
+    Documents,
+    KeyDetailsMulti { f: MKeyDetailsMulti },
+}
+
+#[derive(Clone, Debug, Default, PartialEq, Eq)]
+pub struct MKeysCard {
+    pub address: Address,
+    pub address_key: String,
+    pub base58: String,
+    pub swiped: bool,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MKeysNew {
+    pub root: Option<MAddressCard>,
+    pub set: Vec<MKeyAndNetworkCard>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MKeyAndNetworkCard {
+    pub key: MKeysCard,
+    pub network: MSCNetworkInfo,
+}
+
+#[derive(Clone, Debug, Default, PartialEq, Eq)]
+pub struct MNetworkCard {
+    pub title: String,
+    pub logo: String,
+}
+
+#[derive(Clone, Default, Debug, PartialEq, Eq)]
+pub struct MSettings {
+    pub public_key: Option<String>,
+    pub identicon: Option<Identicon>,
+    pub encryption: Option<String>,
+    pub error: Option<String>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct History {
+    pub order: u32,
+    pub timestamp: String,
+    pub events: Vec<Event>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MLog {
+    pub log: Vec<History>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MEventMaybeDecoded {
+    pub event: Event,
+    pub decoded: Option<TransactionCardSet>,
+    pub signed_by: Option<MAddressCard>,
+    pub verifier_details: Option<MVerifierDetails>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MLogDetails {
+    pub timestamp: String,
+    pub events: Vec<MEventMaybeDecoded>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum TransactionType {
+    Sign,
+    Stub,
+    Read,
+    ImportDerivations,
+    Done,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct TransactionCard {
+    pub index: u32,
+    pub indent: u32,
+    pub card: Card,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum BananaSplitRecoveryResult {
+    RequestPassword,
+    RecoveredSeed { s: String },
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum DecodeSequenceResult {
+    BBananaSplitRecoveryResult { b: BananaSplitRecoveryResult },
+    DynamicDerivations { s: String },
+    DynamicDerivationTransaction { s: Vec<String> },
+    Other { s: String },
+}
+
+#[derive(Clone, Debug, Default, PartialEq, Eq)]
+pub struct TransactionCardSet {
+    pub author: Option<Vec<TransactionCard>>,
+    pub error: Option<Vec<TransactionCard>>,
+    pub extensions: Option<Vec<TransactionCard>>,
+    pub importing_derivations: Option<Vec<TransactionCard>>,
+    pub message: Option<Vec<TransactionCard>>,
+    pub meta: Option<Vec<TransactionCard>>,
+    pub method: Option<Vec<TransactionCard>>,
+    pub new_specs: Option<Vec<TransactionCard>>,
+    pub verifier: Option<Vec<TransactionCard>>,
+    pub warning: Option<Vec<TransactionCard>>,
+    pub types_info: Option<Vec<TransactionCard>>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MTransaction {
+    pub content: TransactionCardSet,
+    pub ttype: TransactionType,
+    pub author_info: Option<MAddressCard>,
+    pub network_info: Option<MSCNetworkInfo>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSignedTransaction {
+    pub transaction: Vec<MTransaction>,
+    pub signature: MSignatureReady,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct SeedNameCard {
+    pub seed_name: String,
+    pub identicon: Identicon,
+    pub used_in_networks: Vec<String>,
+    pub derived_keys_count: u32,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSeeds {
+    pub seed_name_cards: Vec<SeedNameCard>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MKeyDetails {
+    pub qr: QrData,
+    pub pubkey: String,
+    pub network_info: MSCNetworkInfo,
+    pub base58: String,
+    pub address: Address,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MNewSeed {
+    pub keyboard: bool,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MRecoverSeedName {
+    pub keyboard: bool,
+    pub seed_name: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MRecoverSeedPhrase {
+    pub keyboard: bool,
+    pub seed_name: String,
+    pub user_input: String,
+    pub guess_set: Vec<String>,
+    pub draft: Vec<String>,
+    pub ready_seed: Option<String>,
+}
+
+#[derive(Clone, Default, Debug, PartialEq, Eq)]
+pub struct DerivationCheck {
+    pub button_good: bool,
+    pub where_to: Option<DerivationDestination>,
+    pub collision: Option<MAddressCard>,
+    pub error: Option<String>,
+}
+
+#[derive(Clone, Debug, Default, PartialEq, Eq)]
+pub struct Address {
+    pub path: String,
+    pub has_pwd: bool,
+    pub identicon: Identicon,
+    pub seed_name: String,
+    pub secret_exposed: bool,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MAddressCard {
+    pub base58: String,
+    pub address_key: String,
+    pub address: Address,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum DerivationDestination {
+    Pwd,
+    Pin,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MDeriveKey {
+    pub seed_name: String,
+}
+
+#[derive(Clone, Debug, Default, PartialEq, Eq)]
+pub struct MVerifierDetails {
+    pub public_key: String,
+    pub identicon: Identicon,
+    pub encryption: String,
+}
+
+#[derive(Clone, Debug, Default, PartialEq, Eq)]
+pub struct MVerifier {
+    pub ttype: String,
+    pub details: MVerifierDetails,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MMetadataRecord {
+    pub specname: String,
+    pub specs_version: String,
+    pub meta_hash: String,
+    pub meta_id_pic: Identicon,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MNetworkDetails {
+    pub base58prefix: u16,
+    pub color: String,
+    pub decimals: u8,
+    pub encryption: Encryption,
+    pub genesis_hash: H256,
+    pub logo: String,
+    pub name: String,
+    pub order: String,
+    pub path_id: String,
+    pub secondary_color: String,
+    pub title: String,
+    pub unit: String,
+    pub current_verifier: MVerifier,
+    pub meta: Vec<MMetadataRecord>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MRawKey {
+    pub address: Address,
+    pub address_key: String,
+    pub public_key: String,
+    pub network_logo: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSignSufficientCrypto {
+    pub identities: Vec<MRawKey>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MKeyDetailsMulti {
+    pub key_details: MKeyDetails,
+    pub current_number: String,
+    pub out_of: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MMNetwork {
+    pub key: String,
+    pub title: String,
+    pub logo: String,
+    pub order: u8,
+    pub path_id: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MManageNetworks {
+    pub networks: Vec<MMNetwork>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum ExportedSet {
+    All,
+    Selected { s: Vec<PathAndNetwork> },
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct PathAndNetwork {
+    pub derivation: String,
+    pub network_specs_key: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum MSCContent {
+    LoadTypes { types: String, pic: Identicon },
+    LoadMetadata { name: String, version: u32 },
+    AddSpecs { f: MSCNetworkInfo },
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum QrData {
+    Regular { data: Vec<u8> },
+    Sensitive { data: Vec<u8> },
+}
+
+impl QrData {
+    /// Get the length of the underlying data
+    pub fn len(&self) -> usize {
+        match self {
+            QrData::Regular { data } | QrData::Sensitive { data } => data.len(),
+        }
+    }
+
+    /// Get a reference to the underlying data.
+    pub fn data(&self) -> &[u8] {
+        match self {
+            QrData::Regular { data } | QrData::Sensitive { data } => data,
+        }
+    }
+
+    /// If the underlying data is empty.
+    pub fn is_empty(&self) -> bool {
+        match self {
+            QrData::Regular { data } | QrData::Sensitive { data } => data.is_empty(),
+        }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSufficientCryptoReady {
+    pub author_info: MAddressCard,
+    pub sufficient: Vec<u8>,
+    pub content: MSCContent,
+    pub network_logo: Option<String>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct DerivationEntry {
+    pub path: String,
+    pub has_pwd: bool,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct DerivationPack {
+    pub network_title: String,
+    pub network_logo: String,
+    pub network_order: String,
+    pub id_set: Vec<DerivationEntry>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MBackup {
+    pub seed_name: String,
+    pub derivations: Vec<DerivationPack>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSeedMenu {
+    pub seed: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MNewSeedBackup {
+    pub seed: String,
+    pub seed_phrase: String,
+    pub identicon: Identicon,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct Network {
+    pub key: String,
+    pub logo: String,
+    pub order: u32,
+    pub selected: bool,
+    pub title: String,
+}
+
+impl From<OrderedNetworkSpecs> for Network {
+    fn from(n: OrderedNetworkSpecs) -> Self {
+        let key = hex::encode(
+            NetworkSpecsKey::from_parts(&n.specs.genesis_hash, &n.specs.encryption).key(),
+        );
+        Network {
+            key,
+            logo: n.specs.logo,
+            order: n.order as u32,
+            selected: false,
+            title: n.specs.title,
+        }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MNetworkMenu {
+    pub networks: Vec<Network>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MPasswordConfirm {
+    pub pwd: String,
+    pub seed_name: String,
+    pub cropped_path: String,
+}
+
+/// Data about signatures that are ready.
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSignatureReady {
+    /// Frames of the animated QR code that should be displayed by the UI.
+    pub signatures: Vec<QrData>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MEnterPassword {
+    pub author_info: MAddressCard,
+    pub network_info: Option<MSCNetworkInfo>,
+    pub counter: u32,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MLogRight {
+    pub checksum: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MMMNetwork {
+    pub title: String,
+    pub logo: String,
+    pub order: u32,
+    pub current_on_screen: bool,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MManageMetadata {
+    pub name: String,
+    pub version: String,
+    pub meta_hash: String,
+    pub meta_id_pic: Identicon,
+    pub networks: Vec<MMMNetwork>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MTypesInfo {
+    pub types_on_file: bool,
+    pub types_hash: Option<String>,
+    pub types_id_pic: Option<Identicon>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum ModalData {
+    SufficientCryptoReady { f: MSufficientCryptoReady },
+    Backup { f: MBackup },
+    SeedMenu { f: MSeedMenu },
+    NewSeedBackup { f: MNewSeedBackup },
+    NetworkSelector { f: MNetworkMenu },
+    PasswordConfirm { f: MPasswordConfirm },
+    SignatureReady { f: MSignatureReady },
+    EnterPassword { f: MEnterPassword },
+    LogRight { f: MLogRight },
+    TypesInfo { f: MTypesInfo },
+    NewSeedMenu,
+    NetworkDetailsMenu,
+    ManageMetadata { f: MManageMetadata },
+    KeyDetailsAction,
+    LogComment,
+    SelectSeed { f: MSeeds },
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCCall {
+    pub method_name: String,
+    pub docs: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCCurrency {
+    pub amount: String,
+    pub units: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCEnumVariantName {
+    pub name: String,
+    pub docs_enum_variant: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCEraMortal {
+    pub era: String,
+    pub phase: String,
+    pub period: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCFieldName {
+    pub name: String,
+    pub docs_field_name: String,
+    pub path_type: String,
+    pub docs_type: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCFieldNumber {
+    pub number: String,
+    pub docs_field_number: String,
+    pub path_type: String,
+    pub docs_type: String,
+}
+
+#[derive(Clone, PartialEq, Eq)]
+pub enum Identicon {
+    Dots { identity: Vec<u8> },
+    Blockies { identity: String },
+    Jdenticon { identity: String },
+}
+
+impl std::fmt::Debug for Identicon {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        match self {
+            Identicon::Dots { identity } => write!(f, "Dots {}", hex::encode(&identity[..32])),
+            Identicon::Blockies { identity } => {
+                write!(f, "Blockies {identity}")
+            }
+            Identicon::Jdenticon { identity } => {
+                write!(f, "Jdenticon {identity}")
+            }
+        }
+    }
+}
+
+impl Default for Identicon {
+    fn default() -> Self {
+        Self::Dots { identity: vec![] }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCId {
+    pub base58: String,
+    pub identicon: Identicon,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCNameVersion {
+    pub name: String,
+    pub version: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCNetworkInfo {
+    pub network_title: String,
+    pub network_logo: String,
+    pub network_specs_key: String,
+}
+
+/// Dynamic deprivations model
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct DDPreview {
+    pub qr: Vec<QrData>,
+    pub key_set: DDKeySet,
+    pub is_some_already_imported: bool,
+    pub is_some_network_missing: bool,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct DDKeySet {
+    pub seed_name: String,
+    pub derivations: Vec<DDDetail>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct DDDetail {
+    pub base58: String,
+    pub path: String,
+    pub network_logo: String,
+    pub network_specs_key: String,
+    pub identicon: Identicon,
+}
+
+impl From<OrderedNetworkSpecs> for MSCNetworkInfo {
+    fn from(o: OrderedNetworkSpecs) -> Self {
+        MSCNetworkInfo {
+            network_title: o.specs.name,
+            network_logo: o.specs.logo,
+            network_specs_key: hex::encode(
+                NetworkSpecsKey::from_parts(&o.specs.genesis_hash, &o.specs.encryption).key(),
+            ),
+        }
+    }
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCTip {
+    pub amount: String,
+    pub units: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MSCTxSpecPlain {
+    pub network_genesis_hash: H256,
+    pub version: String,
+    pub tx_version: String,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub struct MKeysInfoExport {
+    pub frames: Vec<QrData>,
+}
+
+#[derive(Clone, Debug, PartialEq, Eq)]
+pub enum Card {
+    AuthorCard { f: MAddressCard },
+    AuthorPlainCard { f: MSCId },
+    AuthorPublicKeyCard { f: MVerifierDetails },
+    BalanceCard { f: MSCCurrency },
+    BitVecCard { f: String },
+    BlockHashCard { f: String },
+    CallCard { f: MSCCall },
+    DefaultCard { f: String },
+    DerivationsCard { f: Vec<SeedKeysPreview> },
+    EnumVariantNameCard { f: MSCEnumVariantName },
+    EraImmortalCard,
+    EraMortalCard { f: MSCEraMortal },
+    ErrorCard { f: String },
+    FieldNameCard { f: MSCFieldName },
+    FieldNumberCard { f: MSCFieldNumber },
+    IdCard { f: MSCId },
+    IdentityFieldCard { f: String },
+    MetaCard { f: MMetadataRecord },
+    NameVersionCard { f: MSCNameVersion },
+    NetworkGenesisHashCard { f: String },
+    NetworkNameCard { f: String },
+    NetworkInfoCard { f: MSCNetworkInfo },
+    NewSpecsCard { f: NetworkSpecs },
+    NonceCard { f: String },
+    NoneCard,
+    PalletCard { f: String },
+    TextCard { f: String },
+    TipCard { f: MSCCurrency },
+    TipPlainCard { f: String },
+    TxSpecCard { f: String },
+    TxSpecPlainCard { f: MSCTxSpecPlain },
+    TypesInfoCard { f: MTypesInfo },
+    VarNameCard { f: String },
+    VerifierCard { f: MVerifierDetails },
+    WarningCard { f: String },
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/network_specs.rs.html b/rustdocs/src/definitions/network_specs.rs.html new file mode 100644 index 0000000000..9e8e9ebb83 --- /dev/null +++ b/rustdocs/src/definitions/network_specs.rs.html @@ -0,0 +1,1171 @@ +network_specs.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+
//! Network specs, verifiers, and related types  
+//!
+//! Vault could be used only for networks introduced to the database.
+//!
+//! Each network has associated set of parameters called here network specs.
+//! Cold database stores [`OrderedNetworkSpecs`].
+//! Hot database stores [`NetworkSpecs`]. Air-gap transfers with
+//! `add_specs` payload also contain [`NetworkSpecs`].
+//! Network specs rarely change and are generally are introduced into
+//! Vault only once for each network.
+//!
+//! Vault has verifier system storing public keys that Vault trusts are providing
+//! correct updates to the information.  
+//!
+//! Cold database stores [`CurrentVerifier`] for each network and general verifier.  
+//!
+//! # Verifiers in cold database  
+//!
+//! Vault is expected to be safe to use as long as the information uploaded
+//! into it through air-gap is the correct one.  
+//!
+//! Damaged network specs or network metadata could result in transactions
+//! being parsed incorrectly.  
+//!
+//! Verifier system is introduced to have important transferable data signed
+//! by a trusted party to exclude accidental or intentional errors. It is
+//! especially important in keeping fast-changing network metadata updated.  
+//!
+//! ## Verifiers of data entering the Vault
+//!
+//! The data scanned into Vault has an associated [`Verifier`].
+//!
+//! If the information is verified, [`Verifier`] is `Some(VerifierValue)`.  
+//!
+//! If the information is not verified, [`Verifier`] is `None`.  
+//!
+//! Payloads with verified data contain trusted party public key and signature
+//! for the data transferred, that are checked when the data is processed in
+//! Vault. Unverified data gets processed as is, without any verification.
+//! Unverified data should be used cautiously, and avoided unless absolutely
+//! necessary.  
+//!
+//! [`VerifierValue`] is public key of the trusted party using a certain
+//! encryption algorithm. At this moment, only `Standard` variant supporting
+//! [`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html)
+//! is available.  
+//!
+//! ## Verifiers of data already in the Vault
+//!
+//! There is [`CurrentVerifier`] for each network known to Vault, and
+//! general verifier [`Verifier`] for some selected networks and for types.  
+//!
+//! ### Network verifiers  
+//!
+//! Each network in Vault has an associated [`CurrentVerifier`], having two
+//! variants: `Valid` and `Dead`. Networks could be used by the Vault only if
+//! their verifier is `CurrentVerifier::Valid` with associated
+//! [`ValidCurrentVerifier`] value. Networks having `CurrentVerifier::Dead` no
+//! longer could be used or updated, unless the Vault is completely wiped and
+//! reset.  
+//!
+//! Network verifier information is stored in `VERIFIERS` tree of the cold
+//! database, with [`VerifierKey`](crate::keyring::VerifierKey) in key form as
+//! a key and encoded [`CurrentVerifier`] as a value. `VerifierKey` is derived
+//! from network genesis hash. If the network supports more than one encryption
+//! algorithm, network specs for all encryption algorithms and network metadata
+//! would have the same [`CurrentVerifier`].  
+//!
+//! `ValidCurrentVerifier` has two variants: `General` and `Custom`.  
+//!
+//! `ValidCurrentVerifier::General` means that the network is verified by the
+//! general verifier known to Vault. As installed or freshly wiped Vault
+//! has default networks Polkadot, Kusama, and Westend having
+//! `ValidCurrentVerifier::General`.  
+//!
+//! `ValidCurrentVerifier::Custom` means that the network is verified by
+//! some `Verifier` other than the general verifier.  
+//!
+//! Updating network metadata could be done only if the metadata is signed by
+//! exactly same [`CurrentVerifier`] as already recorded in the database for
+//! this network.  
+//!
+//! The messages for updating network specs or loading network specs for same
+//! network, but with different encryption algorithm, could be signed with
+//! same [`CurrentVerifier`] or an upgraded one.  
+//!
+//! ### General verifier  
+//!
+//! General verifier is the default [`Verifier`] known to the Vault. It is the
+//! data source the Vault relies upon the most.
+//!
+//! General verifier is set up during Vault initialization, and is by
+//! default Parity-associated key.  
+//!
+//! General verifier value is stored in `SETTREE` tree of the cold database
+//! under key `GENERALVERIFIER`.  
+//!
+//! General verifier is used for verification of network specs and metadata
+//! for some networks (ideally, the ones most used on particular Vault
+//! device), and types information. Data previously verified by any
+//! general verifier other than `None` could be updated only if the update
+//! is signed by the same verifier. When general verifier is `None`, it gets
+//! updated to [`Verifier`] of the first user-accepted verified updating payload
+//! (i.e. with trust on first use).  
+//!
+//! Users can remove existing general verifier, this will re-initialize Vault
+//! with general verifier set to `None` and reset the Vault data to defaults.
+//!
+//! It is not recommended to use Vault without any general verifier, so it is
+//! best to set up the user-trusted party as the general verifier right after
+//! removing the old general verifier, by downloading and accepting some
+//! trusted data with network specs or types information.  
+//!
+//! Note that setting general verifier from `None` to `Some(VerifierValue)`
+//! will remove all previously known data (i.e. network specs, network metadata,
+//! types information) associated with previous general verifier value `None`.
+//! This is done to avoid false trust to data that appeared before the
+//! verification began.  
+//!
+//! Note that if the network specs get removed due to general verifier change,
+//! the addresses within this network are not deleted from the database, just
+//! never displayed in the user interface. Vault will recall them if the
+//! network specs get re-loaded verified with correct general verifier.  
+//!
+//! Let's consider a case when user has removed the default general verifier.
+//! After the reset, general verifier value becomes `None`, however, the Vault
+//! still has the network specs and metadata for default networks, and types
+//! information. User plans to operate the Vault with Parity-unrelated network,
+//! and loads verified network specs for it. The received data verifier becomes
+//! the new general verifier, and the data for default networks and default
+//! types gets removed.  
+//!
+//! ### Upgrading verifiers  
+//!
+//! Once `ValidCurrentVerifier::Custom` is set to `Some(VerifierValue)`, it
+//! could not be changed to any other value except general verifier. Note that
+//! in this case general verifier is also already set to `Some(VerifierValue)`,
+//! since general verifier could not be `None` if there is not-`None` custom
+//! verifier.  
+//!
+//! General verifier could not be changed once set up with `Some(VerifierValue)`,
+//! unless the Vault is wiped and reset.
+//!
+//! At the moment there is no mechanism allowing users to set up the verifiers
+//! except by loading and accepting the updates signed by these verifiers.  
+//!
+//! In some cases network verifiers and general verifier could be changed
+//! by accepting updating payloads:  
+//!
+//! - `ValidCurrentVerifier::General` with general verifier `None` could be
+//! upgraded to `ValidCurrentVerifier::General` with general verifier
+//! `(Some(VerifierValue))`. Happens when Vault with no value set up for
+//! the general verifier receives and accepts a verified update with any
+//! network specs or types.  
+//!
+//! - Network `ValidCurrentVerifier::Custom(Some(VerifierValue))` could be
+//! upgraded to `ValidCurrentVerifier::General` with general verifier set to
+//! `(Some(VerifierValue))`.
+//! Happens when Vault receives and accepts network specs update verified
+//! by general verifier for this network. Note: metadata update with
+//! verifier upgrade would be rejected.  
+//!
+//! - Network `ValidCurrentVerifier::Custom(None)` could be upgraded to
+//! `ValidCurrentVerifier::General` with general verifier set to
+//! `(Some(VerifierValue))`.
+//! Happens when Vault receives and accepts network specs update verified
+//! by general verifier for this network. Note: metadata update with
+//! verifier upgrade would be rejected.  
+//!
+//! If [`CurrentVerifier`] upgrade occurs, all pre-upgrade network information
+//! is wiped (Vault warns about that).
+//!
+//! If general verifier upgrade occurs, all pre-upgrade information verified
+//! by the general verifier is wiped (Vault warns about that).
+//!
+//! ### Deleting network specs  
+//!
+//! User can remove any network from Vault. "Remove network" means removing:
+//! - all network specs associated with network genesis hash,
+//! - all metadata associated with network specs name,
+//! - all addresses within this network with any encryption,
+//! - (possibly) modifying [`CurrentVerifier`].  
+//!
+//! If the network was verified by `CurrentVerifier::Valid` with value
+//! `ValidCurrentVerifier::General`, verifier information in [`CurrentVerifier`]
+//! will not change. Restoring the network will require updates signed by the
+//! same general verifier as before.  
+//!
+//! If the network was verified by `CurrentVerifier::Valid` with value
+//! `ValidCurrentVerifier::Custom` and the custom [`Verifier`] was `None`, no
+//! changes will happen, network verifier will stay
+//! `CurrentVerifier::Valid(ValidCurrentVerifier::Custom(None))`. Otherwise,
+//! the network verifier will be changed to `CurrentVerifier::Dead`, and it
+//! would be impossible to use the network again unless the Vault is wiped.
+//! This is a part of security policy.  
+//!
+//! # Network specs in cold database
+//!
+//! [`OrderedNetworkSpecs`] are stored in `SPECSTREE` tree of the cold database,
+//! with [`NetworkSpecsKey`] in key form as a key and SCALE-encoded [`OrderedNetworkSpecs`]
+//! as a value.  
+//!
+//! [`OrderedNetworkSpecs`] include both the `encryption` ([`Encryption`]) and network
+//! genesis hash (`[u8; 32]`), that are used for [`NetworkSpecsKey`] generation.  
+//! [`OrderedNetworkSpecs`] retrieved for given [`NetworkSpecsKey`] always get checked
+//! for consistency.  
+//!
+//! If the network supports more than one encryption algorithm, each encryption
+//! corresponds to different [`NetworkSpecsKey`], and any or all of them could be
+//! coexisting in Vault simultaneously.
+//!
+//! [`OrderedNetworkSpecs`] are generally expected to remain unchanged over time.
+//!
+//! ## Adding new network specs  
+//!
+//! New networks could be added to Vault through scanning `add_specs` QR code
+//! for the network.
+//!
+//! ## Updating network specs (replacing old ones with new ones without deleting
+//! old ones)
+//!
+//! Vault will not allow to update network specs if critical parameters
+//! have changed.  
+//! These critical parameters are:  
+//! - `base58prefix`, network-associated base58 prefix  
+//! - `decimals`  
+//! - `name`, network name, as it appears in the network metadata  
+//! - `unit`  
+//!
+//! However, if non-critical parameters have changes, Vault will permit the
+//! network specs updating.  
+//! These non-critical parameters are:  
+//! - `color`  
+//! - `logo`, network-associated logo picture  
+//! - `path_id`, default address derivation path for the network  
+//! - `secondary_color`  
+//! - `title`, network title, as it is displayed in Vault
+//!
+//! Some quickly updating experimental networks are changing the genesis hash
+//! often. Network genesis hash participates in [`NetworkSpecsKey`]
+//! generation. This way, if the genesis hash got updated, the network would
+//! appear "unknown" to Vault, and to use it, network specs with new genesis hash
+//! would have to be added. Adding network specs with new genesis hash does not
+//! require deleting network specs with old genesis hash.  
+//!
+//! ## Deleting network specs
+//!
+//! Any network could be removed, however sometimes there are associated changes
+//! in corresponding verifier. See above.
+//!
+//! ## Balance representation: decimals and units  
+//!
+//! To represent the balance-related values properly, each network has associated
+//! decimals and units. The balance-related values in, for example, transactions
+//! are integer numbers, and are formatted properly only during the transactions
+//! decoding. For this `decimals` and `unit` values from [`OrderedNetworkSpecs`] are used.
+//! `decimals` indicate the order of magnitude, by which the token `unit`
+//! exceeds the integer representing unit (see examples below).
+//! Both `decimals` and `unit` values could be queried through RPC calls for each
+//! Vault-compatible network.
+//! Sometimes the networks have several available decimals and units, or none at all.  
+//! This cases should be dealt with on case-by-case basis.  
+//!
+//! ## Examples: balance representation  
+//!
+//! Balance (`u64`) from transaction is decoded as `1`.
+//! Network `decimals` value is `12`, network `unit` is `WND`.
+//! The balance should be therefore represented as `1 pWND`.  
+//!
+//! Balance (`u64`) from transaction is decoded as `10000000`.
+//! Network `decimals` value is `12`, network `unit` is `WND`.
+//! The balance should be therefore represented as `10 uWND`.  
+
+use parity_scale_codec::{Decode, Encode};
+use sled::IVec;
+use sp_core::H256;
+use sp_runtime::MultiSigner;
+
+use crate::{
+    error::{Error, Result},
+    helpers::IdenticonStyle,
+    navigation::Identicon,
+};
+
+use crate::helpers::{
+    make_identicon_from_multisigner, multisigner_to_encryption, multisigner_to_public,
+};
+use crate::{crypto::Encryption, keyring::NetworkSpecsKey};
+
+use crate::navigation::MVerifierDetails;
+
+/// Network parameters stored SCALE-encoded in the **cold** database
+/// `SPECSTREE` tree under [`NetworkSpecsKey`]
+///
+/// These network parameters must be in Vault database for the Vault to be
+/// able to operate with this network.
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub struct OrderedNetworkSpecs {
+    pub specs: NetworkSpecs,
+
+    /// Order in which the network is displayed by Vault
+    pub order: u8,
+}
+
+/// Network parameters stored SCALE-encoded in the **hot** database
+/// `SPECSTREEPREP` tree under [`NetworkSpecsKey`] and sent as QR code
+/// in `add_specs` messages
+///
+/// These network parameters are sufficient to add network into Vault database.
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub struct NetworkSpecs {
+    /// Network-specific prefix for address representation in
+    /// [base58 format](https://docs.rs/sp-core/6.0.0/sp_core/crypto/trait.Ss58Codec.html#method.to_ss58check_with_version)  
+    pub base58prefix: u16,
+
+    /// Network-associated color.  
+    /// Historically is there, not doing much at the moment.  
+    pub color: String,
+
+    /// Order of magnitude, by which the token unit exceeds the balance integer unit.  
+    /// Is used to display balance-related values properly.  
+    pub decimals: u8,
+
+    /// Encryption algorithm the network uses  
+    pub encryption: Encryption,
+
+    /// Network genesis hash  
+    pub genesis_hash: H256,
+
+    /// Network associated logo  
+    pub logo: String,
+
+    /// Network name, as it appears in network metadata  
+    pub name: String,
+
+    /// Default derivation path for addresses in this network  
+    pub path_id: String,
+
+    /// Network-associated secondary color.  
+    /// Historically is there, not doing much at the moment.  
+    pub secondary_color: String,
+
+    /// Network title, as it appears in Vault menus.
+    pub title: String,
+
+    /// Token name, to display balance-related values properly.  
+    pub unit: String,
+}
+
+/// Network parameters needed to decode and display transaction
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub struct ShortSpecs {
+    /// Network-specific prefix for address representation in
+    /// [base58 format](https://docs.rs/sp-core/6.0.0/sp_core/crypto/trait.Ss58Codec.html#method.to_ss58check_with_version)  
+    pub base58prefix: u16,
+
+    /// Order of magnitude, by which the token unit exceeds the balance integer unit.  
+    /// Is used to display balance-related values properly.  
+    pub decimals: u8,
+
+    /// Network genesis hash  
+    pub genesis_hash: H256,
+
+    /// Network name, as it appears in network metadata  
+    pub name: String,
+
+    /// Token name, to display balance-related values properly.  
+    pub unit: String,
+}
+
+impl OrderedNetworkSpecs {
+    /// Gets [`OrderedNetworkSpecs`] from [`NetworkSpecsKey`] and associated value
+    /// from cold database tree `SPECSTREE`  
+    ///
+    /// Checks that there is no genesis hash or encryption mismatch between
+    /// key and specs content.  
+    pub fn from_entry_with_key_checked(
+        network_specs_key: &NetworkSpecsKey,
+        network_specs_encoded: IVec,
+    ) -> Result<Self> {
+        let (genesis_hash_vec, encryption) = network_specs_key.genesis_hash_encryption()?;
+        let ordered_specs = Self::decode(&mut &network_specs_encoded[..])?;
+        let network_specs = &ordered_specs.specs;
+        if &genesis_hash_vec[..] != network_specs.genesis_hash.as_bytes() {
+            return Err(Error::SpecsGenesisHashMismatch {
+                network_specs_key: network_specs_key.to_owned(),
+                genesis_hash: network_specs.genesis_hash,
+            });
+        }
+        if encryption != network_specs.encryption {
+            return Err(Error::SpecsToSendEncryptionMismatch {
+                network_specs_key: network_specs_key.to_owned(),
+                encryption: network_specs.encryption,
+            });
+        }
+        Ok(ordered_specs)
+    }
+
+    /// Gets [`OrderedNetworkSpecs`] from cold database tree `SPECSTREE` (key, value)
+    /// entry  
+    ///
+    /// Checks that there is no genesis hash or encryption mismatch between
+    /// key and specs content.  
+    pub fn from_entry_checked(
+        (network_specs_key_vec, network_specs_encoded): (IVec, IVec),
+    ) -> Result<Self> {
+        let network_specs_key = NetworkSpecsKey::from_ivec(&network_specs_key_vec);
+        Self::from_entry_with_key_checked(&network_specs_key, network_specs_encoded)
+    }
+}
+
+impl NetworkSpecs {
+    /// Makes [`OrderedNetworkSpecs`] from [`NetworkSpecs`],
+    /// needs `order` input
+    ///
+    /// `order` is network number on the list of networks in Vault.
+    ///
+    /// This happens when Vault receives new network specs through QR update.
+    pub fn to_store(&self, order: u8) -> OrderedNetworkSpecs {
+        OrderedNetworkSpecs {
+            specs: self.to_owned(),
+            order,
+        }
+    }
+
+    /// Makes [`ShortSpecs`] from [`NetworkSpecs`]
+    pub fn short(&self) -> ShortSpecs {
+        ShortSpecs {
+            base58prefix: self.base58prefix,
+            decimals: self.decimals,
+            genesis_hash: self.genesis_hash,
+            name: self.name.to_string(),
+            unit: self.unit.to_string(),
+        }
+    }
+
+    /// Gets [`NetworkSpecs`] from [`NetworkSpecsKey`] and associated
+    /// value from hot database tree `SPECSTREEPREP`  
+    ///
+    /// Checks that there is no genesis hash or encryption mismatch between
+    /// key and specs content.  
+    #[cfg(feature = "active")]
+    pub fn from_entry_with_key_checked(
+        network_specs_key: &NetworkSpecsKey,
+        network_specs_to_send_encoded: IVec,
+    ) -> Result<Self> {
+        let (genesis_hash_vec, encryption) = network_specs_key.genesis_hash_encryption()?;
+        let network_specs_to_send = Self::decode(&mut &network_specs_to_send_encoded[..])?;
+        if &genesis_hash_vec[..] != network_specs_to_send.genesis_hash.as_bytes() {
+            return Err(Error::SpecsToSendGenesisHash {
+                network_specs_key: network_specs_key.to_owned(),
+                genesis_hash: network_specs_to_send.genesis_hash,
+            });
+        }
+        if encryption != network_specs_to_send.encryption {
+            return Err(Error::SpecsToSendEncryptionMismatch {
+                network_specs_key: network_specs_key.to_owned(),
+                encryption: network_specs_to_send.encryption,
+            });
+        }
+        Ok(network_specs_to_send)
+    }
+
+    /// Gets [`NetworkSpecs`] from hot database tree `SPECSTREEPREP`
+    /// (key, value) entry  
+    ///
+    /// Checks that there is no genesis hash or encryption mismatch between
+    /// key and specs content.  
+    #[cfg(feature = "active")]
+    pub fn from_entry_checked(
+        (network_specs_key_vec, network_specs_to_send_encoded): (IVec, IVec),
+    ) -> Result<Self> {
+        let network_specs_key = NetworkSpecsKey::from_ivec(&network_specs_key_vec);
+        Self::from_entry_with_key_checked(&network_specs_key, network_specs_to_send_encoded)
+    }
+}
+
+/// Network properties that must be fetched with RPC call for properties
+/// in each compatible network
+#[derive(Decode, Encode, PartialEq, Eq, Debug)]
+#[cfg(feature = "active")]
+pub struct NetworkProperties {
+    pub base58prefix: u16,
+    pub decimals: u8,
+    pub unit: String,
+}
+
+/// Verifier information
+///
+/// Either real verifier or information that there is no verifier.
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub struct Verifier {
+    pub v: Option<VerifierValue>,
+}
+
+/// Information on known and existing verifier  
+///
+/// Verifier public key with associated encryption algorithm.
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub enum VerifierValue {
+    /// public key for standard substrate-compatible encryption algorithms  
+    Standard { m: MultiSigner },
+}
+
+impl Verifier {
+    /// Get the [`MVerifierDetails`] for UI to show.
+    pub fn show_card(&self) -> MVerifierDetails {
+        match &self.v {
+            Some(a) => a.show_card(),
+            None => MVerifierDetails {
+                public_key: String::new(),
+                identicon: Identicon::default(),
+                encryption: String::new(),
+            },
+        }
+    }
+
+    /// Display [`Verifier`] in human-readable format, for errors  
+    pub fn show_error(&self) -> String {
+        match &self.v {
+            Some(a) => a.show_error(),
+            None => String::from("none"),
+        }
+    }
+}
+
+impl VerifierValue {
+    /// Get the [`MVerifierDetails`] for UI to show.
+    pub fn show_card(&self) -> MVerifierDetails {
+        match &self {
+            VerifierValue::Standard { m } => {
+                let public_key = hex::encode(multisigner_to_public(m));
+                let encryption = multisigner_to_encryption(m).show();
+                let identicon = make_identicon_from_multisigner(m, IdenticonStyle::Dots);
+
+                MVerifierDetails {
+                    public_key,
+                    identicon,
+                    encryption,
+                }
+            }
+        }
+    }
+
+    /// Display [`VerifierValue`] in human-readable format, for errors  
+    pub fn show_error(&self) -> String {
+        match &self {
+            VerifierValue::Standard {
+                m: MultiSigner::Ed25519(x),
+            } => {
+                format!("public key: {}, encryption: ed25519", hex::encode(x.0))
+            }
+            VerifierValue::Standard {
+                m: MultiSigner::Sr25519(x),
+            } => {
+                format!("public key: {}, encryption: sr25519", hex::encode(x.0))
+            }
+            VerifierValue::Standard {
+                m: MultiSigner::Ecdsa(x),
+            } => {
+                format!("public key: {}, encryption: ecdsa", hex::encode(x.0))
+            }
+        }
+    }
+}
+
+/// Current network verifier
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub enum CurrentVerifier {
+    /// Verifier is valid, Vault can use the network
+    Valid(ValidCurrentVerifier),
+}
+
+/// Possible variants of valid current network verifier
+///
+/// Could be general verifier (by default for networks Polkadot, Kusama, Westend),
+/// or custom verifier.
+#[derive(Decode, Encode, PartialEq, Eq, Debug, Clone)]
+pub enum ValidCurrentVerifier {
+    /// Network has general verifier
+    General,
+
+    /// Network has some other verifier, different from the general one
+    Custom { v: Verifier },
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/qr_transfers.rs.html b/rustdocs/src/definitions/qr_transfers.rs.html new file mode 100644 index 0000000000..1ba0df8e37 --- /dev/null +++ b/rustdocs/src/definitions/qr_transfers.rs.html @@ -0,0 +1,483 @@ +qr_transfers.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+
//! Information that could be send and received through air-gap as QR codes content  
+//!
+//! All information that Vault could get without a complete wipe must arrive
+//! through the QR codes maintaining the air-gap. In addition to transactions
+//! that could be parsed and signed, this includes:
+//! - adding new networks,  
+//! - updating the metadata of existing networks,  
+//! - updating the types information,  
+//! - bulk-importing the derivations  
+//!
+//! QR codes for adding networks, loading metadata and updating types information
+//! all have similar structure:
+//! - prelude `53xxyy` where `xx` is the encryption type, and `yy` is the message type  
+//! - verifier public key (if the QR code is signed by verifier)  
+//! - content  
+//! - verifier signature (if the QR code is signed by verifier)  
+//!
+//! QR codes for importing derivations are never signed and have structure:
+//! - prelude `53ffde`
+//! - content  
+//!
+//! This module deals with content part of QR codes.  
+
+use parity_scale_codec::{Decode, Encode};
+#[cfg(feature = "active")]
+use std::path::Path;
+
+use crate::error::Result;
+use crate::helpers::pic_types;
+use crate::network_specs::NetworkSpecs;
+use crate::types::TypeEntry;
+use sp_core::H256;
+
+use crate::navigation::Identicon;
+
+/// `load_metadata` QR code content  
+///
+/// Messages `load_metadata` are used to update through air-gap the network
+/// metadata for networks already known to the Vault.
+pub struct ContentLoadMeta(Vec<u8>);
+
+#[derive(Decode, Encode)]
+struct DecodedContentLoadMeta {
+    meta: Vec<u8>,
+    genesis_hash: H256,
+}
+
+impl ContentLoadMeta {
+    /// Generate [`ContentLoadMeta`] from metadata `&[u8]` slice and network genesis hash.
+    pub fn generate(meta: &[u8], genesis_hash: &H256) -> Self {
+        Self(
+            DecodedContentLoadMeta {
+                meta: meta.to_vec(),
+                genesis_hash: genesis_hash.to_owned(),
+            }
+            .encode(),
+        )
+    }
+
+    /// Transform `&[u8]` slice into [`ContentLoadMeta`].
+    pub fn from_slice(slice: &[u8]) -> Self {
+        Self(slice.to_vec())
+    }
+
+    /// Get metadata `Vec<u8>` from [`ContentLoadMeta`].
+    pub fn meta(&self) -> Result<Vec<u8>> {
+        Ok(<DecodedContentLoadMeta>::decode(&mut &self.0[..])?.meta)
+    }
+
+    /// Get genesis hash `[u8; 32]` from [`ContentLoadMeta`].
+    pub fn genesis_hash(&self) -> Result<H256> {
+        Ok(<DecodedContentLoadMeta>::decode(&mut &self.0[..])?.genesis_hash)
+    }
+
+    /// Get metadata `Vec<u8>` and genesis hash `[u8; 32]` from [`ContentLoadMeta`] as a tuple.
+    pub fn meta_genhash(&self) -> Result<(Vec<u8>, H256)> {
+        let a = <DecodedContentLoadMeta>::decode(&mut &self.0[..])?;
+        Ok((a.meta, a.genesis_hash))
+    }
+
+    /// Write [`ContentLoadMeta`] into file that could be signed by the verifier.
+    #[cfg(feature = "active")]
+    pub fn write<P>(&self, filename: P) -> Result<()>
+    where
+        P: AsRef<Path>,
+    {
+        Ok(std::fs::write(filename, self.to_sign())?)
+    }
+
+    /// Transform [`ContentLoadMeta`] into `Vec<u8>` that could be signed by the verifier.
+    pub fn to_sign(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+
+    /// Transform [`ContentLoadMeta`] into `Vec<u8>` that is concatenated with
+    /// other parts of the QR code.
+    ///
+    /// Currently similar to `.to_sign()` function.
+    pub fn to_transfer(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+}
+
+/// `add_specs` QR code content  
+///
+/// Messages `add_specs` are used to add new networks to the Vault.
+#[derive(Decode, Encode)]
+pub struct ContentAddSpecs(Vec<u8>);
+
+#[derive(Decode, Encode)]
+struct DecodedContentAddSpecs {
+    specs: NetworkSpecs,
+}
+
+impl ContentAddSpecs {
+    /// Generate [`ContentAddSpecs`] from network specs [`NetworkSpecs`].
+    pub fn generate(specs: &NetworkSpecs) -> Self {
+        Self(
+            DecodedContentAddSpecs {
+                specs: specs.to_owned(),
+            }
+            .encode(),
+        )
+    }
+
+    /// Transform `&[u8]` slice into [`ContentAddSpecs`].
+    pub fn from_slice(slice: &[u8]) -> Self {
+        Self(slice.to_vec())
+    }
+
+    /// Get network specs [`NetworkSpecs`] from [`ContentAddSpecs`].
+    pub fn specs(&self) -> Result<NetworkSpecs> {
+        Ok(<DecodedContentAddSpecs>::decode(&mut &self.0[..])?.specs)
+    }
+
+    /// Write [`ContentAddSpecs`] into file that could be signed by the verifier.
+    #[cfg(feature = "active")]
+    pub fn write<P>(&self, file_path: P) -> Result<()>
+    where
+        P: AsRef<Path>,
+    {
+        Ok(std::fs::write(file_path, self.to_sign())?)
+    }
+
+    /// Transform [`ContentAddSpecs`] into `Vec<u8>` that could be signed by the verifier.
+    pub fn to_sign(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+
+    /// Transform [`ContentAddSpecs`] into `Vec<u8>` that is concatenated with
+    /// other parts of the QR code.
+    ///
+    /// Note that it is different from `.to_sign()` function. Effectively, already
+    /// SCALE-encoded [`NetworkSpecs`] are encoded second time as an opaque
+    /// `Vec<u8>`. This is done to have encoded piece length announced at the
+    /// beginning of the `u8` set, to simplify cutting the received message in Vault.
+    pub fn to_transfer(&self) -> Vec<u8> {
+        self.encode()
+    }
+}
+
+/// `load_types` QR code content  
+///
+/// Messages `load_types` are used to add or update Vault types information.
+///
+/// Externally acquired types information is needed only for
+/// [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html)
+/// `V13` and below. After `V14` all types information is contained within the metadata.
+///
+/// This kind of messages is expected to be used seldom, if ever.  
+#[derive(Decode, Encode)]
+pub struct ContentLoadTypes(Vec<u8>);
+
+#[derive(Decode, Encode)]
+struct DecodedContentLoadTypes {
+    types: Vec<TypeEntry>,
+}
+
+impl ContentLoadTypes {
+    /// Generate [`ContentLoadTypes`] from types information `&[TypeEntry]`.  
+    pub fn generate(types: &[TypeEntry]) -> Self {
+        Self(
+            DecodedContentLoadTypes {
+                types: types.to_owned(),
+            }
+            .encode(),
+        )
+    }
+
+    /// Transform `&[u8]` slice into [`ContentLoadTypes`].  
+    pub fn from_slice(slice: &[u8]) -> Self {
+        Self(slice.to_vec())
+    }
+
+    /// Get types information `Vec<TypeEntry>` from [`ContentLoadTypes`].  
+    pub fn types(&self) -> Result<Vec<TypeEntry>> {
+        Ok(<DecodedContentLoadTypes>::decode(&mut &self.0[..])?.types)
+    }
+
+    /// Write [`ContentLoadTypes`] into file that could be signed by the verifier.  
+    #[cfg(feature = "active")]
+    pub fn write<P>(&self, path: P) -> Result<()>
+    where
+        P: AsRef<Path>,
+    {
+        Ok(std::fs::write(path, self.to_sign())?)
+    }
+
+    /// Transform [`ContentLoadTypes`] into `Vec<u8>` to be put in the database.  
+    pub fn store(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+
+    /// Transform [`ContentLoadTypes`] into `Vec<u8>` that could be signed by the verifier.  
+    pub fn to_sign(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+
+    /// Transform [`ContentLoadTypes`] into `Vec<u8>` that is concatenated with
+    /// other parts of the QR code.  
+    ///
+    /// Note that it is different from `.to_sign()` function. Effectively, already
+    /// SCALE-encoded `Vec<TypeEntry>` is encoded second time as an opaque
+    /// `Vec<u8>`. This is done to have encoded piece length announced at the
+    /// beginning of the `u8` set, to simplify cutting the received message in Vault.
+    pub fn to_transfer(&self) -> Vec<u8> {
+        self.encode()
+    }
+
+    /// Generate types information hash and corresponding id pic  
+    ///
+    /// Types information hash is calculated for `Vec<u8>` of encoded types information,
+    /// as it would be stored in the database  
+    pub fn show(&self) -> (String, Identicon) {
+        use sp_core::blake2_256;
+
+        let types_hash = blake2_256(&self.store()).as_ref().to_vec();
+        let types_id_pic = pic_types(&types_hash);
+        (hex::encode(types_hash), types_id_pic)
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/schema_version.rs.html b/rustdocs/src/definitions/schema_version.rs.html new file mode 100644 index 0000000000..08f80f8d1c --- /dev/null +++ b/rustdocs/src/definitions/schema_version.rs.html @@ -0,0 +1,71 @@ +schema_version.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+
//! Record of the Vault database schema version
+use constants::LIVE_SCHEMA_VERSION;
+use parity_scale_codec::{Decode, Encode};
+use sled::IVec;
+use std::ops::Deref;
+
+use crate::error::Result;
+
+type SchemaVersionType = u32;
+#[derive(Decode, Encode)]
+pub struct SchemaVersion(SchemaVersionType);
+
+impl SchemaVersion {
+    /// Get the current schema version
+    pub fn current() -> Self {
+        Self(LIVE_SCHEMA_VERSION)
+    }
+
+    /// Get `SchemaVersion` with content from the encoded value,
+    /// as it is stored in the database.
+    pub fn from_ivec(ivec: &IVec) -> Result<Self> {
+        Ok(Self(SchemaVersionType::decode(&mut &ivec[..])?))
+    }
+
+    pub fn store_current() -> Vec<u8> {
+        Self::current().encode()
+    }
+}
+
+impl Deref for SchemaVersion {
+    type Target = SchemaVersionType;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/types.rs.html b/rustdocs/src/definitions/types.rs.html new file mode 100644 index 0000000000..e3b0d70547 --- /dev/null +++ b/rustdocs/src/definitions/types.rs.html @@ -0,0 +1,159 @@ +types.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+
//! Types description needed to decode transactions generated with
+//! [`RuntimeMetadata`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/enum.RuntimeMetadata.html)
+//! `V12` and `V13`
+//!
+//! Prior to `V14`, metadata did not contain information on *what* the type used
+//! in the transaction actually is, it had only the type name.
+//! For common types (i.e the ones encountered in network Westend, Polkadot,
+//! Kusama, and Rococo) the type information was found elsewhere, and is a part of
+//! existing Vault defaults.
+//!
+//! [`TypeEntry`] is used to store the type information. Default types set contains [`TypeEntry`]
+//! data for common types, and is stored in `SETTREE` tree of both hot and cold databases
+//! with key `TYPES`.  
+//!
+//! For transaction with runtime metadata `V12` or `V13` to be decoded each of the
+//! encountered types must have a corresponding [`TypeEntry`] or be transformable into a type
+//! having [`TypeEntry`].  
+//!
+//! With `V14` release this module became obsolete, however, since not all networks are yet on `V14`
+//! metadata, it remains here.
+
+use parity_scale_codec::{Decode, Encode};
+
+/// Information each type has to have: type name and description
+#[derive(Decode, Encode, PartialEq, Eq, Clone)]
+pub struct TypeEntry {
+    /// type name, as it appears in the metadata
+    pub name: String,
+
+    /// type description
+    pub description: Description,
+}
+
+/// Type description
+///
+/// Must be available for all types
+#[derive(Decode, Encode, PartialEq, Eq, Clone)]
+pub enum Description {
+    /// type is a type alias
+    Type(String),
+
+    /// type is an enum
+    Enum(Vec<EnumVariant>),
+
+    /// type is a struct
+    Struct(Vec<StructField>),
+}
+
+/// Enum variant description
+///
+/// Must be available for each variant of the enum.
+#[derive(Decode, Encode, PartialEq, Eq, Clone)]
+pub struct EnumVariant {
+    /// enum variant name, will be displayed during the parsing if the variant is encountered
+    pub variant_name: String,
+
+    /// variant type
+    pub variant_type: EnumVariantType,
+}
+
+/// Types of enum variants
+#[derive(Decode, Encode, PartialEq, Eq, Clone)]
+pub enum EnumVariantType {
+    None,
+    Type(String),
+    Struct(Vec<StructField>),
+}
+
+/// Struct field description
+///
+/// Must be available for each field if the struct.
+#[derive(Decode, Encode, PartialEq, Eq, Clone)]
+pub struct StructField {
+    /// struct field name, if it exists, it will be displayed during the parsing if the struct is encountered
+    pub field_name: Option<String>,
+
+    /// field type
+    pub field_type: String,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/definitions/users.rs.html b/rustdocs/src/definitions/users.rs.html new file mode 100644 index 0000000000..c89d8e7c3e --- /dev/null +++ b/rustdocs/src/definitions/users.rs.html @@ -0,0 +1,251 @@ +users.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+
//! Address key associated non-secret information stored in Vault database
+//!
+//! Vault database has a tree `ADDRTREE` with [`AddressKey`] in key form
+//! as a key and encoded [`AddressDetails`] as a value.
+//! [`AddressDetails`] contains non-secret information associated with address key.
+//!
+//! `ADDRTREE` is operated mainly from within the Vault.
+//!
+//! Release and test versions of the cold database are generated on the Active side.
+
+use parity_scale_codec::{Decode, Encode};
+use sled::IVec;
+use sp_runtime::MultiSigner;
+
+use crate::helpers::IdenticonStyle;
+use crate::{
+    crypto::Encryption,
+    error::{Error, Result},
+    helpers::multisigner_to_encryption,
+    keyring::{AddressKey, NetworkSpecsKey},
+};
+
+/// Address key associated non-secret information stored in Vault database
+///
+/// Info that should be available for any address key.
+/// No secrets are stored there.
+#[derive(Decode, PartialEq, Eq, Encode, Debug, Clone)]
+pub struct AddressDetails {
+    /// seed name (as it is known to the Vault device)
+    pub seed_name: String,
+
+    /// derivation path, only with soft (`/`) and hard (`//`) junctions (i.e. no password)
+    pub path: String,
+
+    /// whether the address key has an associated password
+    pub has_pwd: bool,
+
+    /// set of networks, identified through [`NetworkSpecsKey`], that are available
+    /// to work with this address key
+    pub network_id: Option<NetworkSpecsKey>,
+
+    /// encryption algorithm associated with the address key and all its associated networks
+    pub encryption: Encryption,
+
+    /// address, or its parent address, had or could have secret exposed
+    pub secret_exposed: bool,
+}
+
+impl AddressDetails {
+    /// Gets ([`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html),
+    /// [`AddressDetails`]) tuple from [`AddressKey`] and associated value from
+    /// database tree `ADDRTREE`.
+    ///
+    /// Checks that there is no encryption mismatch.
+    pub fn process_entry_with_key_checked(
+        address_key: &AddressKey,
+        address_details_encoded: IVec,
+    ) -> Result<(MultiSigner, Self)> {
+        let multisigner = address_key.multi_signer().clone();
+        let address_details = AddressDetails::decode(&mut &address_details_encoded[..])?;
+        if multisigner_to_encryption(&multisigner) != address_details.encryption
+            && multisigner_to_encryption(&multisigner) != Encryption::Ecdsa
+            && address_details.encryption != Encryption::Ethereum
+        {
+            return Err(Error::EncryptionMismatch {
+                address_key: address_key.to_owned(),
+                encryption: address_details.encryption,
+            });
+        }
+        let network_specs_key = &address_details.network_id;
+        if let Some(network_specs_key) = network_specs_key {
+            let (_, network_specs_key_encryption) = network_specs_key.genesis_hash_encryption()?;
+            if network_specs_key_encryption != address_details.encryption {
+                return Err(Error::EncryptionMismatch {
+                    address_key: address_key.to_owned(),
+                    encryption: address_details.encryption,
+                });
+            }
+        }
+        Ok((multisigner, address_details))
+    }
+
+    /// Gets ([`MultiSigner`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/enum.MultiSigner.html),
+    /// [`AddressDetails`]) tuple from database tree `ADDRTREE` (key, value) entry.
+    ///
+    /// Checks that there is no encryption mismatch.
+    pub fn process_entry_checked(
+        (address_key_vec, address_details_encoded): (IVec, IVec),
+    ) -> Result<(MultiSigner, Self)> {
+        let address_key = AddressKey::from_ivec(&address_key_vec)?;
+        AddressDetails::process_entry_with_key_checked(&address_key, address_details_encoded)
+    }
+
+    /// Gets [`AddressDetails`] from [`AddressKey`] and associated value from
+    /// database tree `ADDRTREE`.
+    ///
+    /// Checks that there is no encryption mismatch.
+    pub fn from_entry_with_key_checked(
+        address_key: &AddressKey,
+        address_details_encoded: IVec,
+    ) -> Result<Self> {
+        let (_, address_details) =
+            AddressDetails::process_entry_with_key_checked(address_key, address_details_encoded)?;
+        Ok(address_details)
+    }
+
+    /// Checks if the [`AddressDetails`] have empty derivation path (i.e.
+    /// derivation path is empty and there is no password).
+    ///
+    /// Address key in this case is called root key or seed key.
+    pub fn is_root(&self) -> bool {
+        self.path.is_empty() && !self.has_pwd && self.network_id.is_none()
+    }
+
+    /// The style to use for identicons.
+    ///
+    /// Jdenticon for root key.
+    /// Otherwise, the style is taken from the encryption algorithm.
+    pub fn identicon_style(&self) -> IdenticonStyle {
+        if self.is_root() {
+            return IdenticonStyle::Jdenticon;
+        }
+        self.encryption.identicon_style()
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/error.rs.html b/rustdocs/src/generate_message/error.rs.html new file mode 100644 index 0000000000..3e4ffd7934 --- /dev/null +++ b/rustdocs/src/generate_message/error.rs.html @@ -0,0 +1,1095 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+
use definitions::{
+    crypto::Encryption, error::MetadataError, keyring::NetworkSpecsKey, metadata::AddressBookEntry,
+};
+use sp_core::H256;
+
+/// Generate Message result.
+pub type Result<T> = std::result::Result<T, Error>;
+
+/// Generate Message error.
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error(transparent)]
+    Database(#[from] db_handling::Error),
+
+    #[error(transparent)]
+    Io(#[from] std::io::Error),
+
+    #[error(transparent)]
+    Definitions(#[from] definitions::error::Error),
+
+    #[error(transparent)]
+    Sled(#[from] sled::Error),
+
+    #[error(transparent)]
+    JsonRPC(#[from] jsonrpsee::core::error::Error),
+
+    #[error(transparent)]
+    Codec(#[from] parity_scale_codec::Error),
+
+    #[error(transparent)]
+    Specs(#[from] SpecsError),
+
+    #[error(transparent)]
+    Metadata(#[from] MetadataError),
+
+    #[error("qr error {0}")]
+    Qr(Box<dyn std::error::Error>),
+
+    #[error("Signature wrong length, expected {0}, got {1}")]
+    SignatureWrongLength(usize, usize),
+
+    #[error("Public key wrong length, expected {0}, got {1}")]
+    PublicKeyWrongLength(usize, usize),
+
+    /// Network specs are already in the database
+    #[error(
+        "Network specs entry for {name} and encryption {} is already in database.",
+        .encryption.show(),
+    )]
+    SpecsInDb {
+        /// network name
+        name: String,
+
+        /// network supported encryption
+        encryption: Encryption,
+    },
+
+    #[error("not found {0}")]
+    NotFound(String),
+
+    #[error("Not supported.")]
+    NotSupported,
+
+    /// `ADDRESS_BOOK` tree of the hot database contains
+    /// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) entries with same
+    /// `name` field and different `genesis_hash` values.
+    ///
+    /// This is not allowed, as it would cause uncertainty in `load_metadata`
+    /// message generation, which is build using metadata and genesis hash.
+    #[error("Two different genesis hash entries for network {name} in address book.")]
+    TwoGenesisHashVariantsForName {
+        /// network name
+        name: String,
+    },
+
+    /// `ADDRESS_BOOK` tree of the hot database contains
+    /// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) entries with same
+    /// `name` field and different `address` values.
+    ///
+    /// Hot database does not allow to store more than one trusted URL address
+    /// for RPC calls for same network.
+    ///
+    /// Alternative URL address could be used if the database is not updated
+    /// (`-d` key is used).
+    ///
+    /// To update the address in the database in case the old one is no longer
+    /// acceptable, one should remove old entry, and only then add the new one.
+    #[error("Two different url entries for network {name} in address book.")]
+    TwoUrlVariantsForName {
+        /// network name
+        name: String,
+    },
+
+    /// `SPECSTREEPREP` tree of the hot database contains
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) entries
+    /// with same network name, but different base58 prefix.
+    #[error("Two different base58 entries for network {name}.")]
+    TwoBase58ForName {
+        /// network name
+        name: String,
+    },
+
+    /// `ADDRESS_BOOK` tree of the hot database has no entries to process.
+    #[error("Address book is empty")]
+    AddressBookEmpty,
+
+    /// Tried to fetch with `-u` key using address already known to the database
+    #[error(
+        "There is already an entry with address {url} \
+            for network {title}. Known networks should be processed \
+            with `-n` content key."
+    )]
+    UKeyUrlInDb {
+        /// network address book title
+        title: String,
+
+        /// URL address
+        url: String,
+    },
+
+    /// Tried to fetch with `-u` key using address not known to the database,
+    /// but got genesis hash that is already known.
+    ///
+    /// Likely tried to fetch with different address when one already is in the
+    /// database.
+    ///
+    /// Hot database does not allow to store more than one trusted URL address
+    /// for RPC calls for same network.
+    ///
+    /// Alternative URL address could be used if the database is not updated
+    /// (`-d` key is used).
+    ///
+    /// To update the address in the database in case the old one is no longer
+    /// acceptable, one should remove old entry, and only then add the new one.
+    #[error(
+        "Fetch at {url} resulted in data already known to the hot database. \
+        Network {} with genesis hash {} \
+        has address set to {}. To change the url, delete old entry.",
+        .address_book_entry.name,
+        hex::encode(.address_book_entry.genesis_hash),
+        .address_book_entry.address,
+    )]
+    UKeyHashInDb {
+        /// address book entry with exactly matching genesis hash
+        address_book_entry: AddressBookEntry,
+
+        /// URL address used for fetch
+        url: String,
+    },
+
+    #[error("Unexpected metadata format.")]
+    UnexpectedMetadataFormat,
+
+    #[error("Unexpected genesis hash format.")]
+    UnexpectedGenesisHashFormat,
+
+    #[error("Unexpected system properties format.")]
+    UnexpectedSystemPropertiesFormat,
+
+    #[error("Unexpected block hash format.")]
+    UnexpectedBlockHashFormat,
+
+    /// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) in hot database
+    /// contains `encryption` and `genesis_hash` fields, from which the
+    /// corresponding [`NetworkSpecsKey`] could be built.
+    ///
+    /// `NetworkSpecsKey` has an associated
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) value
+    /// stored in `SPECSTREEPREP` tree of the hot database. `NetworkSpecs`
+    /// has field `name` with network name.
+    ///
+    /// This error appears if the `name` from `NetworkSpecs` differs from
+    /// the `name` in `AddressBookEntry`.
+    #[error(
+        "Address book name {address_book_name} does not match the \
+        name in corresponding network specs {specs_name}"
+    )]
+    AddressBookSpecsName {
+        /// name in [`AddressBookEntry`](definitions::metadata::AddressBookEntry)
+        address_book_name: String,
+
+        /// name in [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+        specs_name: String,
+    },
+
+    #[error("network specs to send")]
+    NetworkSpecs(NetworkSpecsKey),
+
+    /// `ADDRESS_BOOK` tree of the hot database contains
+    /// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) entries with same
+    /// `address` field and different `name` fields.
+    ///
+    /// Name in address book is taken from the metadata, metadata is fetched
+    /// using RPC call, so one URL address can correspond to only one network
+    /// name.
+    #[error("Two different network names in entries for url address {url} in address book.")]
+    TwoNamesForUrl {
+        /// URL address, for which two condlicting names were found
+        url: String,
+    },
+
+    /// `METATREE` of the hot database should contain at most two latest
+    /// metadata versions for each network, with the older entries being
+    /// deleted as the new ones appear.
+    ///
+    /// This error appears if during the processing more than two metadata
+    /// entries for the network are found.
+    #[error("More than two entries for network {name} in hot database.")]
+    HotDatabaseMetadataOverTwoEntries {
+        /// network name
+        name: String,
+    },
+
+    /// `METATREE` of the hot database has two entries for a network with the
+    /// same metadata version.
+    ///
+    /// Note: at this moment should be unreachable, since the entries are
+    /// getting checked for consistency with [`MetaKey`].
+    ///
+    /// [`MetaKey`]: definitions::keyring::MetaKey
+    #[error("Two entries for {name} version {version}.")]
+    HotDatabaseMetadataSameVersionTwice {
+        /// network name
+        name: String,
+
+        /// network version
+        version: u32,
+    },
+
+    /// Fetched network metadata version is lower than the one already in the
+    /// hot database.
+    #[error(
+        "For {name} the newly received version ({new_version}) is lower \
+        than the latest version in the hot database ({old_version})."
+    )]
+    EarlierVersion {
+        /// network name
+        name: String,
+
+        /// network version in hot database, higher than the one just fetched
+        old_version: u32,
+
+        /// network version just fetched
+        new_version: u32,
+    },
+
+    /// Fetched network metadata is different from the one already in the hot
+    /// database, with the same network name and network version.
+    #[error(
+        "Metadata {name}{version} fetched now at block hash {} \
+        differs from the one in the hot database, block hash {}.",
+        .block_hash_in_db.map(hex::encode).unwrap_or_else(|| String::from("unknown")),
+        .block_hash_in_fetch.map(hex::encode).unwrap_or_else(|| String::from("unknown")),
+    )]
+    SameVersionDifferentMetadata {
+        /// network name
+        name: String,
+
+        /// network version
+        version: u32,
+
+        /// optionally recorded block hash for which the metadata was fetched
+        ///when recorded in the database
+        block_hash_in_db: Option<H256>,
+
+        /// block hash for which the metadata is fetched now
+        block_hash_in_fetch: Option<H256>,
+    },
+
+    /// Fetched data is different from the one already in the hot database.
+    #[error("Network from {url} error: {what}")]
+    ValuesChanged {
+        /// URL address used for RPC call
+        url: String,
+
+        /// what exactly has changed
+        what: Changed,
+    },
+
+    /// Fetched network specs are not suitable for use in Vault.
+    #[error("Problem with network specs from {url}. {error}")]
+    FaultySpecs {
+        /// URL address used for RPC cal
+        url: String,
+
+        /// what exactly is wrong with the network specs
+        error: SpecsError,
+    },
+
+    /// Fetched genesis hash could not be transformed in expected `[u8; 32]` value.
+    #[error(
+        "Fetched genesis hash {value} has unexpected format and does not fit into [u8;32] array."
+    )]
+    UnexpectedFetchedGenesisHashFormat {
+        /// genesis hash value as received through RPC call
+        value: String,
+    },
+
+    /// Fetched block hash could not be transformed in expected `[u8; 32]` value.
+    #[error(
+        "Fetched block hash {value} has unexpected format \
+        and does not fit into [u8;32] array."
+    )]
+    UnexpectedFetchedBlockHashFormat {
+        /// block hash value as received through RPC call
+        value: String,
+    },
+
+    /// User-entered block hash has invalid length
+    #[error("Provided block hash has wrong length.")]
+    BlockHashLength,
+
+    /// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) searched in
+    /// `ADDRESS_BOOK` tree of the hot database by matching the `name` field.
+    ///
+    /// Associated data is the network name used for searching.
+    #[error("Could not find address book entry for network name {name}")]
+    AddressBookEntryWithName { name: String },
+
+    /// Provided data signature (entered separately or as a part of
+    /// [`SufficientCrypto`](definitions::crypto::SufficientCrypto) input) is invalid
+    /// for given public key and data.
+    #[error("Bad signature.")]
+    BadSignature,
+
+    #[error("Unexpected public key length.")]
+    UnexpectedPubKeyLength,
+
+    #[error("Unexpected signature length.")]
+    UnexpectedSignatureLength,
+}
+
+/// Errors on the active side with network specs received through RPC call
+#[derive(Debug, PartialEq, Eq, thiserror::Error)]
+pub enum SpecsError {
+    /// Network base58 prefix information is not found neither in results of
+    /// the `system_properties` RPC call, nor in `System` pallet of the metadata
+    /// fetched with `state_getMetadata` RPC call.
+    #[error("no base58 prefix")]
+    NoBase58Prefix,
+
+    /// Network base58 prefix information found through `system_properties` RPC
+    /// call differs from the one from `System` pallet of the metadata fetched
+    /// with `state_getMetadata` RPC call.
+    ///
+    /// Associated data is corresponding base58 prefixes.
+    #[error("base58 prefix mismatch {specs}:{meta}")]
+    Base58PrefixMismatch { specs: u16, meta: u16 },
+
+    /// Network base58 prefix information received through `system_properties`
+    /// RPC call could not be transformed into expected `u16` prefix.
+    ///
+    /// Associated data is base58 prefix as received.
+    #[error("base58 prefix format not supported {value}")]
+    Base58PrefixFormatNotSupported { value: String },
+
+    /// Network decimals information **is not found** in the results if the
+    /// `system_properties` RPC call, but the unit information **is found**.
+    ///
+    /// Associated data is the fetched unit value.
+    #[error("unit no decimals {0}")]
+    UnitNoDecimals(String),
+
+    /// Network decimals information received through `system_properties`
+    /// RPC call could not be transformed into expected `u8` value.
+    ///
+    /// Associated data is decimals information as received.
+    #[error("decimals format not supported {value}")]
+    DecimalsFormatNotSupported { value: String },
+
+    /// Network unit information **is not found** in the results if the
+    /// `system_properties` RPC call, but the decimals information **is found**.
+    ///
+    /// Associated data is the fetched decimals value, could be array too.
+    #[error("decimals no unit {0}")]
+    DecimalsNoUnit(String),
+
+    /// Network unit information received through `system_properties`
+    /// RPC call could not be transformed into expected `String` value.
+    ///
+    /// Associated data is unit information as received.
+    #[error("unit format not supported {value}")]
+    UnitFormatNotSupported { value: String },
+
+    /// An array with more than one element is received for network decimals
+    /// through `system_properties` RPC call. Received units are not an array.
+    #[error("decimals array units not")]
+    DecimalsArrayUnitsNot,
+
+    /// Both the network decimals and network units are received as arrays,
+    /// but the array length is different, i.e. something not straightforward
+    /// is going on with the network.
+    ///
+    /// Associated data are the printed sets as they are received through the
+    /// `system_properties` RPC call.
+    #[error("decimals units array length {decimals} {unit}")]
+    DecimalsUnitsArrayLength { decimals: String, unit: String },
+
+    /// An array with more than one element is received for network units
+    /// through `system_properties` RPC call. Received decimals are not an array.
+    #[error("units array decimals not")]
+    UnitsArrayDecimalsNot,
+
+    /// Unit and decimal override is not allowed, when network has a single
+    /// token.
+    ///
+    /// The only case when the decimals and unit override is permitted is when
+    /// the network has a matching set of decimals and units, and user has to
+    /// select the needed set element manually.
+    ///
+    /// If the network has a single decimals value and a single unit value, i.e.
+    /// the values that would be suitable on their own, and user attempts to
+    /// override it, this error appears.
+    #[error("override ignored single")]
+    OverrideIgnoredSingle,
+
+    /// Unit and decimal override is not allowed, when network has no token.
+    #[error("override ignored none")]
+    OverrideIgnoredNone,
+}
+
+/// Data received through RPC call is different from the data in hot database
+#[derive(Debug)]
+pub enum Changed {
+    /// Network base58 prefix in hot database (consistent between the metadata
+    /// in `METATREE` and network specs in `SPECSPREPTREE`) is different from
+    /// the one received through new RPC calls (also consistent).
+    ///
+    /// Associated data is the base58 prefix values in question.
+    Base58Prefix { old: u16, new: u16 },
+
+    /// Network genesis hash in hot database is different from the one fetched
+    /// through a new RPC call.
+    ///
+    /// Network genesis hash is encountered in `SPECSTREEPREP` and
+    /// `ADDRESS_BOOK`.
+    ///
+    /// It is possible for a network to change genesis hash, some, especially
+    /// experimental ones, are doing it quite regularly.
+    ///
+    /// If the network has changed the genesis hash, it would be best to remove
+    /// the old entry from the database, and then load the new one. If the
+    /// network is one of the default ones (currently Polkadot, Kusama,
+    /// Westend), the `defaults` crate must be updated as well.
+    ///
+    /// Associated data is the genesis hash values in question.
+    GenesisHash { old: H256, new: H256 },
+
+    /// Network decimals value in
+    /// [`NetworkSpecs`](crate::network_specs::NetworkSpecs)
+    /// stored in `SPECSTREEPREP` tree of the hot database is different from
+    /// the one fetched through a new RPC call.
+    ///
+    /// Network decimals value is expected to be permanent.
+    Decimals { old: u8, new: u8 },
+
+    /// Network decimals value in
+    /// [`NetworkSpecs`](crate::network_specs::NetworkSpecs)
+    /// stored in `SPECSTREEPREP` tree of the hot database has some value,
+    /// freshly fetched specs have no decimals.
+    ///
+    /// Network decimals value is expected to be permanent. Override for no
+    /// decimals at the moment is blocked.
+    DecimalsBecameNone { old: u8 },
+
+    /// Network name is stored in multiple places in the hot database:
+    ///
+    /// - in `name` field of network specs
+    /// [`NetworkSpecs`](crate::network_specs::NetworkSpecs) stored
+    /// in `SPECSTREEPREP` tree
+    /// - in `name` field of address book entry
+    /// [`AddressBookEntry`](crate::metadata::AddressBookEntry) stored in
+    /// `ADDRESS_BOOK` tree
+    /// - encoded as a part of [`MetaKey`] and inside the network metadata
+    /// stored in `METATREE` tree
+    ///
+    /// All those entries eventually are produced from network name that is
+    /// part of `Version` constant in `System` pallet of the network metadata.
+    ///
+    /// Network name is expected to be permanent. This error appears if the
+    /// name derived from metadata fetched through a new RPC call is different.
+    ///
+    /// [`MetaKey`]: crate::keyring::MetaKey
+    Name { old: String, new: String },
+
+    /// Network unit value in
+    /// [`NetworkSpecs`](crate::network_specs::NetworkSpecs)
+    /// stored in `SPECSTREEPREP` tree of the hot database is different from
+    /// the one fetched through a new RPC call.
+    ///
+    /// Network unit value is expected to be permanent.
+    Unit { old: String, new: String },
+
+    /// Network unit value in
+    /// [`NetworkSpecs`](crate::network_specs::NetworkSpecs)
+    /// stored in `SPECSTREEPREP` tree of the hot database has some value,
+    /// freshly fetched specs have no unit.
+    ///
+    /// Network unit value is expected to be permanent. Override for no
+    /// unit at the moment is blocked.
+    UnitBecameNone { old: String },
+}
+
+impl std::fmt::Display for Changed {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        let (insert, old, new) = match self {
+            Changed::Base58Prefix { old, new } => {
+                ("base58 prefix", old.to_string(), new.to_string())
+            }
+            Changed::GenesisHash { old, new } => {
+                ("genesis hash", hex::encode(old), hex::encode(new))
+            }
+            Changed::Decimals { old, new } => ("decimals value", old.to_string(), new.to_string()),
+            Changed::DecimalsBecameNone { old } => {
+                ("decimals value", old.to_string(), "no value".to_string())
+            }
+            Changed::Name { old, new } => ("name", old.to_string(), new.to_string()),
+            Changed::Unit { old, new } => ("unit", old.to_string(), new.to_string()),
+            Changed::UnitBecameNone { old } => ("unit", old.to_string(), "no value".to_string()),
+        };
+
+        write!(
+            f,
+            "Network {insert} differs from the one in the hot database. Old: {old}. New: {new}."
+        )
+    }
+}
+
+/// `NotHex` errors occurring on the Active side
+///
+/// Expected to receive data in hexadecimal format, got something different.
+/// [`NotHexActive`] specifies what was expected.
+#[derive(Debug)]
+pub enum NotHexActive {
+    /// Network genesis hash, fetched through RPC call.
+    ///
+    /// Associated data is the URL address used for the fetching.
+    FetchedGenesis { url: String },
+
+    /// Network block hash, fetched through RPC call.
+    ///
+    /// Associated data is the URL address used for the fetching.
+    FetchedBlock { url: String },
+
+    /// User-entered block hash for metadata fetching
+    EnteredBlock,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/fetch_metadata.rs.html b/rustdocs/src/generate_message/fetch_metadata.rs.html new file mode 100644 index 0000000000..65ac27a2a7 --- /dev/null +++ b/rustdocs/src/generate_message/fetch_metadata.rs.html @@ -0,0 +1,679 @@ +fetch_metadata.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+
//! Fetch network information from a node using RPC calls
+//!
+//! Preparing `add_specs` and `load_metadata` update payload may require
+//! gathering network information from a node.
+//!
+//! For `add_specs` update payload:
+//!
+//! <table>
+//!     <tr>
+//!         <th>call</th>
+//!         <th>fetched information</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>state_getMetadata</code>, for current block</td>
+//!         <td>current block network metadata, that will be used to get:<br>
+//!             - network name<br>
+//!             - base58 prefix from metadata
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>chain_getBlockHash</code>, for 0th block</td>
+//!         <td>network genesis hash</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>system_properties</code></td>
+//!         <td>- base58 prefix<br>
+//!             - decimals<br>
+//!             - unit<br>
+//!         </td>
+//!     </tr>
+//! </table>
+//!
+//! Network name expected to remain the same for the network over time. The only
+//! way to get network name is from the network metadata `Version` constant.
+//!
+//! For `load_metadata` update:
+//!
+//! <table>
+//!     <tr>
+//!         <th>call</th>
+//!         <th>fetched information</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>chain_getBlockHash</code>, for current block</td>
+//!         <td>current block hash</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>state_getMetadata</code>, for just fetched block hash</td>
+//!         <td>latest network metadata</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>chain_getBlockHash</code>, for 0th block</td>
+//!         <td>network genesis hash</td>
+//!     </tr>
+//! </table>
+//!
+//! Block hash is fetched first to always have network metadata matching the
+//! block hash, even if the two RPC calls were done during block switching.
+//!
+//! Addresses for RPC calls in different networks could be found
+//! [here](https://github.com/polkadot-js/apps/tree/master/packages/apps-config/src/endpoints)
+//!
+//! This module deals only with the RPC calls part and does **no processing**
+//! of the fetched data.
+use jsonrpsee::core::client::ClientT;
+use jsonrpsee::rpc_params;
+use jsonrpsee::ws_client::WsClientBuilder;
+use lazy_static::lazy_static;
+use regex::Regex;
+use serde_json::{
+    map::Map,
+    value::{Number, Value},
+};
+use sp_core::H256;
+use std::time::Duration;
+
+use crate::error::{Error, Result};
+
+/// Data from RPC calls for `load_metadata` update payload.
+///
+/// This data is **sufficient** for `load_metadata` update payload generation,
+/// i.e. nothing else has to be known about the network beforehand to produce an
+/// update payload.
+pub struct FetchedInfo {
+    /// Fetched metadata, as a hexadecimal string
+    pub meta: String,
+
+    /// Block hash, at which the metadata was fetched, as a hexadecimal string
+    pub block_hash: String,
+
+    /// Fetched genesis hash, as a hexadecimal string
+    pub genesis_hash: String,
+}
+
+/// Data from RPC calls for `add_specs` update payload.
+///
+/// Note that this data is **not sufficient** for `add_specs` update payload
+/// generation. At least network encryption is needed additionally.
+pub struct FetchedInfoWithNetworkSpecs {
+    /// Fetched metadata, as a hexadecimal string
+    pub meta: String,
+
+    /// Fetched genesis hash, as a hexadecimal string
+    pub genesis_hash: String,
+
+    /// Fetched network properties, as a `Map`
+    ///
+    /// Properties are expected to contain base58 prefix, decimals, and units,
+    /// but in some cases some data may be missing.
+    pub properties: Map<String, Value>,
+}
+
+lazy_static! {
+    /// Regex to add port to addresses that have no port specified.
+    ///
+    /// See tests for behavior examples.
+    static ref PORT: Regex = Regex::new(r"^(?P<body>wss://[^/]*?)(?P<port>:[0-9]+)?(?P<tail>/.*)?$").expect("known value");
+}
+
+const CONNECTION_TIMEOUT: Duration = Duration::from_secs(60);
+const REQUEST_TIMEOUT: Duration = Duration::from_secs(120);
+
+/// Supply address with port if needed.
+///
+/// Transform address as it is displayed to user in <https://polkadot.js.org/>
+/// to address with port added if necessary that could be fed to `jsonrpsee`
+/// client.
+///
+/// The port is set here to default 443 if there is no port specified in
+/// address itself, since default port in `jsonrpsee` is unavailable for now.
+///
+/// See for details <https://github.com/paritytech/jsonrpsee/issues/554`>
+///
+/// Some addresses have port specified, and should be left as is.
+fn address_with_port(str_address: &str) -> String {
+    match PORT.captures(str_address) {
+        Some(caps) => {
+            if caps.name("port").is_some() {
+                str_address.to_string()
+            } else {
+                match caps.name("tail") {
+                    Some(tail) => format!("{}:443{}", &caps["body"], tail.as_str()),
+                    None => format!("{}:443", &caps["body"]),
+                }
+            }
+        }
+        None => str_address.to_string(),
+    }
+}
+
+/// Fetch data for `load_metadata` update payload through RPC calls.
+///
+/// Function inputs address at which RPC calls are made.
+///
+/// Data fetched:
+///
+/// 1. current block hash
+/// 2. metadata at this block hash
+/// 3. network genesis hash
+#[tokio::main]
+pub async fn fetch_info(str_address: &str) -> Result<FetchedInfo> {
+    let client = WsClientBuilder::default()
+        .connection_timeout(CONNECTION_TIMEOUT)
+        .request_timeout(REQUEST_TIMEOUT)
+        .build(address_with_port(str_address)) // port supplied if needed
+        .await?;
+    let response: Value = client.request("chain_getBlockHash", rpc_params![]).await?;
+    let block_hash = match response {
+        Value::String(x) => x,
+        _ => return Err(Error::UnexpectedBlockHashFormat),
+    };
+    let response: Value = client
+        .request("state_getMetadata", rpc_params![&block_hash])
+        .await?;
+    let meta = match response {
+        Value::String(x) => x,
+        _ => return Err(Error::UnexpectedMetadataFormat),
+    };
+    let response: Value = client
+        .request(
+            "chain_getBlockHash",
+            rpc_params![Value::Number(Number::from(0u8))],
+        )
+        .await?;
+    let genesis_hash = match response {
+        Value::String(x) => x,
+        _ => return Err(Error::UnexpectedGenesisHashFormat),
+    };
+    Ok(FetchedInfo {
+        meta,
+        block_hash,
+        genesis_hash,
+    })
+}
+
+/// Fetch network metadata from given URL address at given block through RPC
+/// call.
+///
+/// Function inputs address at which RPC call is made and block hash in [`H256`]
+/// format. Outputs hexadecimal metadata.
+#[tokio::main]
+pub async fn fetch_meta_at_block(str_address: &str, block_hash: H256) -> Result<String> {
+    let client = WsClientBuilder::default()
+        .connection_timeout(CONNECTION_TIMEOUT)
+        .request_timeout(REQUEST_TIMEOUT)
+        .build(address_with_port(str_address)) // port supplied if needed
+        .await?;
+    let response: Value = client
+        .request(
+            "state_getMetadata",
+            rpc_params![Value::String(format!("0x{}", hex::encode(block_hash)))],
+        )
+        .await?;
+    match response {
+        Value::String(x) => Ok(x),
+        _ => Err(Error::UnexpectedMetadataFormat),
+    }
+}
+
+/// Fetch data for `add_specs` update payload through RPC calls.
+///
+/// Function inputs address at which RPC calls are made.
+///
+/// Data fetched:
+///
+/// 1. current network metadata
+/// 2. network genesis hash
+/// 3. network system properties (could contain base58 prefix, decimals, unit)
+#[tokio::main]
+pub async fn fetch_info_with_network_specs(
+    str_address: &str,
+) -> Result<FetchedInfoWithNetworkSpecs> {
+    let client = WsClientBuilder::default()
+        .connection_timeout(CONNECTION_TIMEOUT)
+        .request_timeout(REQUEST_TIMEOUT)
+        .build(address_with_port(str_address)) // port supplied if needed
+        .await?;
+    let response: Value = client.request("state_getMetadata", rpc_params![]).await?;
+    let meta = match response {
+        Value::String(x) => x,
+        _ => return Err(Error::UnexpectedMetadataFormat),
+    };
+    let response: Value = client
+        .request(
+            "chain_getBlockHash",
+            rpc_params![Value::Number(Number::from(0u8))],
+        )
+        .await?;
+    let genesis_hash = match response {
+        Value::String(x) => x,
+        _ => return Err(Error::UnexpectedGenesisHashFormat),
+    };
+    let response: Value = client.request("system_properties", rpc_params![]).await?;
+    let properties = match response {
+        Value::Object(x) => x,
+        _ => return Err(Error::UnexpectedSystemPropertiesFormat),
+    };
+    Ok(FetchedInfoWithNetworkSpecs {
+        meta,
+        genesis_hash,
+        properties,
+    })
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    #[test]
+    fn address_1() {
+        let address = "wss://rpc.polkadot.io";
+        let address_expected = "wss://rpc.polkadot.io:443";
+        let address_calc = address_with_port(address);
+        assert!(
+            address_expected == address_calc,
+            "{}",
+            "Fetch address calc: \n{address_calc}"
+        );
+    }
+
+    #[test]
+    fn address_2() {
+        let address = "wss://polkadot.api.onfinality.io/public-ws";
+        let address_expected = "wss://polkadot.api.onfinality.io:443/public-ws";
+        let address_calc = address_with_port(address);
+        assert!(
+            address_expected == address_calc,
+            "{}",
+            "Fetch address calc: \n{address_calc}"
+        );
+    }
+
+    #[test]
+    fn address_3() {
+        let address = "wss://node-6907995778982338560.sz.onfinality.io/ws?apikey=b5324589-1447-4699-92a6-025bc2cc2ac1";
+        let address_expected = "wss://node-6907995778982338560.sz.onfinality.io:443/ws?apikey=b5324589-1447-4699-92a6-025bc2cc2ac1";
+        let address_calc = address_with_port(address);
+        assert!(
+            address_expected == address_calc,
+            "{}",
+            "Fetch address calc: \n{address_calc}"
+        );
+    }
+
+    #[test]
+    fn address_4() {
+        let address = "wss://westend.kilt.io:9977";
+        let address_expected = "wss://westend.kilt.io:9977";
+        let address_calc = address_with_port(address);
+        assert!(
+            address_expected == address_calc,
+            "{}",
+            "Fetch address calc: \n{address_calc}"
+        );
+    }
+
+    #[test]
+    fn address_5() {
+        let address = "wss://full-nodes.kilt.io:9944/";
+        let address_expected = "wss://full-nodes.kilt.io:9944/";
+        let address_calc = address_with_port(address);
+        assert!(
+            address_expected == address_calc,
+            "{}",
+            "Fetch address calc: \n{address_calc}"
+        );
+    }
+
+    #[test]
+    fn address_6() {
+        let address = "wss://peregrine.kilt.io/parachain-public-ws/";
+        let address_expected = "wss://peregrine.kilt.io:443/parachain-public-ws/";
+        let address_calc = address_with_port(address);
+        assert!(
+            address_expected == address_calc,
+            "{}",
+            "Fetch address calc: \n{address_calc}"
+        );
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/helpers.rs.html b/rustdocs/src/generate_message/helpers.rs.html new file mode 100644 index 0000000000..1d88616698 --- /dev/null +++ b/rustdocs/src/generate_message/helpers.rs.html @@ -0,0 +1,2085 @@ +helpers.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+
//! Helpers
+use db_handling::identities::{
+    AddrInfo, ExportAddrs, ExportAddrsV2, SeedInfo, TransactionBulk, TransactionBulkV1,
+};
+use parity_scale_codec::Encode;
+use qrcode_rtx::transform_into_qr_apng;
+use serde_json::{map::Map, value::Value};
+use sled::Batch;
+use sp_core::H256;
+use std::path::Path;
+use std::{cmp::Ordering, convert::TryInto};
+
+use constants::{ADDRESS_BOOK, COLOR, METATREE, META_HISTORY, SECONDARY_COLOR, SPECSTREEPREP};
+use db_handling::{
+    db_transactions::TrDbHot,
+    helpers::{make_batch_clear_tree, open_tree},
+};
+use definitions::{
+    crypto::Encryption,
+    helpers::unhex,
+    keyring::{AddressBookKey, MetaKey, NetworkSpecsKey},
+    metadata::{AddressBookEntry, MetaHistoryEntry, MetaValues},
+    network_specs::NetworkSpecs,
+    qr_transfers::{ContentAddSpecs, ContentLoadMeta},
+};
+
+use crate::error::{Changed, Error, NotHexActive, Result, SpecsError};
+use crate::fetch_metadata::{fetch_info, fetch_info_with_network_specs, fetch_meta_at_block};
+use crate::interpret_specs::{check_specs, interpret_properties, TokenFetch};
+use crate::parser::{Goal, Token};
+
+/// Get [`AddressBookEntry`] from the database for given address book title.
+pub fn get_address_book_entry(database: &sled::Db, title: &str) -> Result<AddressBookEntry> {
+    let address_book = open_tree(database, ADDRESS_BOOK)?;
+    match address_book.get(AddressBookKey::from_title(title).key())? {
+        Some(a) => Ok(AddressBookEntry::from_entry_with_title(title, &a)?),
+        None => Err(Error::NotFound(title.to_string())),
+    }
+}
+
+/// Get [`NetworkSpecs`] from the database for given address book title.
+pub fn network_specs_from_title(database: &sled::Db, title: &str) -> Result<NetworkSpecs> {
+    network_specs_from_entry(database, &get_address_book_entry(database, title)?)
+}
+
+/// Get [`NetworkSpecs`] corresponding to the given [`AddressBookEntry`].
+///
+/// Entries in [`ADDRESS_BOOK`] and [`SPECSTREEPREP`] trees for any network can
+/// be added and removed only simultaneously.
+// TODO consider combining those, key would be address book title, network specs
+// key will stay only in cold database then?
+pub fn network_specs_from_entry(
+    database: &sled::Db,
+    address_book_entry: &AddressBookEntry,
+) -> Result<NetworkSpecs> {
+    let network_specs_key = NetworkSpecsKey::from_parts(
+        &address_book_entry.genesis_hash,
+        &address_book_entry.encryption,
+    );
+    let network_specs = get_network_specs_to_send(database, &network_specs_key)?;
+    if network_specs.name != address_book_entry.name {
+        return Err(Error::AddressBookSpecsName {
+            address_book_name: address_book_entry.name.to_string(),
+            specs_name: network_specs.name,
+        });
+    }
+    Ok(network_specs)
+}
+
+/// Try to get network specs [`NetworkSpecs`] from the hot database.
+///
+/// If the [`NetworkSpecsKey`] and associated [`NetworkSpecs`] are not
+/// found in the [`SPECSTREEPREP`], the result is `Ok(None)`.
+pub fn try_get_network_specs_to_send(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<Option<NetworkSpecs>> {
+    let chainspecs = open_tree(database, SPECSTREEPREP)?;
+    match chainspecs.get(network_specs_key.key())? {
+        Some(specs_encoded) => Ok(Some(NetworkSpecs::from_entry_with_key_checked(
+            network_specs_key,
+            specs_encoded,
+        )?)),
+        None => Ok(None),
+    }
+}
+
+/// Get network specs [`NetworkSpecs`] from the hot database.
+///
+/// Network specs here are expected to be found, not finding them results in an
+/// error.
+pub fn get_network_specs_to_send(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+) -> Result<NetworkSpecs> {
+    match try_get_network_specs_to_send(database, network_specs_key)? {
+        Some(a) => Ok(a),
+        None => Err(Error::NetworkSpecs(network_specs_key.to_owned())),
+    }
+}
+
+/// Update the database after `add-specs` run.
+///
+/// Inputs `&str` URL address that was used for RPC calls and already completed
+/// [`NetworkSpecs`].
+///
+/// Adds simultaneously [`AddressBookEntry`] to [`ADDRESS_BOOK`] and
+/// [`NetworkSpecs`] to [`SPECSTREEPREP`].
+///
+/// Key for [`AddressBookEntry`] is the network address book title. It always
+/// has format `<network_name>-<network_encryption>`.
+pub fn db_upd_network(
+    database: &sled::Db,
+    address: &str,
+    network_specs: &NetworkSpecs,
+) -> Result<()> {
+    let mut network_specs_prep_batch = Batch::default();
+    network_specs_prep_batch.insert(
+        NetworkSpecsKey::from_parts(&network_specs.genesis_hash, &network_specs.encryption).key(),
+        network_specs.encode(),
+    );
+    let address_book_new_key = AddressBookKey::from_title(&format!(
+        "{}-{}",
+        network_specs.name,
+        network_specs.encryption.show()
+    ));
+    let address_book_new_entry_encoded = AddressBookEntry {
+        name: network_specs.name.to_string(),
+        genesis_hash: network_specs.genesis_hash,
+        address: address.to_string(),
+        encryption: network_specs.encryption,
+        def: false,
+    }
+    .encode();
+    let mut address_book_batch = Batch::default();
+    address_book_batch.insert(address_book_new_key.key(), address_book_new_entry_encoded);
+    TrDbHot::new()
+        .set_address_book(address_book_batch)
+        .set_network_specs_prep(network_specs_prep_batch)
+        .apply(database)?;
+    Ok(())
+}
+
+/// Process error depending on pass errors flag `-s`.
+pub fn error_occured(e: Error, pass_errors: bool) -> Result<()> {
+    if pass_errors {
+        println!("Error encountered. {e} Skipping it.");
+        Ok(())
+    } else {
+        Err(e)
+    }
+}
+
+/// Content to print during `load-metadata<-k/-p/-t>` processing.
+pub enum Write {
+    /// all payloads, `-t` key or no setting key was used
+    All,
+
+    /// only new payloads, `-k` setting key was used
+    OnlyNew,
+
+    /// no payloads, `-p` setting key was used
+    None,
+}
+
+/// Get all [`ADDRESS_BOOK`] entries with address book titles.
+pub fn address_book_content(database: &sled::Db) -> Result<Vec<(String, AddressBookEntry)>> {
+    let address_book = open_tree(database, ADDRESS_BOOK)?;
+    let mut out: Vec<(String, AddressBookEntry)> = Vec::new();
+    for x in address_book.iter().flatten() {
+        out.push(AddressBookEntry::process_entry(x)?)
+    }
+    Ok(out)
+}
+
+/// Get all [`ADDRESS_BOOK`] entries with address book titles, for given URL
+/// address.
+pub fn filter_address_book_by_url(
+    database: &sled::Db,
+    address: &str,
+) -> Result<Vec<(String, AddressBookEntry)>> {
+    let mut out: Vec<(String, AddressBookEntry)> = Vec::new();
+    let mut found_name = None;
+    for (title, address_book_entry) in address_book_content(database)?.into_iter() {
+        if address_book_entry.address == address {
+            found_name = match found_name {
+                Some(name) => {
+                    if name == address_book_entry.name {
+                        Some(name)
+                    } else {
+                        return Err(Error::TwoNamesForUrl {
+                            url: address.to_string(),
+                        });
+                    }
+                }
+                None => Some(address_book_entry.name.to_string()),
+            };
+            out.push((title, address_book_entry))
+        }
+    }
+    Ok(out)
+}
+
+/// Search for any [`ADDRESS_BOOK`] entry with given genesis hash.
+pub fn genesis_hash_in_hot_db(
+    database: &sled::Db,
+    genesis_hash: H256,
+) -> Result<Option<AddressBookEntry>> {
+    let mut out = None;
+    for (_, address_book_entry) in address_book_content(database)?.into_iter() {
+        if address_book_entry.genesis_hash == genesis_hash {
+            out = Some(address_book_entry);
+            break;
+        }
+    }
+    Ok(out)
+}
+
+/// Check if [`ADDRESS_BOOK`] has entries with given `name` and title other than
+/// `except_title`.
+pub fn is_specname_in_db(database: &sled::Db, name: &str, except_title: &str) -> Result<bool> {
+    let address_book = open_tree(database, ADDRESS_BOOK)?;
+    let mut out = false;
+    for x in address_book.iter().flatten() {
+        let (title, address_book_entry) = <AddressBookEntry>::process_entry(x)?;
+        if (address_book_entry.name == name) && (title != except_title) {
+            out = true;
+            break;
+        }
+    }
+    Ok(out)
+}
+
+/// Get all entries from `META_HISTORY`.
+pub fn meta_history_content(database: &sled::Db) -> Result<Vec<MetaHistoryEntry>> {
+    let meta_history = open_tree(database, META_HISTORY)?;
+    let mut out: Vec<MetaHistoryEntry> = Vec::new();
+    for x in meta_history.iter().flatten() {
+        out.push(MetaHistoryEntry::from_entry(x)?)
+    }
+    Ok(out)
+}
+
+/// [`MetaValues`] with corresponding block hash at the time of fetch, if
+/// available.
+///
+/// Block hash may be missing if the metadata was extracted from `.wasm` file.
+#[derive(Clone)]
+pub struct MetaValuesStamped {
+    pub meta_values: MetaValues,
+    pub at_block_hash: Option<H256>,
+}
+
+/// Collect all [`MetaValuesStamped`] from the hot database.
+pub fn read_metadata_database(database: &sled::Db) -> Result<Vec<MetaValuesStamped>> {
+    let metadata = open_tree(database, METATREE)?;
+    let meta_history = open_tree(database, META_HISTORY)?;
+    let mut out: Vec<MetaValuesStamped> = Vec::new();
+    for x in metadata.iter().flatten() {
+        let meta_values = MetaValues::from_entry_checked(x)?;
+        let meta_key = MetaKey::from_parts(&meta_values.name, meta_values.version);
+        let at_block_hash = match meta_history.get(meta_key.key())? {
+            Some(meta_history_entry_encoded) => Some(
+                MetaHistoryEntry::from_entry_with_key_parts(
+                    &meta_values.name,
+                    meta_values.version,
+                    &meta_history_entry_encoded,
+                )?
+                .block_hash,
+            ),
+            None => None,
+        };
+        out.push(MetaValuesStamped {
+            meta_values,
+            at_block_hash,
+        })
+    }
+    Ok(out)
+}
+
+/// [`MetaValuesStamped`] sorted into sets of newer and older, by metadata
+/// version.
+pub struct SortedMetaValues {
+    /// Set of the metadata entries with latest version known to the database.
+    pub newer: Vec<MetaValuesStamped>,
+
+    /// Other metadata entries. Since there are maximum two entries allowed,
+    /// this set contains at most one entry for each network.
+    pub older: Vec<MetaValuesStamped>,
+}
+
+/// Sort [`MetaValuesStamped`] into sets of newer and older, by metadata
+/// version.
+///
+/// Database contains maximum two metadata entries for each network name, both
+/// newer and older sets can contain at most one metadata [`MetaValuesStamped`].
+fn sort_metavalues(meta_values: Vec<MetaValuesStamped>) -> Result<SortedMetaValues> {
+    // newer metadata set, i.e. with higher version for given network
+    let mut newer: Vec<MetaValuesStamped> = Vec::new();
+
+    // older metadata set
+    let mut older: Vec<MetaValuesStamped> = Vec::new();
+
+    // scan through all available metadata and collect `newer` and `older` sets
+    for x in meta_values.iter() {
+        // flag to indicate that network has metadata entry in already collected
+        // `newer` set
+        let mut found_in_new = false;
+
+        // entry number that should be removed from `newer` set, not necessarily
+        // invoked for every true `found_in_new`
+        let mut num_new = None;
+
+        // search for the network name in already collected elements of `newer`
+        // set
+        for (i, y) in newer.iter().enumerate() {
+            if x.meta_values.name == y.meta_values.name {
+                // search for the network name in already collected elements of
+                // `older` set; should not find any;
+                for z in older.iter() {
+                    if x.meta_values.name == z.meta_values.name {
+                        return Err(Error::HotDatabaseMetadataOverTwoEntries {
+                            name: x.meta_values.name.to_string(),
+                        });
+                    }
+                }
+
+                found_in_new = true;
+
+                // where the entry goes, based on the version
+                match x.meta_values.version.cmp(&y.meta_values.version) {
+                    // `x` entry goes to `older`
+                    Ordering::Less => older.push(x.to_owned()),
+
+                    // same version?!
+                    Ordering::Equal => {
+                        return Err(Error::HotDatabaseMetadataSameVersionTwice {
+                            name: x.meta_values.name.to_string(),
+                            version: x.meta_values.version,
+                        })
+                    }
+
+                    // `x` entry goes to `newer` and replaces `y` entry, `y`
+                    // entry goes to `older`
+                    Ordering::Greater => num_new = Some(i),
+                }
+
+                break;
+            }
+        }
+
+        // no metadata entry in `newer`, simply add to `newer`
+        if !found_in_new {
+            newer.push(x.to_owned());
+        }
+
+        // already had metadata entry with older version in `newer` set;
+        //
+        // move existing entry to `older`, then add freshly found entry to
+        // `newer`
+        if let Some(i) = num_new {
+            older.push(newer.remove(i));
+            newer.push(x.to_owned());
+        }
+    }
+    Ok(SortedMetaValues { newer, older })
+}
+
+/// Try updating [`SortedMetaValues`] with new [`MetaValuesStamped`].
+///
+/// Outputs flag to indicate that the [`SortedMetaValues`] got updated.
+///
+/// If the fetched metadata is good and has later version than the ones in
+/// [`SortedMetaValues`], it is added to `newer` set, any previous value from
+/// `newer` is moved to `older`. If there was any value in `older`, it gets
+/// kicked out.
+///
+/// If there was no block hash in hot database and the metadata did not change,
+/// a new block hash could be added if it is known.
+pub fn add_new_metadata(new: &MetaValuesStamped, sorted: &mut SortedMetaValues) -> Result<bool> {
+    // action to perform after sorting on found entry
+    enum Found {
+        DoNothing,
+        Replace {
+            move_from_newer: usize,
+            remove_from_older: Option<usize>,
+        },
+        UpdateBlock {
+            in_newer: usize,
+        },
+    }
+
+    let mut similar_entries: Option<Found> = None;
+
+    // search for entry with same name through `newer` existing entries
+    for (i, x) in sorted.newer.iter().enumerate() {
+        if new.meta_values.name == x.meta_values.name {
+            similar_entries = match new.meta_values.version.cmp(&x.meta_values.version) {
+                // earlier metadata should not be fetched through RPC call;
+                //
+                // version downgrades happened, but these should always be
+                // double checked before being accepted;
+                //
+                // earlier metadata could be retrieved from an outdated `.wasm`
+                // file - no reason to accept it either;
+                Ordering::Less => {
+                    return Err(Error::EarlierVersion {
+                        name: x.meta_values.name.to_string(),
+                        old_version: x.meta_values.version,
+                        new_version: new.meta_values.version,
+                    })
+                }
+
+                // same version, no updates;
+                //
+                // check that metadata is exactly the same, different metadata
+                // under same version is an error;
+                Ordering::Equal => {
+                    if new.meta_values.meta != x.meta_values.meta {
+                        // metadata comparing, hopefully never to be needed
+                        // again
+                        //
+                        // prints the difference for user to check
+                        let mut sus1: Vec<u8> = Vec::new();
+                        let mut sus2: Vec<u8> = Vec::new();
+                        for a in 0..x.meta_values.meta.len() {
+                            if new.meta_values.meta[a] != x.meta_values.meta[a] {
+                                println!("Suspicious number {a}");
+                                sus1.push(new.meta_values.meta[a]);
+                                sus2.push(x.meta_values.meta[a]);
+                            }
+                        }
+                        println!("new: {sus1:?}, in db: {sus2:?}");
+
+                        return Err(Error::SameVersionDifferentMetadata {
+                            name: new.meta_values.name.to_string(),
+                            version: new.meta_values.version,
+                            block_hash_in_db: x.at_block_hash,
+                            block_hash_in_fetch: new.at_block_hash,
+                        });
+                    }
+                    match x.at_block_hash {
+                        Some(_) => Some(Found::DoNothing),
+                        None => Some(Found::UpdateBlock { in_newer: i }),
+                    }
+                }
+
+                // fetched newer metadata
+                Ordering::Greater => {
+                    let mut remove_from_older = None;
+
+                    // check if there is entry in `older` to be kicked
+                    // altogether
+                    for (j, y) in sorted.older.iter().enumerate() {
+                        if x.meta_values.name == y.meta_values.name {
+                            // found entry in `older` to be removed
+                            remove_from_older = Some(j);
+                            break;
+                        }
+                    }
+                    Some(Found::Replace {
+                        move_from_newer: i,
+                        remove_from_older,
+                    })
+                }
+            };
+            break;
+        }
+    }
+
+    match similar_entries {
+        Some(Found::DoNothing) => Ok(false),
+        Some(Found::Replace {
+            move_from_newer,
+            remove_from_older,
+        }) => {
+            if let Some(j) = remove_from_older {
+                sorted.older.remove(j);
+            }
+            sorted.older.push(sorted.newer.remove(move_from_newer));
+            sorted.newer.push(new.to_owned());
+            Ok(true)
+        }
+        Some(Found::UpdateBlock { in_newer }) => {
+            sorted.newer[in_newer].at_block_hash = new.at_block_hash;
+            Ok(false)
+        }
+        None => {
+            sorted.newer.push(new.to_owned());
+            Ok(true)
+        }
+    }
+}
+
+/// Collect and sort [`MetaValuesStamped`] from the hot database
+pub fn prepare_metadata(database: &sled::Db) -> Result<SortedMetaValues> {
+    let known_metavalues = read_metadata_database(database)?;
+    sort_metavalues(known_metavalues)
+}
+
+/// Update the database after `load-metadata` run.
+///
+/// Clear [`METATREE`] tree of the hot database and write new metadata set in
+/// it.
+///
+/// Update [`META_HISTORY`] tree.
+pub fn db_upd_metadata(database: &sled::Db, sorted_meta_values: SortedMetaValues) -> Result<()> {
+    let mut metadata_batch = make_batch_clear_tree(database, METATREE)?;
+    let mut meta_history_batch = Batch::default();
+    let mut all_meta = sorted_meta_values.newer;
+    all_meta.extend_from_slice(&sorted_meta_values.older);
+    for x in all_meta.iter() {
+        let meta_key = MetaKey::from_parts(&x.meta_values.name, x.meta_values.version);
+        metadata_batch.insert(meta_key.key(), &x.meta_values.meta[..]);
+        if let Some(hash) = x.at_block_hash {
+            meta_history_batch.insert(meta_key.key(), hash.encode());
+        }
+    }
+    TrDbHot::new()
+        .set_metadata(metadata_batch)
+        .set_meta_history(meta_history_batch)
+        .apply(database)?;
+
+    Ok(())
+}
+
+/// Data needed to output `load_metadata` update payload file.
+pub struct MetaShortCut {
+    pub meta_values: MetaValues,
+    pub genesis_hash: H256,
+}
+
+/// Fetched and interpreted data for `load_metadata` payload and database
+/// update.
+pub struct MetaFetched {
+    pub meta_values: MetaValues,
+    pub block_hash: H256,
+    pub genesis_hash: H256,
+}
+
+impl MetaFetched {
+    pub fn stamped(&self) -> MetaValuesStamped {
+        MetaValuesStamped {
+            meta_values: self.meta_values.to_owned(),
+            at_block_hash: Some(self.block_hash),
+        }
+    }
+    pub fn cut(&self) -> MetaShortCut {
+        MetaShortCut {
+            meta_values: self.meta_values.to_owned(),
+            genesis_hash: self.genesis_hash,
+        }
+    }
+}
+
+/// Get network information through RPC calls at `address` and interpret it into
+/// [`MetaFetched`].
+pub fn meta_fetch(address: &str) -> Result<MetaFetched> {
+    let new_info = fetch_info(address)?;
+
+    let genesis_hash = get_hash(
+        &new_info.genesis_hash,
+        Hash::Genesis {
+            url: address.to_string(),
+        },
+    )?;
+    let block_hash = get_hash(
+        &new_info.block_hash,
+        Hash::BlockFetched {
+            url: address.to_string(),
+        },
+    )?;
+    let meta_values = MetaValues::from_str_metadata(&new_info.meta)?;
+    Ok(MetaFetched {
+        meta_values,
+        block_hash,
+        genesis_hash,
+    })
+}
+
+/// Get network metadata file from given URL address at specified block.
+///
+/// For investigating silent metadata update cases.
+///
+/// Inputs `&str` address and hexadecimal `&str` block hash.
+///
+/// Fetched network metadata, processes it, and outputs file
+/// `<network_name><metadata_version>_<block_hash>` with hexadecimal
+/// metadata in [`EXPORT_FOLDER`](constants::EXPORT_FOLDER).
+///
+/// Command line to get metadata at block:
+///
+/// `meta_at_block -u <network_url_address> -block <block_hash>`
+pub fn debug_meta_at_block<P>(address: &str, hex_block_hash: &str, export_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let block_hash = get_hash(hex_block_hash, Hash::BlockEntered)?;
+    let meta_fetched = fetch_meta_at_block(address, block_hash)?;
+    let meta_values = MetaValues::from_str_metadata(&meta_fetched)?;
+    let filename = format!(
+        "{}{}_{}",
+        meta_values.name,
+        meta_values.version,
+        hex::encode(block_hash)
+    );
+    let f_path = export_dir.as_ref().join(filename);
+    std::fs::write(f_path, hex::encode(meta_values.meta))?;
+
+    Ok(())
+}
+
+pub fn generate_key_info_export_to_qr<P: AsRef<Path>>(
+    output_name: P,
+    chunk_size: u16,
+    fps: u16,
+    keys_num: usize,
+) -> Result<()> {
+    use sp_keyring::sr25519::Keyring;
+    use sp_runtime::MultiSigner;
+
+    let multisigner = MultiSigner::from(Keyring::Alice.public());
+    let name = "a very long key name a very long key name".to_owned();
+
+    let derived_keys: Vec<AddrInfo> = (0..keys_num)
+        .map(|num| AddrInfo {
+            address: "0xdeadbeefdeadbeefdeadbeef".to_string(),
+            derivation_path: Some(format!("//this//is//a//path//{num}")),
+            encryption: Encryption::Sr25519,
+            genesis_hash: H256::default(),
+        })
+        .collect();
+
+    let seed_info = SeedInfo {
+        name,
+        multisigner,
+        derived_keys,
+    };
+    let export_addrs_v2 = ExportAddrsV2::new(seed_info);
+    let export_addrs = ExportAddrs::V2(export_addrs_v2);
+
+    let export_addrs_encoded = [&[0x53, 0xff, 0xde], export_addrs.encode().as_slice()].concat();
+
+    generate_qr_code(&export_addrs_encoded, chunk_size, fps, output_name)
+}
+
+/// Generate Bulk Transaction Signing payload for testing
+pub fn generate_bulk_transaction_qr<P: AsRef<Path>>(
+    dst_file: P,
+    tx_count: usize,
+    chunk_size: u16,
+    from: String,
+    output_format: Goal,
+) -> Result<()> {
+    let encoded_transactions = (0..tx_count).map(|_| {
+
+let line = "0102".to_string() + 
+    &from +
+"a80403004adb5312dbd3a1bc28610deb1fb631110bbcccb6e7fb97e18501509d5565ea760b00a014e3322615010000682400000e000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e2faa9938ec10c2627d0fd5d20214aba3bf281e94a6a8f50d19b4e0ce3b253d65e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e";
+        hex::decode(line).unwrap()
+    })
+    .collect();
+    let v1_bulk = TransactionBulkV1 {
+        encoded_transactions,
+    };
+    let bulk = TransactionBulk::V1(v1_bulk);
+
+    let payload = [&[0x53, 0xff, 0x04], bulk.encode().as_slice()].concat();
+
+    match output_format {
+        Goal::Qr => generate_qr_code(&payload, chunk_size, 8, dst_file)?,
+        Goal::Text => std::fs::write(dst_file, hex::encode(payload))?,
+        Goal::Both => todo!(),
+    };
+
+    Ok(())
+}
+
+/// Generate with data into a specified file.
+pub fn generate_qr_code<P: AsRef<Path>>(
+    input: &[u8],
+    chunk_size: u16,
+    fps: u16,
+    output_name: P,
+) -> Result<()> {
+    transform_into_qr_apng(input, chunk_size, fps, output_name).map_err(Error::Qr)
+}
+
+/// Fetch data and assemble [`NetworkSpecs`] with only URL address and
+/// user-entered data.
+///
+/// Database is not addressed. For `-d` content key.
+pub fn specs_agnostic(
+    address: &str,
+    encryption: Encryption,
+    optional_token_override: Option<Token>,
+    optional_signer_title_override: Option<String>,
+) -> Result<NetworkSpecs> {
+    let fetch = common_specs_fetch(address)?;
+
+    // `NetworkProperties` checked and processed
+    let new_properties = interpret_properties(
+        &fetch.properties,
+        fetch.meta_values.optional_base58prefix,
+        optional_token_override,
+    )?;
+
+    let title = optional_signer_title_override.unwrap_or(format!(
+        "{}-{}",
+        fetch.meta_values.name,
+        encryption.show()
+    ));
+
+    // `NetworkSpecs` is constructed with fetched and user-entered values
+    // and with default colors.
+    Ok(NetworkSpecs {
+        base58prefix: new_properties.base58prefix,
+        color: COLOR.to_string(),
+        decimals: new_properties.decimals,
+        encryption,
+        genesis_hash: fetch.genesis_hash,
+        logo: fetch.meta_values.name.to_string(),
+        name: fetch.meta_values.name.to_string(),
+        path_id: format!("//{}", fetch.meta_values.name),
+        secondary_color: SECONDARY_COLOR.to_string(),
+        title,
+        unit: new_properties.unit,
+    })
+}
+
+/// Update [`NetworkSpecs`] already existing in the database with
+/// **exactly same** encryption.
+///
+/// Could be used to overwrite token (if possible for the network) or the Vault
+/// display title. If no title override is used, the title remains as it was.
+///
+/// Output flag indicates if the value has changed, and the database entry
+/// should be updated.
+pub fn update_known_specs(
+    address: &str,
+    specs: &mut NetworkSpecs,
+    optional_signer_title_override: Option<String>,
+    optional_token_override: Option<Token>,
+) -> Result<bool> {
+    let mut update_done = known_specs_processing(address, specs, optional_token_override)?;
+
+    if let Some(title) = optional_signer_title_override {
+        if specs.title != title {
+            specs.title = title;
+            update_done = true;
+        }
+    }
+    Ok(update_done)
+}
+
+/// Modify [`NetworkSpecs`] existing in the database **only** with
+/// different encryption.
+///
+/// New data always will be added to the database unless errors occur.
+///
+/// Function inputs:
+///
+/// - `&str` address to make RPC calls
+/// - `NetworkSpecs` as they were found in the database, to be modified
+/// here
+/// - new `Encryption` to apply to `encryption` and `title` (if no title
+/// override was entered) fields of the `NetworkSpecs`
+/// - optional title override
+/// - optional token override
+pub fn update_modify_encryption_specs(
+    address: &str,
+    specs: &mut NetworkSpecs,
+    encryption: &Encryption,
+    optional_signer_title_override: Option<String>,
+    optional_token_override: Option<Token>,
+) -> Result<()> {
+    known_specs_processing(address, specs, optional_token_override)?;
+
+    specs.title =
+        optional_signer_title_override.unwrap_or(format!("{}-{}", specs.name, encryption.show()));
+
+    specs.encryption = encryption.to_owned();
+
+    Ok(())
+}
+
+/// `add_specs` payload data, after processing similar for entirely new and
+/// partially known data.
+///
+/// Metadata and genesis hash are interpreted, properties remain raw.
+struct CommonSpecsFetch {
+    genesis_hash: H256,
+    meta_values: MetaValues,
+    properties: Map<String, Value>,
+}
+
+/// Fetch `add_specs` update payload data, process metadata and genesis hash.
+///
+/// Processing of propertoes depends on what is done to the fetch results and
+/// the contents of the database.
+fn common_specs_fetch(address: &str) -> Result<CommonSpecsFetch> {
+    // actual fetch
+    let new_info = fetch_info_with_network_specs(address)?;
+
+    // genesis hash in proper format
+    let genesis_hash = get_hash(
+        &new_info.genesis_hash,
+        Hash::Genesis {
+            url: address.to_string(),
+        },
+    )?;
+
+    // `MetaValues` are needed to get network name and (optionally) base58
+    // prefix
+    let meta_values = MetaValues::from_str_metadata(&new_info.meta)?;
+
+    Ok(CommonSpecsFetch {
+        genesis_hash,
+        meta_values,
+        properties: new_info.properties,
+    })
+}
+
+/// Check known [`NetworkSpecs`] with network data fetched and apply token
+/// override.
+///
+/// This is a helper function for `add-specs` runs with `-n` reference key, i.e.
+/// for cases when *some* network specs entry already exists in the database.
+///
+/// Input [`NetworkSpecs`] is the entry from the database to which the
+/// encryption and title overrides could be applied.
+///
+/// Function inputs `address` at which RPC calls are made, network specs
+/// `NetworkSpecs` from the database, and user-entered optional override
+/// for `Token`.
+///
+/// Output is flag indicating if the network specs have been changed. This flag
+/// would be needed only in case the encryption is not modified outside of this
+/// function.
+fn known_specs_processing(
+    address: &str,
+    specs: &mut NetworkSpecs,
+    optional_token_override: Option<Token>,
+) -> Result<bool> {
+    let mut update_done = false;
+    let url = address.to_string();
+
+    let fetch = common_specs_fetch(address)?;
+
+    let (base58prefix, token_fetch) =
+        check_specs(&fetch.properties, fetch.meta_values.optional_base58prefix)?;
+
+    // check that base58 prefix did not change
+    if specs.base58prefix != base58prefix {
+        return Err(Error::ValuesChanged {
+            url,
+            what: Changed::Base58Prefix {
+                old: specs.base58prefix,
+                new: base58prefix,
+            },
+        });
+    }
+
+    // check that genesis hash did not change
+    if specs.genesis_hash != fetch.genesis_hash {
+        return Err(Error::ValuesChanged {
+            url,
+            what: Changed::GenesisHash {
+                old: specs.genesis_hash,
+                new: fetch.genesis_hash,
+            },
+        });
+    }
+
+    // check that name did not change
+    if specs.name != fetch.meta_values.name {
+        return Err(Error::ValuesChanged {
+            url,
+            what: Changed::Name {
+                old: specs.name.to_string(),
+                new: fetch.meta_values.name,
+            },
+        });
+    }
+
+    // check that token did not change or could be overridden
+    match token_fetch {
+        // single token, no override was or is possible, must match
+        TokenFetch::Single(token) => {
+            // check that decimals value did not change
+            if specs.decimals != token.decimals {
+                return Err(Error::ValuesChanged {
+                    url,
+                    what: Changed::Decimals {
+                        old: specs.decimals,
+                        new: token.decimals,
+                    },
+                });
+            }
+
+            // check that unit did not change
+            if specs.unit != token.unit {
+                return Err(Error::ValuesChanged {
+                    url,
+                    what: Changed::Unit {
+                        old: specs.unit.to_string(),
+                        new: token.unit,
+                    },
+                });
+            }
+
+            // override is not allowed
+            if optional_token_override.is_some() {
+                return Err(Error::FaultySpecs {
+                    url,
+                    error: SpecsError::OverrideIgnoredSingle,
+                });
+            }
+        }
+        TokenFetch::Array { .. } => {
+            // override is allowed
+            if let Some(token) = optional_token_override {
+                if specs.decimals != token.decimals {
+                    specs.decimals = token.decimals;
+                    update_done = true;
+                }
+                if specs.unit != token.unit {
+                    specs.unit = token.unit;
+                    update_done = true;
+                }
+            }
+        }
+        TokenFetch::None => {
+            // only decimals `0` possible, check that decimals value did not
+            // change
+            if specs.decimals != 0 {
+                return Err(Error::ValuesChanged {
+                    url,
+                    what: Changed::DecimalsBecameNone {
+                        old: specs.decimals,
+                    },
+                });
+            }
+
+            // only unit `UNIT` possible, check that unit did not change
+            if specs.unit != "UNIT" {
+                return Err(Error::ValuesChanged {
+                    url,
+                    what: Changed::UnitBecameNone {
+                        old: specs.unit.to_string(),
+                    },
+                });
+            }
+
+            // override is not allowed
+            if optional_token_override.is_some() {
+                return Err(Error::FaultySpecs {
+                    url,
+                    error: SpecsError::OverrideIgnoredNone,
+                });
+            }
+        }
+    }
+
+    Ok(update_done)
+}
+
+/// The type of hash processed. Determines the error.
+enum Hash {
+    BlockEntered,
+    BlockFetched { url: String },
+    Genesis { url: String },
+}
+
+/// Transform hash from hexadecimal string into `H256` format
+///
+/// Inputs hexadecimal `input_hash` and hash type/source `Hash` (used to
+/// produce error in case the `input_hash` format is incorrect).
+fn get_hash(input_hash: &str, what: Hash) -> Result<H256> {
+    let _not_hex = match what {
+        Hash::BlockEntered => NotHexActive::EnteredBlock,
+        Hash::BlockFetched { ref url } => NotHexActive::FetchedBlock {
+            url: url.to_string(),
+        },
+        Hash::Genesis { ref url } => NotHexActive::FetchedGenesis {
+            url: url.to_string(),
+        },
+    };
+    let hash_vec = unhex(input_hash)?;
+    let out: [u8; 32] = match hash_vec.try_into() {
+        Ok(a) => a,
+        Err(_) => {
+            return match what {
+                Hash::BlockEntered => Err(Error::BlockHashLength),
+                Hash::BlockFetched { url: _ } => Err(Error::UnexpectedFetchedBlockHashFormat {
+                    value: input_hash.to_string(),
+                }),
+                Hash::Genesis { url: _ } => Err(Error::UnexpectedFetchedGenesisHashFormat {
+                    value: input_hash.to_string(),
+                }),
+            }
+        }
+    };
+    Ok(out.into())
+}
+
+/// Write to file `load_metadata` update payload as raw bytes.
+///
+/// Resulting file, located in dedicated [`FOLDER`](constants::FOLDER), could be
+/// used to generate data signature and to produce updates.
+pub fn load_metadata_print<P>(shortcut: &MetaShortCut, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let file_name = format!(
+        "sign_me_load_metadata_{}V{}",
+        shortcut.meta_values.name, shortcut.meta_values.version
+    );
+    let file_path = files_dir.as_ref().join(file_name);
+    let content = ContentLoadMeta::generate(&shortcut.meta_values.meta, &shortcut.genesis_hash);
+    content.write(file_path)?;
+    Ok(())
+}
+
+/// Write to file `add_specs` update payload as raw bytes.
+///
+/// Resulting file, located in dedicated directory (by default, [`FOLDER`](constants::FOLDER)), could be
+/// used to generate data signature and to produce updates.
+pub fn add_specs_print<P>(network_specs: &NetworkSpecs, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let file_name = format!(
+        "sign_me_add_specs_{}_{}",
+        network_specs.name,
+        network_specs.encryption.show()
+    );
+    let file_path = files_dir.as_ref().join(file_name);
+    let content = ContentAddSpecs::generate(network_specs);
+    content.write(file_path)?;
+    Ok(())
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/interpret_specs.rs.html b/rustdocs/src/generate_message/interpret_specs.rs.html new file mode 100644 index 0000000000..52bc9328b6 --- /dev/null +++ b/rustdocs/src/generate_message/interpret_specs.rs.html @@ -0,0 +1,1229 @@ +interpret_specs.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+
//! Fit network properties fetched via RPC call into data in expected format
+//!
+//! Fetched network properties contain data needed to make
+//! [`NetworkSpecs`](definitions::network_specs::NetworkSpecs), used
+//! in [`ContentAddSpecs`](definitions::qr_transfers::ContentAddSpecs) payload.
+//!
+//! Network properties may contain:
+//!
+//! - base58 prefix for the network (to be fit into `u16`)
+//! - decimals to display balance-related values with correct order of magnitude
+//! (to be fit into `u8`)
+//! - unit to display balance-related values with correct units (to be fit into
+//! `String`)
+//!
+//! There could be base58 prefix information in network metadata. If base58
+//! prefix is fetched via `system_properties` RPC call and the metadata contains
+//! `SS58Prefix` constant, they must be matching for the network to be
+//! suitable for use in the Vault. If no base58 prefix is encountered at all,
+//! network is not suitable for use in Vault either.
+//!
+//! Some networks support more than one token, in this case RPC returns an array
+//! of decimals and an array of units, that must have equal length. No mechanism
+//! to automatically choose a token from the fetched set is currently present.
+//!
+//! Some other networks have no token at all.
+//!
+//! For networks with token set or no token, decimals default to `0` and units
+//! default to `UNIT`. For networks with token set there could be a token
+//! override applied by user in command line sequence, to set the decimals and
+//! units manually. Token override is not supported for networks that have a
+//! single token or no token.
+//!
+//! Command line with token override:
+//!
+//! `$ cargo run add-specs -d -u <url_address> --encryption sr25519 --token-decimals <decimals> --token-unit <unit>`
+use definitions::network_specs::NetworkProperties;
+use serde_json::{map::Map, value::Value};
+use std::convert::TryInto;
+
+use crate::error::{Result, SpecsError};
+use crate::parser::Token;
+
+/// Transform `system_properties` RPC call results into [`NetworkProperties`].
+///
+/// This function is only used if the network properties are used as is, i.e.
+/// without checking with existing database entries.
+///
+/// Function inputs:
+///
+/// - `&Map<String, Value>` received via `system_properties` RPC call,
+/// - optional base58 prefix from the network metadata
+/// - optional token override to be applied if allowed
+pub fn interpret_properties(
+    x: &Map<String, Value>,
+    optional_prefix_from_meta: Option<u16>,
+    optional_token_override: Option<Token>,
+) -> Result<NetworkProperties> {
+    let base58prefix = base58prefix(x, optional_prefix_from_meta)?;
+
+    let (decimals, unit) = match token(x)? {
+        TokenFetch::Single(token) => {
+            // single unit value and single decimals value, override impossible
+            if optional_token_override.is_some() {
+                Err(SpecsError::OverrideIgnoredSingle)?;
+            }
+            (token.decimals, token.unit)
+        }
+        TokenFetch::Array { decimals, unit } => {
+            if let Some(token_override) = optional_token_override {
+                // token override possible and invoked by the user
+                println!("Network supports several tokens. An array of tokenDecimals {} and an array of tokenSymbol {} were fetched. Through override, the decimals value will be set to {} and unit value will be set to {}. To improve this behavior, please file a ticket.", decimals, unit, token_override.decimals, token_override.unit);
+                (token_override.decimals, token_override.unit)
+            } else {
+                // token override is possible, but not called for by the user
+                println!("Network supports several tokens. An array of tokenDecimals {decimals} and an array of tokenSymbol {unit} were fetched. By default, decimals value will be set to 0, and unit value will be set to UNIT. To override, use --token-decimals <value_decimals> --token-unit <value_unit>. To improve this behavior, please file a ticket.");
+                (0, String::from("UNIT"))
+            }
+        }
+        TokenFetch::None => {
+            // override impossible
+            if optional_token_override.is_some() {
+                Err(SpecsError::OverrideIgnoredNone)?;
+            }
+            println!("Network has no token. By default, decimals value will be set to 0, and unit value will be set to UNIT. To improve this behavior, please file a ticket.");
+            (0, String::from("UNIT"))
+        }
+    };
+    Ok(NetworkProperties {
+        base58prefix,
+        decimals,
+        unit,
+    })
+}
+
+/// Process base58 prefix
+///
+/// Function inputs:
+///
+/// - `&Map<String, Value>` received via `system_properties` RPC call,
+/// - optional base58 prefix from the network metadata
+fn base58prefix(x: &Map<String, Value>, optional_prefix_from_meta: Option<u16>) -> Result<u16> {
+    let base58prefix: u16 = match x.get("ss58Format") {
+        // base58 prefix is fetched in `system_properties` RPC call
+        Some(a) => match a {
+            // base58 prefix value is a number
+            Value::Number(b) => match b.as_u64() {
+                // number is integer and could be represented as `u64` (the only
+                // suitable interpretation available for `Number`)
+                Some(c) => match c.try_into() {
+                    // this `u64` fits into `u16` that base58 prefix is supposed
+                    // to be
+                    Ok(d) => match optional_prefix_from_meta {
+                        // base58 prefix was found in `SS58Prefix` constant of
+                        // the network metadata
+                        //
+                        // check that the prefixes match
+                        Some(prefix_from_meta) => {
+                            if prefix_from_meta == d {
+                                d
+                            } else {
+                                Err(SpecsError::Base58PrefixMismatch {
+                                    specs: d,
+                                    meta: prefix_from_meta,
+                                })?
+                            }
+                        }
+
+                        // no base58 prefix was found in the network metadata
+                        None => d,
+                    },
+
+                    // `u64` value does not fit into `u16` base58 prefix format,
+                    // this is an error
+                    Err(_) => Err(SpecsError::Base58PrefixFormatNotSupported {
+                        value: a.to_string(),
+                    })?,
+                },
+
+                // base58 prefix value could not be presented as `u64` number,
+                // this is an error
+                None => Err(SpecsError::Base58PrefixFormatNotSupported {
+                    value: a.to_string(),
+                })?,
+            },
+
+            // base58 prefix value is not a number, this is an error
+            _ => Err(SpecsError::Base58PrefixFormatNotSupported {
+                value: a.to_string(),
+            })?,
+        },
+
+        // no base58 prefix fetched in `system_properties` RPC call
+        None => match optional_prefix_from_meta {
+            // base58 prefix was found in `SS58Prefix` constant of the network
+            // metadata
+            Some(prefix_from_meta) => prefix_from_meta,
+
+            // no base58 prefix at all, this is an error
+            None => return Err(SpecsError::NoBase58Prefix)?,
+        },
+    };
+    Ok(base58prefix)
+}
+
+/// Accepted token from `system_properties` RPC call
+pub enum TokenFetch {
+    /// Single decimals parameter and single unit.
+    Single(Token),
+
+    /// Equal size arrays for decimals and units.
+    ///
+    /// Token override could be applied.
+    Array { decimals: String, unit: String },
+
+    /// No decimals and no unit.
+    None,
+}
+
+/// Interpreted decimals
+enum DecimalsFetch {
+    /// Single decimals parameter.
+    Single(u8),
+
+    /// Decimals array.
+    ///
+    /// Associated data is printed array to display to user and array size.
+    Array(String, usize),
+
+    /// No decimals.
+    None,
+}
+
+/// Interpreted unit
+enum UnitFetch {
+    /// Single unit parameter.
+    Single(String),
+
+    /// Units array.
+    ///
+    /// Associated data is printed array to display to user and array size.
+    Array(String, usize),
+
+    /// No unit.
+    None,
+}
+
+/// Process decimals
+///
+/// Function inputs only `&Map<String, Value>` received via `system_properties`
+/// RPC call.
+fn decimals(x: &Map<String, Value>) -> Result<DecimalsFetch> {
+    match x.get("tokenDecimals") {
+        // decimals info is fetched in `system_properties` RPC call
+        Some(a) => match a {
+            // fetched decimals value is a number
+            Value::Number(b) => match b.as_u64() {
+                // number is integer and could be represented as `u64` (the only
+                // suitable interpretation available for `Number`)
+                Some(c) => match c.try_into() {
+                    // this `u64` fits into `u8` that decimals is supposed to be
+                    Ok(d) => Ok(DecimalsFetch::Single(d)),
+
+                    // this `u64` does not fit into `u8`, this is an error
+                    Err(_) => Err(SpecsError::DecimalsFormatNotSupported {
+                        value: a.to_string(),
+                    })?,
+                },
+
+                // number could not be represented as `u64`, this is an error
+                None => Err(SpecsError::DecimalsFormatNotSupported {
+                    value: a.to_string(),
+                })?,
+            },
+
+            // fetched decimals is an array
+            Value::Array(b) => {
+                // array with only one element
+                if b.len() == 1 {
+                    // this element is a number, process same as
+                    // `Value::Number(_)`
+                    if let Value::Number(c) = &b[0] {
+                        match c.as_u64() {
+                            // number is integer and could be represented as
+                            // `u64` (the only suitable interpretation available
+                            // for `Number`)
+                            Some(d) => match d.try_into() {
+                                // this `u64` fits into `u8` that decimals is
+                                // supposed to be
+                                Ok(f) => Ok(DecimalsFetch::Single(f)),
+
+                                // this `u64` does not fit into `u8`, this is an
+                                // error
+                                Err(_) => Err(SpecsError::DecimalsFormatNotSupported {
+                                    value: a.to_string(),
+                                })?,
+                            },
+
+                            // number could not be represented as `u64`, this is
+                            // an error
+                            None => Err(SpecsError::DecimalsFormatNotSupported {
+                                value: a.to_string(),
+                            })?,
+                        }
+                    } else {
+                        // element is not a number, this is an error
+                        Err(SpecsError::DecimalsFormatNotSupported {
+                            value: a.to_string(),
+                        })?
+                    }
+                } else {
+                    // decimals are an array with more than one element
+                    Ok(DecimalsFetch::Array(a.to_string(), b.len()))
+                }
+            }
+
+            // same as missing decimals
+            Value::Null => Ok(DecimalsFetch::None),
+
+            // unexpected decimals format
+            _ => Err(SpecsError::DecimalsFormatNotSupported {
+                value: a.to_string(),
+            })?,
+        },
+
+        // decimals are missing
+        None => Ok(DecimalsFetch::None),
+    }
+}
+
+/// Process unit
+///
+/// Function inputs only `&Map<String, Value>` received via `system_properties`
+/// RPC call.
+fn unit(x: &Map<String, Value>) -> Result<UnitFetch> {
+    match x.get("tokenSymbol") {
+        // unit info is fetched in `system_properties` RPC call
+        Some(a) => match a {
+            // fetched unit value is a `String`
+            Value::String(b) => {
+                // definitive unit found
+                Ok(UnitFetch::Single(b.to_string()))
+            }
+
+            // fetched an array of units
+            Value::Array(b) => {
+                // array with a single element
+                if b.len() == 1 {
+                    // single `String` element array, process same as `String`
+                    if let Value::String(c) = &b[0] {
+                        // definitive unit found
+                        Ok(UnitFetch::Single(c.to_string()))
+                    } else {
+                        // element is not a `String`, this is an error
+                        Err(SpecsError::DecimalsFormatNotSupported {
+                            value: a.to_string(),
+                        })?
+                    }
+                } else {
+                    // units are an array with more than one element
+                    Ok(UnitFetch::Array(a.to_string(), b.len()))
+                }
+            }
+
+            // same as missing unit
+            Value::Null => Ok(UnitFetch::None),
+
+            // unexpected unit format
+            _ => Err(SpecsError::UnitFormatNotSupported {
+                value: a.to_string(),
+            })?,
+        },
+
+        // unit missing
+        None => Ok(UnitFetch::None),
+    }
+}
+
+/// Combine decimals and unit information
+fn token(x: &Map<String, Value>) -> Result<TokenFetch> {
+    let decimals_fetch = decimals(x)?;
+    let unit_fetch = unit(x)?;
+
+    match decimals_fetch {
+        DecimalsFetch::Single(decimals) => match unit_fetch {
+            UnitFetch::Single(unit) => Ok(TokenFetch::Single(Token { decimals, unit })),
+            UnitFetch::Array(..) => Err(SpecsError::UnitsArrayDecimalsNot)?,
+            UnitFetch::None => Err(SpecsError::DecimalsNoUnit(decimals.to_string()))?,
+        },
+        DecimalsFetch::Array(decimals, decimals_array_size) => match unit_fetch {
+            UnitFetch::Single(_) => Err(SpecsError::DecimalsArrayUnitsNot)?,
+            UnitFetch::Array(unit, unit_array_size) => {
+                if decimals_array_size != unit_array_size {
+                    Err(SpecsError::DecimalsUnitsArrayLength { decimals, unit })?
+                } else {
+                    Ok(TokenFetch::Array { decimals, unit })
+                }
+            }
+            UnitFetch::None => Err(SpecsError::DecimalsNoUnit(decimals))?,
+        },
+        DecimalsFetch::None => match unit_fetch {
+            UnitFetch::Single(unit) => Err(SpecsError::UnitNoDecimals(unit))?,
+            UnitFetch::Array(unit, _) => Err(SpecsError::UnitNoDecimals(unit))?,
+            UnitFetch::None => Ok(TokenFetch::None),
+        },
+    }
+}
+
+/// Get from `system_properties` RPC call results the network data to be
+/// compared with already known data.
+///
+/// This function is used if the fetch results are used to check already
+/// existing database entry.
+///
+/// Function inputs:
+///
+/// - `&Map<String, Value>` received via `system_properties` RPC call,
+/// - optional base58 prefix from the network metadata
+///
+/// Function outputs:
+///
+/// - network base58 prefix
+/// - [`TokenFetch`]
+pub fn check_specs(
+    x: &Map<String, Value>,
+    optional_prefix_from_meta: Option<u16>,
+) -> Result<(u16, TokenFetch)> {
+    let base58prefix = base58prefix(x, optional_prefix_from_meta)?;
+    let token_fetch = token(x)?;
+    Ok((base58prefix, token_fetch))
+}
+
+#[cfg(test)]
+mod tests {
+    use crate::Error;
+
+    use super::*;
+    use serde_json::json;
+    #[test]
+    /// Good network properties
+    fn map1() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!(12u8));
+        mock_map.insert("tokenSymbol".to_string(), Value::String("WND".to_string()));
+        let properties_maybe = interpret_properties(&mock_map, None, None);
+        assert!(
+            properties_maybe.is_ok(),
+            "Error getting mock specs:\n{:?}",
+            properties_maybe.unwrap_err()
+        );
+    }
+
+    #[test]
+    /// Mismatch in base58 prefix
+    fn map2() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!(12u8));
+        mock_map.insert("tokenSymbol".to_string(), Value::String("WND".to_string()));
+        let properties_error = interpret_properties(&mock_map, Some(24u16), None).unwrap_err();
+        if let Error::Specs(SpecsError::Base58PrefixMismatch {
+            specs: 42,
+            meta: 24,
+        }) = properties_error
+        {
+        } else {
+            panic!("Wrong error in mock specs:\n{:?}", properties_error);
+        }
+    }
+
+    #[test]
+    /// Can not override token for case when single token is fetched
+    fn map3() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!(12u8));
+        mock_map.insert("tokenSymbol".to_string(), Value::String("WND".to_string()));
+        let properties_error = interpret_properties(
+            &mock_map,
+            None,
+            Some(Token {
+                decimals: 12,
+                unit: "WND".to_string(),
+            }),
+        )
+        .unwrap_err();
+        if let Error::Specs(SpecsError::OverrideIgnoredSingle) = properties_error {
+        } else {
+            panic!("Wrong error in mock specs:\n{:?}", properties_error);
+        }
+    }
+
+    #[test]
+    /// Token array, equal length
+    fn map4() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!([8u8, 10u8]));
+        mock_map.insert(
+            "tokenSymbol".to_string(),
+            json!(["WND".to_string(), "NWND".to_string()]),
+        );
+        let properties_maybe = interpret_properties(&mock_map, None, None);
+        assert!(
+            properties_maybe.is_ok(),
+            "Error getting mock specs:\n{:?}",
+            properties_maybe.unwrap_err()
+        );
+        let properties = properties_maybe.unwrap();
+        assert!(
+            properties.decimals == 0,
+            "Wrong decimals, got: {}",
+            properties.decimals
+        );
+        assert!(
+            properties.unit == "UNIT",
+            "Wrong unit, got: {}",
+            properties.unit
+        );
+    }
+
+    #[test]
+    /// Can override token for case when array of equal length is fetched
+    ///
+    /// Override not necessarily matches whatever was offered initially.
+    fn map5() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!([8u8, 10u8]));
+        mock_map.insert(
+            "tokenSymbol".to_string(),
+            json!(["WND".to_string(), "NWND".to_string()]),
+        );
+        let properties_maybe = interpret_properties(
+            &mock_map,
+            None,
+            Some(Token {
+                decimals: 12,
+                unit: "WND".to_string(),
+            }),
+        );
+        assert!(
+            properties_maybe.is_ok(),
+            "Error getting mock specs:\n{:?}",
+            properties_maybe.unwrap_err()
+        );
+        let properties = properties_maybe.unwrap();
+        assert!(
+            properties.decimals == 12,
+            "Wrong decimals, got: {}",
+            properties.decimals
+        );
+        assert!(
+            properties.unit == "WND",
+            "Wrong unit, got: {}",
+            properties.unit
+        );
+    }
+
+    #[test]
+    /// Decimals value is array with single entry, unit is normal entry
+    fn map6() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!([8u8]));
+        mock_map.insert("tokenSymbol".to_string(), Value::String("WND".to_string()));
+        let properties_maybe = interpret_properties(&mock_map, None, None);
+        assert!(
+            properties_maybe.is_ok(),
+            "Error getting mock specs:\n{:?}",
+            properties_maybe.unwrap_err()
+        );
+    }
+
+    #[test]
+    /// Decimals value is normal entry, unit is array with single entry
+    fn map7() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!(8u8));
+        mock_map.insert("tokenSymbol".to_string(), json!(["WND".to_string()]));
+        let properties_maybe = interpret_properties(&mock_map, None, None);
+        assert!(
+            properties_maybe.is_ok(),
+            "Error getting mock specs:\n{:?}",
+            properties_maybe.unwrap_err()
+        );
+    }
+
+    #[test]
+    /// Fetched decimals array and units array, with different length
+    fn map8() {
+        let mut mock_map = Map::with_capacity(3);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        mock_map.insert("tokenDecimals".to_string(), json!([8u8, 8u8]));
+        mock_map.insert(
+            "tokenSymbol".to_string(),
+            json!(["Unknown".to_string(), "WND".to_string(), "NWND".to_string()]),
+        );
+        let properties_error = interpret_properties(&mock_map, None, None).unwrap_err();
+        if let Error::Specs(SpecsError::DecimalsUnitsArrayLength { decimals, unit }) =
+            properties_error
+        {
+            assert_eq!(decimals, "[8,8]");
+            assert_eq!(unit, "[\"Unknown\",\"WND\",\"NWND\"]");
+        } else {
+            panic!("Wrong error in mock specs:\n{:?}", properties_error);
+        }
+    }
+
+    #[test]
+    /// No decimals and no units
+    fn map9() {
+        let mut mock_map = Map::with_capacity(1);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        let properties_maybe = interpret_properties(&mock_map, None, None);
+        assert!(
+            properties_maybe.is_ok(),
+            "Error getting mock specs:\n{:?}",
+            properties_maybe.unwrap_err()
+        );
+        let properties = properties_maybe.unwrap();
+        assert!(
+            properties.decimals == 0,
+            "Wrong decimals, got: {}",
+            properties.decimals
+        );
+        assert!(
+            properties.unit == "UNIT",
+            "Wrong unit, got: {}",
+            properties.unit
+        );
+    }
+
+    #[test]
+    /// No decimals and no units, try override
+    fn map10() {
+        let mut mock_map = Map::with_capacity(1);
+        mock_map.insert("ss58Format".to_string(), json!(42u16));
+        let properties_error = interpret_properties(
+            &mock_map,
+            None,
+            Some(Token {
+                decimals: 12,
+                unit: "WND".to_string(),
+            }),
+        )
+        .unwrap_err();
+        if let Error::Specs(SpecsError::OverrideIgnoredNone) = properties_error {
+        } else {
+            panic!("Wrong error in mock specs:\n{:?}", properties_error);
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/lib.rs.html b/rustdocs/src/generate_message/lib.rs.html new file mode 100644 index 0000000000..0d15980027 --- /dev/null +++ b/rustdocs/src/generate_message/lib.rs.html @@ -0,0 +1,2277 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+
//! This crate is intended to support the
+//! [Vault](https://github.com/paritytech/parity-signer) from the active
+//! (non air-gapped) side.
+//!
+//! This crate is mainly used to:
+//!
+//! - fetch network data through RPC calls
+//! - prepare Vault update and derivation import payloads
+//! - generate Vault update QR codes, either signed or unsigned, and
+//! derivations import QR codes, to be scanned into Vault
+//! - maintain the `hot` database on the network-connected device, to store and
+//! manage the data that went into update QR codes
+//! - maintain Vault default network metadata set in `defaults` crate and
+//! prepare the `cold` database for the Vault release
+//!
+//! # Supported Vault updates
+//!
+//! Crate `generate_message` can generate and the Vault can accept following
+//! updates:
+//!
+//! - `add-specs`, to add a new network (i.e. the network specs) into the Vault
+//! - `load-metadata`, to load into the Vault the network metadata, for
+//! networks that already have corresponding network specs entry in the Vault
+//! database
+//! - `load-types`, to load types information (it is used to support the
+//! transactions parsing in networks with legacy metadata, `RuntimeMetadata`
+//! version below `V14`)
+//!
+//! Updates are assembled as `Vec<u8>` and could be transformed into:
+//!
+//! - `PNG` QR codes, static or dynamic multiframe depending on the data size
+//! - hex-encoded string (for tests)
+//!
+//! Information in `add-specs`, `load-metadata` and `load-types` could be either
+//! signed or unsigned. Using signed updates is strongly encouraged.
+//!
+//! Update has following general structure:
+//!
+//! <table>
+//!     <tr>
+//!         <td>prelude <code>[0x53, 0x<encryption code>, 0x<payload code>]</code></td>
+//!         <td>verifier public key (if signed)</td>
+//!         <td>update payload</td>
+//!         <td>signature (if signed)</td>
+//!         <td>reserved tail, currently empty</td>
+//!     </tr>
+//! </table>
+//!
+//! `<encryption code>` indicates encryption algorithm that was used
+//! to sign the update:
+//!
+//! <table>
+//!     <tr>
+//!         <td><code>0x00</code></td>
+//!         <td>Ed25519</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>0x01</code></td>
+//!         <td>Sr25519</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>0x02</code></td>
+//!         <td>Ecdsa</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>0xff</code></td>
+//!         <td>unsigned</td>
+//!     </tr>
+//! </table>
+//!
+//! Update payloads content is described in [definitions::qr_transfers].
+//!
+//! <table>
+//!     <tr>
+//!         <th>update payload</th>
+//!         <th>update content type</th>
+//!         <th>data signed, <code>to_sign</code> form</th>
+//!         <th>data in payload, <code>to_transfer</code> form</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>add_specs</code></td>
+//!         <td><code>ContentAddSpecs</code></td>
+//!         <td>SCALE encoded <code>NetworkSpecs</code></td>
+//!         <td>double SCALE encoded <code>NetworkSpecs</code></td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>load_metadata</code></td>
+//!         <td><code>ContentLoadMeta</code></td>
+//!         <td>concatenated SCALE encoded metadata vector and network genesis hash</td>
+//!         <td>concatenated SCALE encoded metadata vector and network genesis hash</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>load_types</code></td>
+//!         <td><code>ContentLoadTypes</code></td>
+//!         <td>SCALE encoded <code>Vec&ltTypeEntry&gt</code></td>
+//!         <td>double SCALE encoded <code>Vec&ltTypeEntry&gt</code></td>
+//!     </tr>
+//! </table>
+//!
+//! Note that the update payloads are build in such a way that the length of
+//! the payload always could be easily found, thus allowing to separate update
+//! payload, signature and reserved tail in Vault when accepting the update.
+//! The tail is reserved to future-proof the updates if the multi-signing is
+//! ever implemented for them. Currently the tail is empty.
+//!
+//! # Updates generation
+//!
+//! Updates are generated in following stages:
+//!
+//! 1. make update payload
+//! 2. (optional) make signature for update payload
+//! 3. make update QR code (optionally signed), that could be scanned into
+//! Vault
+//!
+//! Steps (1) and (3) are done in `generate_message`, the signature is produced
+//! in other tools, except the test "signed" updates with Alice as a verifier,
+//! when the signature is produced while making QR code during step (3).
+//!
+//! Signature could be produced with Subkey or with Vault. For update signing
+//! it is recommended to use a dedicated key, not used for transactions. This
+//! way, if the signed data was not really the update data, but something else
+//! posing as the update data, the signature produced could not do any damage.
+//!
+//! If the Vault is used to produce the signature, it should be a dedicated
+//! Vault with no verifier or weak key verifier for the network: before the
+//! signature is produced, an unsigned or easily signed update must be loaded
+//! into Vault.
+//!
+//! # Available commands
+//!
+//! ## Display content of the metadata `METATREE` tree of the hot database
+//!
+//! `$ cargo run show metadata`
+//!
+//! Prints for each entry in hot database [`METATREE`](constants::METATREE)
+//! tree:
+//!
+//! - network name
+//! - network metadata version
+//! - hexadecimal metadata hash
+//! - hexadecimal block hash for the block at which the metadata was fetched
+//!
+//! Note that for each network a maximum of 2 metadata entries is stored in the
+//! hot database at any time.
+//!
+//! ## Display content of the address book `ADDRESS_BOOK` tree of the hot database
+//!
+//! `$ cargo run show networks`
+//!
+//! Prints for each entry in hot database
+//! [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree:
+//!
+//! - address book title for the network `<network_name>-<network_encryption>`,
+//! used only to distinguish between address book entries
+//! - URL address at which RPC calls are made for the network
+//! - network encryption
+//! - additional marker that the network is a default one, i.e. entry has not
+//! changed since the database generation
+//! - network title as it will be displayed in Vault, from
+//! [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+//!
+//! ## Show network specs for a network, as recorded in the hot database
+//!
+//! `$ cargo run show specs <ADDRESS BOOK TITLE>`
+//!
+//! Prints network address book title and corresponding
+//! [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+//! from [`SPECSTREEPREP`](constants::SPECSTREEPREP) tree of the hot
+//! database.
+//!
+//! ### Example
+//!
+//! `$ cargo run show specs westend-sr25519`
+//!
+//! ## Check external file with hex-encoded metadata
+//!
+//! `$ cargo run show check-file <METADATA FILE>`
+//!
+//! Asserts that:
+//!
+//! - the file contains valid metadata, with retrievable network name and
+//! version
+//! - if the metadata for same network name and version is in the hot
+//! database, it completely matches the one from the file
+//!
+//! ### Example
+//!
+//! `$ cargo run show check-file "../defaults/release_metadata/kusama9230"`
+//!
+//! ## Show metadata fetch block history from `META_HISTORY` tree of the hot database
+//!
+//! `$ cargo run show block-history`
+//!
+//! Prints block hashes at which the network metadata was fetched as it first
+//! got in the database. If the metadata is from `.wasm` file, there is no entry
+//! until a proper metadata fetch from a node is done with some associated block
+//! hash.
+//!
+//! [`META_HISTORY`](constants::META_HISTORY) tree stores all block hashes that
+//! were ever encountered on successful new metadata fetch, and clears only on
+//! the database reset.
+//!
+//! Block hashes could be useful should silent metadata updates (metadata change
+//! with no version bump) happen again.
+//!
+//! ## Prepare `add_specs` update payload
+//!
+//! `$ cargo run add-specs [OPTIONS] <-d|-f|-k|-p|-t> <--all|--name <NAME>|--url <ADDRESS>>`
+//!
+//! A file is generated in dedicated [`FOLDER`](constants::FOLDER) to
+//! (optionally) be signed and later be transformed into `add_specs` update
+//! QR. Output file name is `sign_me_add_specs_<network_name>_<encryption>`.
+//!
+//! Setting keys that could be used in command line (maximum one):
+//!
+//! - `-d`: do **not** update the database, make RPC calls, and produce
+//! output files
+//! - `-f`: do **not** run RPC calls, produce output files using data already in
+//! the database
+//! - `-p`: update or check database through RPC calls, do **not** produce any
+//! output files
+//! - `-t` (no setting key defaults here): update or check database through RPC
+//! calls, produce output files
+//!
+//! <table>
+//!     <tr>
+//!         <th>setting key</th>
+//!         <th>hot database update</th>
+//!         <th>RPC calls</th>
+//!         <th>output update payload</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-d</code></td>
+//!         <td>-</td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-f</code></td>
+//!         <td>-</td>
+//!         <td>-</td>
+//!         <td>+</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-p</code></td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!         <td>-</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-t</code></td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!     </tr>
+//! </table>
+//!
+//! Reference keys (exactly only one has to be used):
+//!
+//! - `--all`: all networks with entries in the
+//! [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree of the hot database
+//! - `--name` followed by single network address book title: for a network with
+//! existing record in the [`ADDRESS_BOOK`](constants::ADDRESS_BOOK)
+//! - `--url` followed by single URL address: reserved for networks with no
+//! record yet in the [`ADDRESS_BOOK`](constants::ADDRESS_BOOK)
+//!
+//! `--all` key could be used with `--pass-errors` key, to stop processing after first
+//! error.
+//!
+//! `--encryption` key to override specifying encryption algorithm supported by the
+//! network is optional for `--name` reference key (since there is already an entry in
+//! the database with specified encryption) and mandatory for `--url` reference key.
+//! Supported variants are:
+//!
+//! - `ed25519`
+//! - `sr25519`
+//! - `ecdsa`
+//!
+//! Sequence invoking token override could be used when processing an
+//! individual network that has multiple allowed decimals and unit values
+//! retrieved as arrays of equal size. To override token, key `--token-decimals`
+//! followed by `u8` decimals value and key `--token-unit` `String` unit value is used.
+//! By default, if no token override in provided, such networks have `0u8` decimals
+//! and `UNIT` unit set up.
+//!
+//! Title override could be used when processing an individual network, to set
+//! the title under which the network will be displayed in Vault, should the
+//! `add-specs` payload be accepted. Non-default networks, if the title override
+//! is not specified, have title `<network_name>-<network_encryption>`.
+//!
+//! Not all setting and reference key combinations are compatible, and not all
+//! overrides are supported. Users are encouraged to comment if they need some
+//! other than current key combinations available.
+//!
+//! <table>
+//!     <tr>
+//!         <th>setting key</th>
+//!         <th>reference key</th>
+//!         <th>reference argument</th>
+//!         <th>encryption override</th>
+//!         <th>token override</th>
+//!         <th>title override</th>
+//!         <th>action</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-d</code></td>
+//!         <td><code>-u</code></td>
+//!         <td><code>url_address</code></td>
+//!         <td>mandatory</td>
+//!         <td>possible, if token array fetched</td>
+//!         <td>possible</td>
+//!         <td>- make RPC calls<br>
+//!             - apply overrides<br>
+//!             - make payload file<br>
+//!             Note: database is <b>not</b> used
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-f</code></td>
+//!         <td><code>-a</code></td>
+//!         <td></td>
+//!         <td colspan="3">blocked</td>
+//!         <td>- get all network specs entries from the database<br>
+//!             - make payload file(s)<br>
+//!             Note: only the data from the database is used
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-f</code></td>
+//!         <td><code>-n</code></td>
+//!         <td><code>address_book_title</code></td>
+//!         <td>possible</td>
+//!         <td>blocked, no way to check that the token override is reasonable</td>
+//!         <td>possible</td>
+//!         <td>- get address book entry for <code>address_book_title</code><br>
+//!             - get corresponding network specs entry<br>
+//!             - apply overrides<br>
+//!             - make payload file<br>
+//!             Note: only the data from the database and override(s) are used
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-p</code></td>
+//!         <td><code>-n</code></td>
+//!         <td><code>address_book_title</code></td>
+//!         <td>possible</td>
+//!         <td>possible, if token array fetched</td>
+//!         <td>possible</td>
+//!         <td>- get address book entry for <code>address_book_title</code><br>
+//!             - get corresponding network specs entry<br>
+//!             - make RPC calls, check that the entry remains correct<br>
+//!             - apply overrides<br>
+//!             - update database
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-p</code></td>
+//!         <td><code>-u</code></td>
+//!         <td><code>url_address</code></td>
+//!         <td>mandatory</td>
+//!         <td>possible, if token array fetched</td>
+//!         <td>possible</td>
+//!         <td>- make RPC calls<br>
+//!             - apply overrides<br>
+//!             - update database<br>
+//!             Note: reserved for networks with no entries in the database
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-t</code> or none declared</td>
+//!         <td><code>-n</code></td>
+//!         <td><code>address_book_title</code></td>
+//!         <td>possible</td>
+//!         <td>possible, if token array fetched</td>
+//!         <td>possible</td>
+//!         <td>- get address book entry for <code>address_book_title</code><br>
+//!             - get corresponding network specs entry<br>
+//!             - make RPC calls, check that the entry remains correct<br>
+//!             - apply overrides<br>
+//!             - update database if needed<br>
+//!             - make payload file
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-t</code> or none declared</td>
+//!         <td><code>-u</code></td>
+//!         <td><code>url_address</code></td>
+//!         <td>mandatory</td>
+//!         <td>possible, if token array fetched</td>
+//!         <td>possible</td>
+//!         <td>- make RPC calls<br>
+//!             - apply overrides<br>
+//!             - update database if needed<br>
+//!             - make payload file<br>
+//!             Note: reserved for networks with no entries in the database
+//!         </td>
+//!     </tr>
+//! </table>
+//!
+//! ### Examples
+//!
+//! Make `add_specs` update payload for a known network from the hot database:
+//!
+//! `$ cargo run add-specs --name westend-sr25519`
+//!
+//! Make `add-specs` update payload for a new network:
+//!
+//! `$ cargo run add-specs -d -u wss://rococo-rpc.polkadot.io --encryption sr25519 --title Rococo`
+//!
+//! Make `add-specs` update payload for a new network with token set:
+//!
+//! `$ cargo run add-specs -d -u wss://acala.polkawallet.io --encryption sr25519 --token-decimals 12 --token-unit ACA --title Acala`
+//!
+//! ## Prepare `load_metadata` update payload
+//!
+//! `$ cargo run load-metadata [OPTIONS] <-d|-f|-k|-p|-t>`
+//!
+//! A file is generated in dedicated [`FOLDER`](constants::FOLDER) to
+//! (optionally) be signed and later be transformed into `load_metadata`
+//! update QR. Output file name is
+//! `sign_me_load_metadata_<network_name>V<version>`.
+//!
+//! Setting keys that could be used in command line (maximum one):
+//!
+//! - `-d`: do **not** update the database, make RPC calls, and produce
+//! output files
+//! - `-f`: do **not** run RPC calls, produce output files from database as
+//! it is
+//! - `-k`: update database through RPC calls, produce output files only for
+//! **new** database entries
+//! - `-p`: update database through RPC calls, do **not** produce any output
+//! files
+//! - `-t` (no setting key defaults here): update database through RPC
+//! calls, produce output files
+//!
+//! <table>
+//!     <tr>
+//!         <th>setting key</th>
+//!         <th>hot database update</th>
+//!         <th>RPC calls</th>
+//!         <th>output update payload</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-d</code></td>
+//!         <td>-</td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-f</code></td>
+//!         <td>-</td>
+//!         <td>-</td>
+//!         <td>+</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-k</code></td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!         <td>only new entries</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-p</code></td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!         <td>-</td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-t</code></td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!         <td>+</td>
+//!     </tr>
+//! </table>
+//!
+//! Network metadata updates quite often, compared to `add-specs` command there
+//! is also setting key `-k` to print only the data that was not in the hot
+//! database before the fetch.
+//!
+//! Reference keys (exactly only one has to be used):
+//!
+//! - `-a,--all`: all networks with entries in the
+//! [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree of the hot database
+//! - `-n,--name` followed by single network name: for a network with existing
+//! record in the [`ADDRESS_BOOK`](constants::ADDRESS_BOOK)
+//! - `-u,--url` followed by single URL address: reserved for networks with no
+//! record yet in the [`ADDRESS_BOOK`](constants::ADDRESS_BOOK)
+//!
+//! `-a` key could be used with `--pass-errors` key, to stop processing after first
+//! error.
+//!
+//! `load-metadata` has no overrides available. Not all setting and reference
+//! key combinations are compatible, and not all overrides are supported. Users
+//! are encouraged to comment if they need some other than current key
+//! combinations available.
+//!
+//! <table>
+//!     <tr>
+//!         <th>setting key</th>
+//!         <th>reference key</th>
+//!         <th>reference argument</th>
+//!         <th>action</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-d</code></td>
+//!         <td><code>-a</code></td>
+//!         <td></td>
+//!         <td>- get all URL addresses <b>from the database</b><br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - make payload file(s)<br>
+//!             Note: database is needed to get URL addresses
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-d</code></td>
+//!         <td><code>-n</code></td>
+//!         <td><code>network_name</code></td>
+//!         <td>- get URL address <b>from the database</b> for the <code>network_name</code><br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - make payload file<br>
+//!             Note: database is needed to get URL address
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-d</code></td>
+//!         <td><code>-u</code></td>
+//!         <td><code>url_address</code></td>
+//!         <td>- make RPC calls<br>
+//!             - make payload file<br>
+//!             Note: database is <b>not</b> used
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-f</code></td>
+//!         <td><code>-a</code></td>
+//!         <td></td>
+//!         <td>- get all metadata entries from the database<br>
+//!             - make payload file(s)
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-f</code></td>
+//!         <td><code>-n</code></td>
+//!         <td><code>network_name</code></td>
+//!         <td>- get all metadata entries for the <code>network_name</code> from the database<br>
+//!             - make payload file(s)
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-k</code></td>
+//!         <td><code>-a</code></td>
+//!         <td></td>
+//!         <td>- get all URL addresses from the database<br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - update the database if needed<br>
+//!             - make payload file for each new entry
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-k</code></td>
+//!         <td><code>-n</code></td>
+//!         <td><code>network_name</code></td>
+//!         <td>- get URL address from the database for the <code>network_name</code><br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - update the database if needed<br>
+//!             - make payload file if the entry is new
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-p</code></td>
+//!         <td><code>-a</code></td>
+//!         <td></td>
+//!         <td>- get all URL addresses from the database<br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - update the database if needed
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-p</code></td>
+//!         <td><code>-n</code></td>
+//!         <td><code>network_name</code></td>
+//!         <td>- get URL address from the database for the <code>network_name</code><br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - update the database if needed
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-t</code> or none declared</td>
+//!         <td><code>-a</code></td>
+//!         <td></td>
+//!         <td>- get all URL addresses from the database<br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - update the database if needed<br>
+//!             - make payload file(s)
+//!         </td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>-t</code> or none declared</td>
+//!         <td><code>-n</code></td>
+//!         <td><code>network_name</code></td>
+//!         <td>- get URL address from the database for the <code>network_name</code><br>
+//!             - make RPC calls<br>
+//!             - verify name, genesis hash, base58 prefix<br>
+//!             - update the database if needed<br>
+//!             - make payload file
+//!         </td>
+//!     </tr>
+//! </table>
+//!
+//! ### Examples
+//!
+//! Check metadata updates and make `load_metadata` update payloads for latest
+//! metadata for all known networks:
+//!
+//! `$ cargo run load-metadata -a`
+//!
+//! Make `load_metadata` update payload for a network not in the database:
+//!
+//! `$ cargo run load-metadata -d -u wss://rococo-rpc.polkadot.io`
+//!
+//! ## Prepare `load_types` update payload
+//!
+//! `$ cargo run load-types`
+//!
+//! A file is generated in dedicated [`FOLDER`](constants::FOLDER) to
+//! (optionally) be signed and later be transformed into `load_types` update QR.
+//! Output file name is `sign_me_load_types`.
+//!
+//! ## Generate update QR and/or hexadecimal string file
+//!
+//! Raw `[u8]` update payloads, as prepared by `add_specs`, `load_metadata` or
+//! `load_types` commands get transformed into update QR codes (to be scanned
+//! into the Vault) or textfiles with hexadecimal data (for tests).
+//!
+//! There are two commands for generating updates: `make` and `sign`.
+//!
+//! Command `make` is used to generate:
+//!
+//! - signed updates with a valid signature, associated public key and
+//! encryption algorithm
+//! - test signed updates, i.e. updates signed by a key with
+//! [Alice seed phrase](constants::ALICE_SEED_PHRASE) and derivation `//Alice`,
+//! with encryption algorithm chosen by user, for tests
+//! - unsigned updates
+//!
+//! Signature for `make` command is generated for contents of raw `[u8]` update
+//! payload file using, for example, Subkey.
+//!
+//! Command `sign` is used to generate signed updates with a valid
+//! [`SufficientCrypto`](definitions::crypto::SufficientCrypto) produced by
+//! Vault. Vault exports `SufficientCrypto` produced for one of its keys
+//! as a static QR code, this QR code content goes into command line.
+//!
+//! Update QR and/or hexadecimal string file are produced in
+//! [`EXPORT_FOLDER`](constants::EXPORT_FOLDER).
+//!
+//! Keys and most arguments (except file paths) are not case-sensitive.
+//!
+//! The validity of the signature or `SufficientCrypto`, if provided, is checked
+//! before assembling update.
+//!
+//! The payload is checked to be valid, with decodeable content. If default
+//! output file name is used, it is generated based on the payload content.
+//!
+//! <table>
+//!     <tr>
+//!         <th><code>msg</code></th>
+//!         <th>default update file name</th>
+//!     </tr>
+//!     <tr>
+//!         <td><code>add-specs</code></td>
+//!         <td><code>add_specs_&ltnetwork_name&gt-&ltnetwork_encryption&gt</code></td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>load-metadata</code></td>
+//!         <td><code>load_metadata_&ltnetwork_name&gtV&ltmetadata_version&gt</code></td>
+//!     </tr>
+//!     <tr>
+//!         <td><code>load-types</code></td>
+//!         <td><code>load_types</code></td>
+//!     </tr>
+//! </table>
+//!
+//! Names for Alice-signed updates have additional tail
+//! `_Alice-<alice_signature_encryption>`.
+//!
+//! Names for unsigned updates have additional tail `_unsigned`.
+//!
+//! ### `make` command
+//!
+//! `$ cargo run make <keys> <arguments>`
+//!
+//! Keys to be used in command line:
+//!
+//! - Key `--goal` followed by the type to to generate
+//!    - `qr` will generate only a png QR code
+//!    - `text` will generate only text file with hex-encoded update.
+//!    - default, i.e. if goal is not provided, both QR code and text file are generated.
+//!
+//! - Key `--crypto` followed by encryption used to make update signature:
+//!    - `ed25519`
+//!    - `sr25519`
+//!    - `ecdsa`
+//!    - `none` if the message is not verified
+//!
+//! - Key `--msg` followed by update type:
+//!    - `load-types`
+//!    - `load-metadata`
+//!    - `add-specs`
+//!
+//! - Key `--verifier` (can be entered only if the `--crypto` argument was
+//! `ed25519`, `sr25519`, or `ecdsa`), followed by:
+//!    - `Alice` to generate messages "verified" by
+//! [Alice seed phrase](constants::ALICE_SEED_PHRASE) with derivation `//Alice`
+//!    - `-hex` followed by hex public key
+//!    - `-file` followed by the path in dedicated [`FOLDER`](constants::FOLDER)
+//! for file with public key as raw bytes
+//!
+//! - Key `--payload` followed by file path in dedicated
+//! [`FOLDER`](constants::FOLDER) containing already generated payload as
+//! raw bytes
+//!
+//! - Key `--signature` (can be entered only if the `--crypto` argument was
+//! `ed25519`, `sr25519`, or `ecdsa` **and** `--verifier` is not `Alice`),
+//! followed by:
+//!    - `-hex` followed by hex signature
+//!    - `-file` followed by the path in dedicated [`FOLDER`](constants::FOLDER)
+//! for file with signature as raw bytes
+//!
+//! - Optional key `-name` followed by path override for export file in
+//! dedicated [`EXPORT_FOLDER`](constants::EXPORT_FOLDER)
+//!
+//! ### `sign` command
+//!
+//! `$ cargo run make <keys> <arguments>`
+//!
+//! Keys to be used in command line:
+//!
+//! - Key `--goal` followed by the type to to generate
+//!    - `qr` will generate only a png QR code
+//!    - `text` will generate only text file with hex-encoded update.
+//!    - default, i.e. if goal is not provided, both QR code and text file are generated.
+//!
+//! - Key `-sufficient` followed by:
+//!    - `-hex` followed by hexadecimal string with contents of Vault-produced
+//! `SufficientCrypto` QR code
+//!    - `-file` followed by file path in dedicated
+//! [`FOLDER`](constants::FOLDER) for raw bytes file with contents of
+//! Vault-produced `SufficientCrypto` QR code
+//!
+//! - Key `-msg` followed by message type:
+//!    - `load-types`
+//!    - `load-metadata`
+//!    - `add-specs`
+//!
+//! - Key `--payload` followed by file path in dedicated
+//! [`FOLDER`](constants::FOLDER) containing already generated payload as
+//! raw bytes
+//!
+//! - Optional key `-name` followed by path override for export file in
+//! dedicated [`EXPORT_FOLDER`](constants::EXPORT_FOLDER)
+//!
+//! Generating `SufficientCrypto` in Vault is suggested mainly for update
+//! distribution purposes. A dedicated (i.e. used only for updates signing),
+//! kept physically safe Vault is strongly suggested, with a dedicated key
+//! for updates signing. As the Vault can accept only payloads with
+//! verifier not weaker than the one used before, and the whole purpose of
+//! the process is to generate a signature for payload, it is expected that
+//! this isolated Vault will receive unsigned or weakly signed updates,
+//! thoroughly check them and export `SufficientCrypto`, so that a signed
+//! update could be made for other, routinely used Vault devices.
+//!
+//! ### Examples: generate `load_metadata` QR code for westend metadata version 9200.
+//!
+//! Update payload `sign_me_load_metadata_westendV9200` is already in dedicated
+//! [`FOLDER`](constants::FOLDER).
+//!
+//! #### `make` for external signature
+//!
+//! `$ cargo run make --goal qr --crypto <encryption> --msg load-metadata
+//! --verifier-hex <public key> --payload sign_me_load_metadata_westendV9200
+//! --signature-hex <signature>`
+//!
+//! Here `<signature>` is hexadecimal signature generated for the contents of
+//! the payload file for `<public_key>` using `<encryption>` algorithm.
+//!
+//! Output file is `load_metadata_westendV9200` in
+//! [`EXPORT_FOLDER`](constants::EXPORT_FOLDER).
+//!
+//! Example:
+//!
+//! `$ cargo run make --goal qr --crypto sr25519 --msg load-metadata --verifier-hex
+//! 46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a --payload
+//! sign_me_load_metadata_westendV9200 --signature-hex
+//! 125717599cd057bfe6db7b111274cbda796d2543467400110552fa1c62dc087a7acefb53b68716f1e34f8af6bf13ab45d70d50655fd39483c64f3f057418748a`
+//!
+//! #### `make` for test verifier Alice
+//!
+//! Payloads signed by Alice are used for testing in Vault. The signature
+//! in this case is generated automatically and is not supplied in command
+//! line.
+//!
+//! `$ cargo run make --goal qr --crypto <encryption> --msg load-metadata
+//! --verifier Alice --payload sign_me_load_metadata_westendV9200`.
+//!
+//! Output file is `load_metadata_westendV9200_Alice-<encryption>` in
+//! [`EXPORT_FOLDER`](constants::EXPORT_FOLDER).
+//!
+//! Example:
+//!
+//! `$ cargo run make --goal qr --crypto sr25519 --msg load-metadata --verifier Alice
+//! --payload sign_me_load_metadata_westendV9200`
+//!
+//! #### `make` with no signature
+//!
+//! `$ cargo run make --goal qr --crypto none --msg load-metadata --payload
+//! sign_me_load_metadata_westendV9200`
+//!
+//! Output file is `load_metadata_westendV9200_unverified` in
+//! [`EXPORT_FOLDER`](constants::EXPORT_FOLDER).
+//!
+//! Example:
+//!
+//! `$ cargo run make --goal qr --crypto none --msg load-metadata --payload
+//! sign_me_load_metadata_westendV9200`
+//!
+//! #### `sign`
+//!
+//! Here `<hex_sufficient>` is hex-encoded data from
+//! [`SufficientCrypto`](definitions::crypto::SufficientCrypto) QR code produced
+//! by the Vault.
+//!
+//! `$ cargo run sign --goal qr --sufficient-hex <hex_sufficient> --msg
+//! load-metadata --payload sign_me_load_metadata_westendV9200`
+//!
+//! Output file is `load_metadata_westendV9200` in
+//! [`EXPORT_FOLDER`](constants::EXPORT_FOLDER).
+//!
+//! Example:
+//!
+//! `$ cargo run sign --goal qr --sufficient-hex
+//! 0146ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47aceef7c58b5f952b6233b8aba5beb6f0000c8ca7f7cc16b7ada7cd45026fc3f3ec2289dd90dab0dfac38dfe3be843231443ddd30a3f3bbabb5cefcd2bbcef908c
+//! --msg load-metadata --payload sign_me_load_metadata_westendV9200`
+//!
+//! ## Remove a single metadata entry from the `METATREE`
+//!
+//! `$ cargo run remove --name <network_name> --version <metadata_version>`
+//!
+//! Removes only the specified entry from the [`METATREE`](constants::METATREE).
+//!
+//! The entry in [`META_HISTORY`](constants::META_HISTORY) remains. Should the
+//! same metadata version be retrieved afterwards, the `META_HISTORY` entry will
+//! be updated to a block hash from more recent fetch, as the metadata from
+//! old block saved in the database would not be necessarily the same as the one
+//! being recorded in the database now.
+//!
+//! ## Remove all data associated with a network
+//!
+//! `$ cargo run remove --title <address_book_title>`
+//!
+//! This will remove:
+//! - address book entry
+//! [`AddressBookEntry`](definitions::metadata::AddressBookEntry) from
+//! [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree
+//! - network specs
+//! [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+//! from [`SPECSTREEPREP`](constants::SPECSTREEPREP) tree
+//! - all associated metadata entries from [`METATREE`](constants::METATREE)
+//! if there are no other address book entries this metadata is associated
+//! with
+//! - all associated meta block history entries from
+//! [`META_HISTORY`](constants::META_HISTORY) if there are no other address book
+//! entries this block history entries are associated with
+//!
+//! ## Restore hot database to default state
+//!
+//! `$ cargo run restore-defaults`
+//!
+//! Removes old hot database and generates new one with default values at
+//! default path [`HOT_DB_NAME`](constants::HOT_DB_NAME).
+//!
+//! By default, hot database contains:
+//!
+//! - [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) entries for default networks
+//! - [`SPECSTREEPREP`](constants::SPECSTREEPREP) entries for default networks
+//! - types information in [`SETTREE`](constants::SETTREE)
+//! - **no** metadata entries in [`METATREE`](constants::METATREE)
+//! - **no** meta block history entries in
+//! [`META_HISTORY`](constants::META_HISTORY)
+//!
+//! Default networks are Polkadot, Kusama, and Westend.
+//!
+//! ## Generate default cold release database
+//!
+//! `$ cargo run make-cold-release <optional path>`
+//!
+//! Removes old cold release database and generates new one with default values
+//! (unitiniated) at user-provided path or, if no valid path is given, at
+//! default path [`COLD_DB_NAME_RELEASE`](constants::COLD_DB_NAME_RELEASE).
+//!
+//! By default, the uninitiated cold release database contains:
+//!
+//! - [`SPECSTREE`](constants::SPECSTREE) entries for default networks
+//! - [`VERIFIERS`](constants::VERIFIERS) entries for default networks, with
+//! verifiers set to the general one
+//! - two latest metadata versions for default networks in
+//! [`METATREE`](constants::METATREE)
+//! - default types information and clean danger status in
+//! [`SETTREE`](constants::SETTREE)
+//!
+//! Note that the general verifier is not specified and history is not
+//! started. This will be done only in Vault itself. Before initialization,
+//! the cold release database could not be used by Vault.
+//!
+//! ## Transfer metadata from hot database to cold release database
+//!
+//! `$ cargo run transfer_meta_to_cold_release <optional path>`
+//!
+//! Metadata from hot database is transferred to cold release database at
+//! user-provided path or, if no valid path is given, at default path
+//! [`COLD_DB_NAME_RELEASE`](constants::COLD_DB_NAME_RELEASE).
+//!
+//! Metadata is transferred only for the networks that are known to the cold
+//! database, i.e. the ones having
+//! [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry in
+//! [`SPECSTREE`](constants::SPECSTREE).
+
+//! ## Make derivations import QR and/or hexadecimal string file
+//!
+//! `$ cargo run derivations --goal <GOAL> --title <TITLE> --derivations <DERIVATIONS>`
+//!
+//! Keys to be used in command line:
+//!
+//! - `<GOAL>`: `qr` will generate only apng QR code, `text`
+//! will generate only text file with hex-encoded update. By default, i.e. if
+//! content key is not provided, both QR code and text file are generated.
+//! `<optional_target_key>` is expected immediately after `derivations` command,
+//! if at all; keys to follow could go in any order, but with argument
+//! immediately following the key.
+//!
+//! - Key `--derivations` followed by file path in `/generate_message/` folder.
+//! File with derivations contains valid derivations, each on its own line. Only
+//! suitable derivations will be processed. Processed derivations are also
+//! printed for user to check.
+//!
+//! - Key `--title` followed by network address book title, to indicate to
+//! which network the derivations belong.
+//!
+//! Output file is in `/generate_message/` folder, file name would be
+//! `derivations-<address_book_title>`.
+//!
+//! ## Prepare payload for `load_metadata` update from `.wasm` file
+//!
+//! `$ cargo run unwasm [OPTIONS] --filename <FILENAME>`
+//!
+//! This command extracts metadata from `.wasm` file and uses this metadata to
+//! produce `load_metadata` update payload. Only networks with network specs
+//! entries in the hot database could be processed with `unwasm` command, since
+//! the `load_metadata` update payload in addition to metadata requires also
+//! network genesis hash. `unwasm` command could be used to generate update QR
+//! codes before the metadata becomes accessible from the node.
+//!
+//! Network name found in the metadata is used to find
+//! [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) for
+//! the network. `NetworkSpecs` are used to get genesis hash and to check
+//! base58 prefix, it the network metadata has base58 prefix inside.
+//!
+//! A raw bytes update payload file is generated in dedicated
+//! [`FOLDER`](constants::FOLDER) to (optionally) be signed and later be
+//! transformed into `load_metadata` update QR. Update payload file name is
+//! `sign_me_load_metadata_<network_name>V<version>`.
+//!
+//! By default, metadata extracted from `.wasm` file is added to the database.
+//! Optional `-d` key could be used is database should **not** be updated.
+//! If the metadata gets entered in the database (i.e. no `-d` key used),
+//! [`META_HISTORY`](constants::META_HISTORY) gets no entry. Block hash will be
+//! added if the same metadata is later fetched from a node.
+//!
+//! ## Make metadata file for `defaults` release metadata set
+//!
+//! `$ cargo run  meta-default-file --name <NETWORK NAME> --version <NETWORK VERSION>`
+//!
+//! Produces file with hex-encoded network metadata from the hot database
+//! [`METATREE`](constants::METATREE) entry.
+//!
+//! Output file named `<network_name><metadata_version>` is generated in
+//! dedicated [`EXPORT_FOLDER`](constants::EXPORT_FOLDER). It contains
+//! hexadecimal network metadata.
+//!
+//! ### Example
+//!
+//! `$ cargo run meta-default-file --name westend --version 9230`
+//!
+//! ## Make file with hexadecimal network metadata fetched for specific block hash from provided address
+//!
+//! `$ cargo run meta-at-block --url <RPC URL> --block-hash <BLOCK HASH>`
+//!
+//! Output file named `<network_name><metadata_version>_<block_hash>` is
+//! generated in dedicated [`EXPORT_FOLDER`](constants::EXPORT_FOLDER).
+//! It contains hexadecimal network metadata.
+//!
+//! This command does not address or update the hot database.
+//!
+//! ### Example
+//!
+//! `$ cargo run meta-at-block --url wss://westend-rpc.polkadot.io --block
+//! 780812df50c4006d1865742269fe4ca339c097e61d6279cce91ebc58f5aebada`
+#![deny(unused)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+use constants::FPS_DEN;
+use db_handling::{
+    default_cold_release, default_hot,
+    helpers::{prep_types, transfer_metadata_to_cold},
+};
+
+pub mod fetch_metadata;
+pub mod helpers;
+use helpers::{
+    debug_meta_at_block, generate_bulk_transaction_qr, generate_key_info_export_to_qr,
+    generate_qr_code,
+};
+pub mod interpret_specs;
+mod load;
+use load::{gen_load_meta, meta_default_file, unwasm};
+mod make_message;
+use make_message::make_message;
+pub mod parser;
+use parser::{Command, Show};
+mod remove;
+use remove::remove_info;
+mod show;
+use show::{check_file, show_block_history, show_metadata, show_networks, show_specs};
+mod specs;
+use specs::gen_add_specs;
+
+mod error;
+pub use error::{Error, Result};
+
+/// Process incoming command as interpreted by parser.
+pub fn full_run(command: Command) -> Result<()> {
+    match command {
+        Command::Show { s: show, db_path } => {
+            let database = sled::open(db_path)?;
+            match show {
+                Show::Metadata => show_metadata(&database),
+                Show::Networks => show_networks(&database),
+                Show::Specs { s: title } => show_specs(&database, title),
+                Show::CheckFile { s: path } => check_file(&database, path),
+                Show::BlockHistory => show_block_history(&database),
+            }
+        }
+        Command::Specs { s: instruction } => gen_add_specs(instruction),
+        Command::Load(instruction) => gen_load_meta(instruction),
+        Command::Types { db_path, files_dir } => {
+            let database = sled::open(db_path)?;
+            Ok(prep_types(&database)?.write(files_dir.join("sign_me_load_types"))?)
+        }
+        Command::Sign(make) | Command::Make(make) => make_message(make),
+        Command::Remove { r: info, db_path } => {
+            let database = sled::open(db_path)?;
+            remove_info(&database, info)
+        }
+        Command::RestoreDefaults { db_path } => {
+            let db = sled::open(db_path)?;
+
+            Ok(default_hot(Some(&db))?)
+        }
+        Command::MakeColdRelease { path } => {
+            let db = path.and_then(|path| sled::open(path).ok());
+
+            Ok(default_cold_release(db.as_ref())?)
+        }
+        Command::TransferMetaToColdRelease { cold_db, hot_db } => {
+            let hot_db = sled::open(hot_db)?;
+            let cold_db = sled::open(cold_db)?;
+            Ok(transfer_metadata_to_cold(&hot_db, &cold_db)?)
+        }
+        Command::Unwasm {
+            filename,
+            update_db,
+            db_path,
+            files_dir,
+        } => {
+            let database = sled::open(db_path)?;
+            unwasm(&database, &filename, update_db, files_dir)
+        }
+        Command::MetaDefaultFile {
+            name,
+            version,
+            db_path,
+            export_dir,
+        } => {
+            let database = sled::open(db_path)?;
+            meta_default_file(&database, &name, version, export_dir)
+        }
+        Command::MetaAtBlock {
+            url,
+            block_hash,
+            export_dir,
+        } => debug_meta_at_block(&url, &block_hash, export_dir),
+        Command::EncodeToQr {
+            path,
+            hex,
+            chunk_size,
+            dst_file,
+        } => {
+            let data = if let Some(hex) = hex {
+                hex::decode(hex).unwrap()
+            } else if let Some(path) = path {
+                std::fs::read(path).unwrap()
+            } else {
+                panic!("path or hex data required");
+            };
+
+            generate_qr_code(&data, chunk_size, FPS_DEN, dst_file)
+        }
+        Command::KeyInfoExportToQr {
+            dst_file,
+            chunk_size,
+            fps,
+            keys_num,
+        } => generate_key_info_export_to_qr(dst_file, chunk_size, fps, keys_num),
+        Command::BulkTransactionTestPayload {
+            dst_file,
+            tx_count,
+            chunk_size,
+            from,
+            output_format,
+        } => generate_bulk_transaction_qr(dst_file, tx_count, chunk_size, from, output_format),
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/load.rs.html b/rustdocs/src/generate_message/load.rs.html new file mode 100644 index 0000000000..48fbad716f --- /dev/null +++ b/rustdocs/src/generate_message/load.rs.html @@ -0,0 +1,1299 @@ +load.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+
//! `load_metadata` payloads and metadata related hot database updates
+//!
+//! This module deals with processing commands:
+//!
+//! - `$ cargo run load-metadata <key(s)> <(argument)>` to produce
+//! `load_metadata` update payloads from the database entries and through RPC
+//! calls and update the hot database
+//!
+//! - `$ cargo run unwasm -payload <wasm_file_path> <optional -d key>` to
+//! produce `load_metadata` update payloads from `.wasm` files and update the
+//! hot database
+//!
+//! - `$ cargo run meta_default_file -name <network_name> -version
+//! <network_version>` to generates metadata files for `defaults` crate from
+//! hot database entries
+use sp_core::H256;
+use std::path::Path;
+
+use constants::METATREE;
+use db_handling::helpers::{get_meta_values_by_name_version, open_tree};
+use definitions::{error::MetadataError, keyring::MetaKeyPrefix, metadata::MetaValues};
+
+use crate::error::{Changed, Error, Result};
+use crate::helpers::{
+    add_new_metadata, address_book_content, db_upd_metadata, error_occured, load_metadata_print,
+    meta_fetch, network_specs_from_entry, prepare_metadata, MetaFetched, MetaShortCut,
+    MetaValuesStamped, SortedMetaValues, Write,
+};
+use crate::parser::{Content, InstructionMeta, Set};
+
+/// Process `load-metadata` command according to the [`InstructionMeta`]
+/// received from the command line.
+pub fn gen_load_meta(instruction: InstructionMeta) -> Result<()> {
+    match instruction.set.into() {
+        // `-f` setting key: produce payload files from existing database
+        // entries.
+        Set::F => match instruction.content.into() {
+            // `$ cargo run load-metadata -f -a`
+            //
+            // Make payloads for all metadata entries in the database.
+            Content::All { pass_errors } => {
+                // Get `AddressSpecs` for each network in `ADDRESS_BOOK`
+                let database = sled::open(&instruction.db)?;
+                let set = address_specs_set(&database)?;
+
+                // Process each entry
+                for x in set.iter() {
+                    match meta_f_a_element(&database, x, &instruction.files_dir) {
+                        Ok(()) => (),
+                        Err(e) => error_occured(e, pass_errors)?,
+                    }
+                }
+                Ok(())
+            }
+
+            // `$ cargo run load-metadata -f -n <network_name>`
+            //
+            // Make payload(s) for all metadata entries in the database for
+            // network with user-entered name.
+            Content::Name { s: name } => {
+                let database = sled::open(&instruction.db)?;
+                meta_f_n(&database, &name, &instruction.files_dir)
+            }
+
+            // `-u` content key is to provide the URL address for RPC calls;
+            // since `-f` indicates the data is taken from the database, the
+            // the combination seems of no use.
+            Content::Address { .. } => Err(Error::NotSupported),
+        },
+
+        // `-d` setting key: get network data using RPC calls, **do not**
+        // update the database, export payload files.
+        Set::D => match instruction.content.into() {
+            // `$ cargo run load-metadata -d -a`
+            //
+            // Make RPC calls for all networks in `ADDRESS_BOOK`, produce
+            // `load_metadata` payload files.
+            Content::All { pass_errors } => {
+                // Collect `AddressSpecs` for each network in `ADDRESS_BOOK`
+                let database = sled::open(&instruction.db)?;
+                let set = address_specs_set(&database)?;
+
+                // Process each entry
+                for x in set.iter() {
+                    match meta_d_a_element(x, &instruction.files_dir) {
+                        Ok(()) => (),
+                        Err(e) => error_occured(e, pass_errors)?,
+                    }
+                }
+                Ok(())
+            }
+
+            // `$ cargo run load-metadata -d -n <network_name>`
+            //
+            // Make RPC calls for network with user-entered name and produce
+            // `load_metadata` payload file.
+            //
+            // Network here must already have an entry in `ADDRESS_BOOK`, so
+            // so that the URL address at which to make RPC call is made could
+            // be found.
+            Content::Name { s: name } => {
+                let database = sled::open(&instruction.db)?;
+                meta_d_n(&database, &name, &instruction.files_dir)
+            }
+
+            // `$ cargo run load-metadata -d -u <url_address>`
+            //
+            // Make RPC calls for network at user-entered URL address and
+            // produce `load_metadata` payload file.
+            //
+            // This is intended for the networks that do not have yet entries in
+            // `ADDRESS_BOOK`.
+            //
+            // This key combination is completely agnostic and will not address
+            // the database at all. If there are changes in the base58 prefix or
+            // genesis hash, this will not be found here.
+            Content::Address { s: address } => meta_d_u(&address, &instruction.files_dir),
+        },
+
+        // `-k` setting key: get network data using RPC calls, update the
+        // database, produce `load_metadata` payload files only if new metadata
+        // was fetched.
+        Set::K => {
+            let write = Write::OnlyNew;
+            match instruction.content.into() {
+                // `$ cargo run load-metadata -k -a`
+                //
+                // Make RPC calls, update the database as needed and produce
+                // payload files if new data is fetched for all networks in
+                // address book.
+                //
+                // If there are two entries for the same network with different
+                // encryption, fetch and (possibly) payload export is done only
+                // once: `load_metadata` payloads do not specify encryption.
+                Content::All { pass_errors } => {
+                    let database = sled::open(instruction.db)?;
+                    meta_kpt_a(&database, &write, pass_errors, &instruction.files_dir)
+                }
+
+                // `$ cargo run load-metadata -k -n <network_name>`
+                //
+                // Make RPC calls, update the database as needed and produce
+                // payload file if new data is fetched for network with
+                // specified name.
+                //
+                // This command is for networks already having at least one
+                // entry in the `ADDRESS_BOOK` and `SPECSTREEPREP` of the hot
+                // database.
+                //
+                // Regardless of how many entries with different encryptions are
+                // there, fetch and (possibly) payload export is done only once.
+                Content::Name { s: name } => {
+                    let database = sled::open(instruction.db)?;
+                    meta_kpt_n(&database, &name, &write, &instruction.files_dir)
+                }
+
+                // Key `-u` is for URL addresses. If network has no entry in the
+                // database, its metadata can not be added before its specs. If
+                // network has an entry in the database, it is simpler to
+                // address it with `-n <network_name>` combination.
+                Content::Address { .. } => Err(Error::NotSupported),
+            }
+        }
+
+        // `-p` setting key: get network data using RPC calls and update the
+        // database.
+        Set::P => {
+            let write = Write::None;
+            match instruction.content.into() {
+                // `$ cargo run load-metadata -p -a`
+                //
+                // Make RPC calls and update the database as needed for all
+                // networks in address book.
+                //
+                // One fetch for each address.
+                Content::All { pass_errors } => {
+                    let database = sled::open(instruction.db)?;
+                    meta_kpt_a(&database, &write, pass_errors, &instruction.files_dir)
+                }
+
+                // `$ cargo run load-metadata -p -n <network_name>`
+                //
+                // Make RPC calls and update the database as needed for network
+                // with specified name.
+                //
+                // This command is for networks already having at least one
+                // entry in the `ADDRESS_BOOK` and `SPECSTREEPREP` of the hot
+                // database.
+                //
+                // One fetch only.
+                Content::Name { s: name } => {
+                    let database = sled::open(instruction.db)?;
+                    meta_kpt_n(&database, &name, &write, &instruction.files_dir)
+                }
+
+                // Key `-u` is for URL addresses. If network has no entry in the
+                // database, its metadata can not be added before its specs. If
+                // network has an entry in the database, it is simpler to
+                // address it with `-n <network_name>` combination.
+                Content::Address { .. } => Err(Error::NotSupported),
+            }
+        }
+
+        // `-t` setting key or no setting key: get network data using RPC calls
+        // and update the database.
+        Set::T => {
+            let write = Write::All;
+            match instruction.content.into() {
+                // `$ cargo run load-metadata -a`
+                //
+                // Make RPC calls, update the database as needed and produce
+                // payload files for all networks in address book.
+                //
+                // One fetch and one payload print for each address.
+                Content::All { pass_errors } => {
+                    let database = sled::open(instruction.db)?;
+                    meta_kpt_a(&database, &write, pass_errors, &instruction.files_dir)
+                }
+
+                // `$ cargo run load-metadata -n <network_name>`
+                //
+                // Make RPC calls, update the database as needed and produce
+                // payload file for network with specified name.
+                //
+                // This command is for networks already having at least one
+                // entry in the `ADDRESS_BOOK` and `SPECSTREEPREP` of the hot
+                // database.
+                //
+                // One fetch and one payload print only.
+                Content::Name { s: name } => {
+                    let database = sled::open(instruction.db)?;
+                    meta_kpt_n(&database, &name, &write, &instruction.files_dir)
+                }
+
+                // Key `-u` is for URL addresses. If network has no entry in the
+                // database, its metadata can not be added before its specs. If
+                // network has an entry in the database, it is simpler to
+                // address it with `-n <network_name>` combination.
+                Content::Address { .. } => Err(Error::NotSupported),
+            }
+        }
+    }
+}
+
+/// `load-metadata-f -a` for individual [`AddressSpecs`] value.
+///
+/// - Get metadata entries from database [`METATREE`] by [`MetaKeyPrefix`]
+/// generated with network name. At most two entries are expected.
+/// - Check the metadata integrity
+/// - Output raw bytes payload file
+fn meta_f_a_element<P>(database: &sled::Db, set_element: &AddressSpecs, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let meta_key_prefix = MetaKeyPrefix::from_name(&set_element.name);
+    let metadata = open_tree(database, METATREE)?;
+    for x in metadata.scan_prefix(meta_key_prefix.prefix()).flatten() {
+        let meta_values = MetaValues::from_entry_checked(x)?;
+        if meta_values.warn_incomplete_extensions {
+            warn(&meta_values.name, meta_values.version);
+        }
+        if let Some(prefix_from_meta) = meta_values.optional_base58prefix {
+            if prefix_from_meta != set_element.base58prefix {
+                Err(MetadataError::Base58PrefixSpecsMismatch {
+                    specs: set_element.base58prefix,
+                    meta: prefix_from_meta,
+                })?;
+            }
+        }
+        let shortcut = MetaShortCut {
+            meta_values,
+            genesis_hash: set_element.genesis_hash,
+        };
+        load_metadata_print(&shortcut, &files_dir)?;
+    }
+    Ok(())
+}
+
+/// `load-metadata-f -n <network_name>`
+///
+/// - Get all available [`AddressSpecs`] from the database and search for the
+/// one with user-entered network name
+/// - Get metadata entries from database [`METATREE`] by [`MetaKeyPrefix`]
+/// generated with `name`. At most two entries are expected.
+/// - Check the metadata integrity
+/// - Output raw bytes payload file
+fn meta_f_n<P>(database: &sled::Db, name: &str, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    meta_f_a_element(database, &search_name(database, name)?, &files_dir)
+}
+
+/// `load-metadata-d -a` for individual [`AddressSpecs`] value.
+///
+/// - Fetch network information using RPC calls at `address` in [`AddressSpecs`]
+/// and interpret it
+/// - Check the metadata integrity with the data on record in the database
+/// - Output raw bytes payload file
+fn meta_d_a_element<P>(set_element: &AddressSpecs, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let meta_fetch = fetch_set_element(set_element)?;
+    load_metadata_print(&meta_fetch.cut(), files_dir)
+}
+
+/// `load-metadata-d -n <network_name>`
+///
+/// - Get all available [`AddressSpecs`] from the database and search for the
+/// one with user-entered network name
+/// - Fetch network information using RPC calls at `address` in [`AddressSpecs`]
+/// and interpret it
+/// - Check the metadata integrity with the data on record in the database
+/// - Output raw bytes payload file
+fn meta_d_n<P>(database: &sled::Db, name: &str, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    meta_d_a_element(&search_name(database, name)?, files_dir)
+}
+
+/// `load-metadata-d -u <url_address>`
+///
+/// - Fetch network information using RPC calls at user-entered `address` and
+/// interpret it
+/// - Output raw bytes payload file
+///
+/// The command is intended to be used with unknown networks that do not have
+/// yet an entry in the database. Known networks are better addressed by the
+/// network name.
+///
+/// No checking of metadata and network specs integrity is done here, as there
+/// are no network specs. Base58 prefix change in the metadata would cause no
+/// error here. The Vault, if such contradicting metadata update is scanned,
+/// will produce an error, since the Vault must have matching network specs to
+/// accept the metadata.
+fn meta_d_u<P>(address: &str, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let meta_fetched = meta_fetch(address)?;
+    if meta_fetched.meta_values.warn_incomplete_extensions {
+        warn(
+            &meta_fetched.meta_values.name,
+            meta_fetched.meta_values.version,
+        );
+    }
+    load_metadata_print(&meta_fetched.cut(), files_dir)
+}
+
+/// `load-metadata<-k/-p/-t> -a`
+///
+/// - Get all available [`AddressSpecs`] from the database
+/// - Get and sort existing metadata entries from [`METATREE`], with block
+/// data from [`META_HISTORY`](constants::META_HISTORY) if available
+/// - Process each [`AddressSpecs`] and update sorted metadata entries in the
+/// process. Input [`Write`] indicates if the payload file should be created.
+/// - Rewrite the database [`METATREE`] with updated metadata set and update
+/// [`META_HISTORY`](constants::META_HISTORY)
+fn meta_kpt_a<P>(database: &sled::Db, write: &Write, pass_errors: bool, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let set = address_specs_set(database)?;
+    let mut sorted_meta_values = prepare_metadata(database)?;
+    for x in set.iter() {
+        match meta_kpt_a_element(x, write, &mut sorted_meta_values, &files_dir) {
+            Ok(_) => (),
+            Err(e) => error_occured(e, pass_errors)?,
+        };
+    }
+    db_upd_metadata(database, sorted_meta_values)
+}
+
+/// `load-metadata<-k/-p/-t> -a` for individual [`AddressSpecs`] value.
+///
+/// - Fetch network information using RPC calls at `address` in [`AddressSpecs`]
+/// and interpret it
+/// - Check the metadata integrity with the data on record in the database,
+/// insert it into received [`SortedMetaValues`]
+/// - Output raw bytes payload file, if requested by input [`Write`]
+///
+/// Inputs [`AddressSpecs`] for the network currently processed, [`Write`]
+/// indicating if the `load_metadata` payload should be created, and
+/// [`SortedMetaValues`] to be updated.
+fn meta_kpt_a_element<P>(
+    set_element: &AddressSpecs,
+    write: &Write,
+    sorted_meta_values: &mut SortedMetaValues,
+    files_dir: P,
+) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let meta_fetched = fetch_set_element(set_element)?;
+    let got_meta_update = add_new_metadata(&meta_fetched.stamped(), sorted_meta_values)?;
+    match write {
+        Write::All => load_metadata_print(&meta_fetched.cut(), files_dir)?,
+        Write::OnlyNew => {
+            if got_meta_update {
+                load_metadata_print(&meta_fetched.cut(), files_dir)?
+            }
+        }
+        Write::None => (),
+    }
+    if got_meta_update {
+        println!(
+            "Fetched new metadata {}{} at block hash {}",
+            meta_fetched.meta_values.name,
+            meta_fetched.meta_values.version,
+            hex::encode(meta_fetched.block_hash)
+        )
+    } else {
+        println!(
+            "Fetched previously known metadata {}{}",
+            meta_fetched.meta_values.name, meta_fetched.meta_values.version,
+        )
+    }
+    Ok(())
+}
+
+/// `load-metadata<-k/-p/-t> -n <network_name>`
+///
+/// - Get and sort existing metadata entries from [`METATREE`], with block
+/// data from [`META_HISTORY`](constants::META_HISTORY) if available
+/// - Get all available [`AddressSpecs`] from the database and search for the
+/// one with user-entered network name
+/// - Fetch network information using RPC calls at `address` in [`AddressSpecs`]
+/// and interpret it
+/// - Check the metadata integrity with the data on record in the database,
+/// insert it into [`SortedMetaValues`]
+/// - Output raw bytes payload file, if requested by input [`Write`]
+/// - Rewrite the database [`METATREE`] with updated metadata set and update
+/// [`META_HISTORY`](constants::META_HISTORY)
+///
+/// Inputs user-entered network name and [`Write`] indicating if the
+/// `load_metadata` payload should be created.
+fn meta_kpt_n<P>(database: &sled::Db, name: &str, write: &Write, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let mut sorted_meta_values = prepare_metadata(database)?;
+    meta_kpt_a_element(
+        &search_name(database, name)?,
+        write,
+        &mut sorted_meta_values,
+        files_dir,
+    )?;
+    db_upd_metadata(database, sorted_meta_values)
+}
+
+/// Network information from [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) and
+/// [`SPECSTREEPREP`](constants::SPECSTREEPREP).
+///
+/// This data is sufficient to make RPC calls and check that the metadata is
+/// consistent with existing database content.
+#[derive(PartialEq)]
+struct AddressSpecs {
+    address: String,
+    base58prefix: u16,
+    genesis_hash: H256,
+    name: String,
+}
+
+/// Collect all unique [`AddressSpecs`] from the hot database.
+fn address_specs_set(database: &sled::Db) -> Result<Vec<AddressSpecs>> {
+    let set = address_book_content(database)?;
+    if set.is_empty() {
+        return Err(Error::AddressBookEmpty);
+    }
+    let mut out: Vec<AddressSpecs> = Vec::new();
+    for (_, x) in set.iter() {
+        let specs = network_specs_from_entry(database, x)?;
+        for y in out.iter() {
+            if y.name == specs.name {
+                if y.genesis_hash != specs.genesis_hash {
+                    return Err(Error::TwoGenesisHashVariantsForName {
+                        name: x.name.to_string(),
+                    });
+                }
+                if y.address != x.address {
+                    return Err(Error::TwoUrlVariantsForName {
+                        name: x.name.to_string(),
+                    });
+                }
+                if y.base58prefix != specs.base58prefix {
+                    return Err(Error::TwoBase58ForName {
+                        name: x.name.to_string(),
+                    });
+                }
+            }
+        }
+        let new = AddressSpecs {
+            address: x.address.to_string(),
+            base58prefix: specs.base58prefix,
+            genesis_hash: specs.genesis_hash,
+            name: specs.name.to_string(),
+        };
+        if !out.contains(&new) {
+            out.push(new)
+        }
+    }
+    Ok(out)
+}
+
+/// Find [`AddressSpecs`] with certain `name`.
+fn search_name(database: &sled::Db, name: &str) -> Result<AddressSpecs> {
+    let set = address_specs_set(database)?;
+    let mut found = None;
+    for x in set.into_iter() {
+        if x.name == name {
+            found = Some(x);
+            break;
+        }
+    }
+    match found {
+        Some(a) => Ok(a),
+        None => Err(Error::AddressBookEntryWithName {
+            name: name.to_string(),
+        }),
+    }
+}
+
+/// Make RPC calls and check the received information for given
+/// [`AddressSpecs`].
+///
+/// Checks that the network name, genesis hash, and base58 prefix did not
+/// change compared to what is on record in the database. Warns if the metadata
+/// (`v14`) has incomplete set of signed extensions.
+///
+/// Outputs [`MetaFetched`], the data sufficient to produce `load_metadata`
+/// payload and update the database.
+fn fetch_set_element(set_element: &AddressSpecs) -> Result<MetaFetched> {
+    let meta_fetched = meta_fetch(&set_element.address)?;
+    if meta_fetched.meta_values.name != set_element.name {
+        return Err(Error::ValuesChanged {
+            url: set_element.address.to_string(),
+            what: Changed::Name {
+                old: set_element.name.to_string(),
+                new: meta_fetched.meta_values.name,
+            },
+        });
+    }
+    if meta_fetched.genesis_hash != set_element.genesis_hash {
+        return Err(Error::ValuesChanged {
+            url: set_element.address.to_string(),
+            what: Changed::GenesisHash {
+                old: set_element.genesis_hash,
+                new: meta_fetched.genesis_hash,
+            },
+        });
+    }
+    if let Some(prefix_from_meta) = meta_fetched.meta_values.optional_base58prefix {
+        if prefix_from_meta != set_element.base58prefix {
+            Err(MetadataError::Base58PrefixSpecsMismatch {
+                specs: set_element.base58prefix,
+                meta: prefix_from_meta,
+            })?;
+        }
+    }
+    if meta_fetched.meta_values.warn_incomplete_extensions {
+        warn(
+            &meta_fetched.meta_values.name,
+            meta_fetched.meta_values.version,
+        );
+    }
+    Ok(meta_fetched)
+}
+
+/// Show warning if the metadata (`v14`) has incomplete set of signed extensions.
+fn warn(name: &str, version: u32) {
+    println!("Warning. Metadata {name}{version} has incomplete set of signed extensions, and could cause Vault to fail in parsing signable transactions using this metadata.");
+}
+
+/// `unwasm -payload <wasm_file_path> <optional -d key>`
+///
+/// Generate `load_metadata` payload from `.wasm` files.
+///
+/// Function is intended to be used for metadata not yet published on a node and
+/// only for the networks that have network specs on record in the hot database.
+///
+/// Metadata is retrieved from `.wasm` file itself. To get genesis hash needed
+/// to complete `load_metadata` payload and to check the metadata for
+/// consistency, network name found in the metadata is used to retrieve
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs).
+///
+/// Optional key `-d`, if used, indicates that the metadata entry should **not**
+/// be added to the [`METATREE`] of the hot database.
+pub fn unwasm<P>(database: &sled::Db, filename: &str, update_db: bool, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let meta_values = MetaValues::from_wasm_file(filename)?;
+    let set_element = search_name(database, &meta_values.name)?;
+    if let Some(prefix_from_meta) = meta_values.optional_base58prefix {
+        if prefix_from_meta != set_element.base58prefix {
+            Err(MetadataError::Base58PrefixSpecsMismatch {
+                specs: set_element.base58prefix,
+                meta: prefix_from_meta,
+            })?;
+        }
+    }
+    let genesis_hash = set_element.genesis_hash;
+    if update_db {
+        let meta_values_stamped = MetaValuesStamped {
+            meta_values: meta_values.to_owned(),
+            at_block_hash: None,
+        };
+        let mut sorted_meta_values = prepare_metadata(database)?;
+        let got_meta_update = add_new_metadata(&meta_values_stamped, &mut sorted_meta_values)?;
+        if got_meta_update {
+            println!(
+                "Unwasmed new metadata {}{}",
+                meta_values.name, meta_values.version
+            )
+        } else {
+            println!(
+                "Unwasmed previously known metadata {}{}",
+                meta_values.name, meta_values.version
+            )
+        }
+        db_upd_metadata(database, sorted_meta_values)?;
+    }
+    let shortcut = MetaShortCut {
+        meta_values,
+        genesis_hash,
+    };
+    load_metadata_print(&shortcut, files_dir)
+}
+
+/// `meta_default_file -name <network_name> -version <metadata_version>`
+///
+/// Generate text file with hex string metadata, from a hot database
+/// [`METATREE`] entry, for `defaults` crate.
+pub fn meta_default_file<P>(
+    database: &sled::Db,
+    name: &str,
+    version: u32,
+    export_dir: P,
+) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let meta_values = get_meta_values_by_name_version(database, name, version)?;
+    let file_path = export_dir.as_ref().join(format!("{name}{version}"));
+    std::fs::write(file_path, hex::encode(meta_values.meta))?;
+    Ok(())
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/make_message.rs.html b/rustdocs/src/generate_message/make_message.rs.html new file mode 100644 index 0000000000..f808393bda --- /dev/null +++ b/rustdocs/src/generate_message/make_message.rs.html @@ -0,0 +1,417 @@ +make_message.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+
//! Complete generating update QR code or test string, signed or unsigned
+use constants::ALICE_SEED_PHRASE;
+use definitions::{
+    crypto::{Encryption, SufficientCrypto},
+    metadata::MetaValues,
+    qr_transfers::{ContentAddSpecs, ContentLoadMeta, ContentLoadTypes},
+};
+use qrcode_rtx::make_pretty_qr;
+use sp_core::{ecdsa, ed25519, sr25519, Pair};
+
+use crate::error::{Error, Result};
+use crate::parser::{Crypto, Goal, Make, Msg};
+
+/// Alice seed phrase and derivation `//Alice`, for making updates signed with
+/// test verifier.
+fn alice_secret() -> String {
+    [ALICE_SEED_PHRASE, "//Alice"].concat()
+}
+
+/// Generate and export update based on keys used in command line.
+///
+/// Checks that message content is the one expected and the signature is valid
+/// for provided public key and [`Encryption`]. Generates prelude and assembles
+/// complete update message, then exports it as a QR code or text file with
+/// hex-encoded bytes.
+pub fn make_message(make: Make) -> Result<()> {
+    let vec = make.payload()?;
+    // check message content for consistency
+    //
+    // note that bytes signed and bytes added into concatenated update are not
+    // necessarily the same
+    let (message_to_verify, message_to_transfer, name_stub, msg_type_code) = match make.msg {
+        Msg::LoadTypes => {
+            let content = ContentLoadTypes::from_slice(&vec);
+            content.types()?;
+            (
+                content.to_sign(),
+                content.to_transfer(),
+                String::from("load_types"),
+                "81",
+            )
+        }
+        Msg::LoadMetadata => {
+            let content = ContentLoadMeta::from_slice(&vec);
+            let meta = content.meta()?;
+            let meta_values = MetaValues::from_slice_metadata(&meta)?;
+            (
+                content.to_sign(),
+                content.to_transfer(),
+                format!("load_metadata_{}V{}", meta_values.name, meta_values.version),
+                "80",
+            )
+        }
+        Msg::AddSpecs => {
+            let content = ContentAddSpecs::from_slice(&vec);
+            let network_specs = content.specs()?;
+            (
+                content.to_sign(),
+                content.to_transfer(),
+                format!(
+                    "add_specs_{}-{}",
+                    network_specs.name,
+                    network_specs.encryption.show()
+                ),
+                "c1",
+            )
+        }
+    };
+
+    // adding signature (if any) and finalize the message and filename
+    let (complete_message, complete_name) = match make.crypto()? {
+        // verifier is Alice, make signature here
+        Crypto::Alice { e: encryption } => match encryption {
+            Encryption::Ed25519 => {
+                let crypto_type_code = "00";
+                let prelude = format!("53{crypto_type_code}{msg_type_code}");
+                let ed25519_pair =
+                    ed25519::Pair::from_string(&alice_secret(), None).expect("known Alice secret");
+                let signature = ed25519_pair.sign(&message_to_verify[..]).0.to_vec();
+                let complete_message = [
+                    hex::decode(prelude).expect("known value"),
+                    ed25519_pair.public().to_vec(),
+                    message_to_transfer,
+                    signature,
+                ]
+                .concat();
+                (complete_message, format!("{name_stub}_Alice-ed25519"))
+            }
+            Encryption::Sr25519 => {
+                let crypto_type_code = "01";
+                let prelude = format!("53{crypto_type_code}{msg_type_code}");
+                let sr25519_pair =
+                    sr25519::Pair::from_string(&alice_secret(), None).expect("known Alice secret");
+                let signature = sr25519_pair.sign(&message_to_verify[..]).0.to_vec();
+                let complete_message = [
+                    hex::decode(prelude).expect("known value"),
+                    sr25519_pair.public().to_vec(),
+                    message_to_transfer,
+                    signature,
+                ]
+                .concat();
+                (complete_message, format!("{name_stub}_Alice-sr25519"))
+            }
+            Encryption::Ecdsa | Encryption::Ethereum => {
+                let crypto_type_code = "02";
+                let prelude = format!("53{crypto_type_code}{msg_type_code}");
+                let ecdsa_pair =
+                    ecdsa::Pair::from_string(&alice_secret(), None).expect("known Alice secret");
+                let signature = ecdsa_pair.sign(&message_to_verify[..]).0.to_vec();
+                let complete_message = [
+                    hex::decode(prelude).expect("known value"),
+                    ecdsa_pair.public().0.to_vec(),
+                    message_to_transfer,
+                    signature,
+                ]
+                .concat();
+                (complete_message, format!("{name_stub}_Alice-ecdsa"))
+            }
+        },
+
+        // no verifier
+        Crypto::None => {
+            let crypto_type_code = "ff";
+            let prelude = format!("53{crypto_type_code}{msg_type_code}");
+            let complete_message = [
+                hex::decode(prelude).expect("known value"),
+                message_to_transfer,
+            ]
+            .concat();
+            (complete_message, format!("{name_stub}_unverified"))
+        }
+
+        // real verifier with real signature: check that signature is valid
+        // first
+        Crypto::Sufficient { s } => match s {
+            SufficientCrypto::Ed25519 { public, signature } => {
+                let crypto_type_code = "00";
+                let prelude = format!("53{crypto_type_code}{msg_type_code}");
+                if ed25519::Pair::verify(&signature, &message_to_verify, &public) {
+                    let complete_message = [
+                        hex::decode(prelude).expect("known value"),
+                        public.to_vec(),
+                        message_to_transfer,
+                        signature.0.to_vec(),
+                    ]
+                    .concat();
+                    (complete_message, name_stub)
+                } else {
+                    return Err(Error::BadSignature);
+                }
+            }
+            SufficientCrypto::Sr25519 { public, signature } => {
+                let crypto_type_code = "01";
+                let prelude = format!("53{crypto_type_code}{msg_type_code}");
+                if sr25519::Pair::verify(&signature, &message_to_verify, &public) {
+                    let complete_message = [
+                        hex::decode(prelude).expect("known value"),
+                        public.to_vec(),
+                        message_to_transfer,
+                        signature.0.to_vec(),
+                    ]
+                    .concat();
+                    (complete_message, name_stub)
+                } else {
+                    return Err(Error::BadSignature);
+                }
+            }
+            SufficientCrypto::Ecdsa { public, signature } => {
+                let crypto_type_code = "02";
+                let prelude = format!("53{crypto_type_code}{msg_type_code}");
+                if ecdsa::Pair::verify(&signature, &message_to_verify, &public) {
+                    let complete_message = [
+                        hex::decode(prelude).expect("known value"),
+                        public.0.to_vec(),
+                        message_to_transfer,
+                        signature.0.to_vec(),
+                    ]
+                    .concat();
+                    (complete_message, name_stub)
+                } else {
+                    return Err(Error::BadSignature);
+                }
+            }
+        },
+    };
+
+    let mut output_name = make
+        .name
+        .clone()
+        .unwrap_or_else(|| make.export_dir.join(complete_name));
+
+    match make.goal {
+        Goal::Qr => {
+            make_pretty_qr(&complete_message, &output_name).map_err(Error::Qr)?;
+        }
+        Goal::Text => {
+            output_name.set_extension("txt");
+            std::fs::write(&output_name, hex::encode(&complete_message))?;
+        }
+        Goal::Both => {
+            output_name.set_extension("txt");
+            std::fs::write(&output_name, hex::encode(&complete_message))?;
+            make_pretty_qr(&complete_message, &output_name).map_err(Error::Qr)?;
+        }
+    }
+
+    Ok(())
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/parser.rs.html b/rustdocs/src/generate_message/parser.rs.html new file mode 100644 index 0000000000..ff19fd1894 --- /dev/null +++ b/rustdocs/src/generate_message/parser.rs.html @@ -0,0 +1,1763 @@ +parser.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+
//! Command line parser for the client
+use constants::{COLD_DB_NAME_RELEASE, EXPORT_FOLDER, FOLDER, HOT_DB_NAME};
+use definitions::{
+    crypto::{Encryption, SufficientCrypto},
+    helpers::unhex,
+};
+use sp_core::{ecdsa, ed25519, sr25519};
+use std::{convert::TryInto, path::PathBuf};
+
+use crate::{error::Result, Error};
+use parity_scale_codec::Decode;
+
+use clap::{Args, Parser, Subcommand};
+
+/// Polkadot Vault data manipulation tool.
+#[derive(Debug, Parser)]
+pub struct Cli {
+    #[clap(subcommand)]
+    pub command: Command,
+}
+
+#[derive(Debug, Subcommand)]
+pub enum Command {
+    /// Display content of the a given tree of the hot database
+    Show {
+        #[clap(subcommand)]
+        s: Show,
+
+        /// Path to the hot database
+        #[arg(long= "hot-db-path", global = true, value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+        db_path: PathBuf,
+    },
+
+    /// Prepare payload for add-specs update
+    ///
+    /// This will remove:
+    /// - address book entry
+    /// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) from
+    /// [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree
+    /// - network specs
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+    /// from [`SPECSTREEPREP`](constants::SPECSTREEPREP) tree
+    /// - all associated metadata entries from [`METATREE`](constants::METATREE)
+    /// if there are no other address book entries this metadata is associated
+    /// with
+    /// - all associated meta block history entries from
+    /// [`META_HISTORY`](constants::META_HISTORY) if there are no other address book
+    /// entries this block history entries are associated with
+    #[command(name = "add-specs")]
+    Specs {
+        #[clap(flatten)]
+        s: InstructionSpecs,
+    },
+
+    /// Prepare payload for load-metadata update
+    #[command(name = "load-metadata")]
+    Load(InstructionMeta),
+
+    /// Prepare payload for load-types update
+    #[command(name = "load-types")]
+    Types {
+        /// Path to hot db
+        #[arg(long= "hot-db-path", value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+        db_path: PathBuf,
+
+        /// Folder to save payloads ready for signing
+        #[arg(long, value_name = "FOLDER_PATH", default_value = FOLDER)]
+        files_dir: PathBuf,
+    },
+
+    /// Complete update generation according
+    Make(Make),
+
+    /// Sign
+    Sign(Make),
+
+    /// Remove all data associated with a network
+    ///
+    /// This will remove:
+    /// - address book entry
+    /// [`AddressBookEntry`](definitions::metadata::AddressBookEntry) from
+    /// [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree
+    /// - network specs
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+    /// from [`SPECSTREEPREP`](constants::SPECSTREEPREP) tree
+    /// - all associated metadata entries from [`METATREE`](constants::METATREE)
+    /// if there are no other address book entries this metadata is associated
+    /// with
+    /// - all associated meta block history entries from
+    /// [`META_HISTORY`](constants::META_HISTORY) if there are no other address book
+    /// entries this block history entries are associated with
+    Remove {
+        #[clap(subcommand)]
+        r: Remove,
+
+        /// Path to the hot database
+        #[arg(long="hot-db-path", global=true, value_name="HOT_DB_PATH", default_value = HOT_DB_NAME)]
+        db_path: PathBuf,
+    },
+
+    /// Restore hot database to default state
+    ///
+    /// Removes old hot database and generates new one with default values at
+    /// default path [`HOT_DB_NAME`](constants::HOT_DB_NAME).
+    ///
+    /// By default, hot database contains:
+    ///
+    /// - [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) entries for default networks
+    /// - [`SPECSTREEPREP`](constants::SPECSTREEPREP) entries for default networks
+    /// - types information in [`SETTREE`](constants::SETTREE)
+    /// - **no** metadata entries in [`METATREE`](constants::METATREE)
+    /// - **no** meta block history entries in
+    /// [`META_HISTORY`](constants::META_HISTORY)
+    ///
+    /// Default networks are Polkadot, Kusama, and Westend.
+    RestoreDefaults {
+        /// Path to hot db
+        #[arg(long = "hot-db-path", value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+        db_path: PathBuf,
+    },
+
+    /// Generate release cold database at optionally provided path
+    ///
+    /// Removes old cold release database and generates new one with default values
+    /// (uninitiated) at user-provided path or, if no valid path is given, at
+    /// default path [`COLD_DB_NAME_RELEASE`](constants::COLD_DB_NAME_RELEASE).
+    ///
+    /// By default, the uninitiated cold release database contains:
+    ///
+    /// - [`SPECSTREE`](constants::SPECSTREE) entries for default networks
+    /// - [`VERIFIERS`](constants::VERIFIERS) entries for default networks, with
+    /// verifiers set to the general one
+    /// - two latest metadata versions for default networks in
+    /// [`METATREE`](constants::METATREE)
+    /// - default types information and clean danger status in
+    /// [`SETTREE`](constants::SETTREE)
+    ///
+    /// Note that the general verifier is not specified and history is not
+    /// started. This will be done only in Vault itself. Before initialization,
+    /// the cold release database could not be used by Vault.
+    MakeColdRelease {
+        /// Path to release db
+        path: Option<PathBuf>,
+    },
+
+    /// Transfer metadata from hot database to release cold database
+    ///
+    /// Metadata from hot database is transferred to cold release database at
+    /// user-provided path or, if no valid path is given, at default path
+    /// [`COLD_DB_NAME_RELEASE`](constants::COLD_DB_NAME_RELEASE).
+    ///
+    /// Metadata is transferred only for the networks that are known to the cold
+    /// database, i.e. the ones having
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry in
+    /// [`SPECSTREE`](constants::SPECSTREE).
+    #[command(name = "transfer-meta")]
+    TransferMetaToColdRelease {
+        /// Path to release db
+        #[arg(long, value_name = "COLD_DB_PATH", default_value = COLD_DB_NAME_RELEASE)]
+        cold_db: PathBuf,
+
+        /// Path to hot db
+        #[arg(long, value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+        hot_db: PathBuf,
+    },
+
+    /// Prepare payload for `load_metadata` update from `.wasm` file
+    ///
+    /// This command extracts metadata from `.wasm` file and uses this metadata to
+    /// produce `load_metadata` update payload. Only networks with network specs
+    /// entries in the hot database could be processed with `unwasm` command, since
+    /// the `load_metadata` update payload in addition to metadata requires also
+    /// network genesis hash. `unwasm` command could be used to generate update QR
+    /// codes before the metadata becomes accessible from the node.
+    ///
+    /// Network name found in the metadata is used to find
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) for
+    /// the network. `NetworkSpecs` are used to get genesis hash and to check
+    /// base58 prefix, it the network metadata has base58 prefix inside.
+    ///
+    /// A raw bytes update payload file is generated in dedicated
+    /// [`FOLDER`](constants::FOLDER) to (optionally) be signed and later be
+    /// transformed into `load_metadata` update QR. Update payload file name is
+    /// `sign_me_load_metadata_<network_name>V<version>`.
+    ///
+    /// By default, metadata extracted from `.wasm` file is added to the database.
+    /// Optional `-d` key could be used is database should **not** be updated.
+    /// If the metadata gets entered in the database (i.e. no `-d` key used),
+    /// [`META_HISTORY`](constants::META_HISTORY) gets no entry. Block hash will be
+    /// added if the same metadata is later fetched from a node.
+    Unwasm {
+        /// WASM file
+        #[arg(long, short)]
+        filename: String,
+
+        /// update the DB.
+        #[arg(long, short)]
+        update_db: bool,
+
+        /// Hot database path
+        #[arg(long= "hot-db-path", value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+        db_path: PathBuf,
+
+        /// Folder to save payloads ready for signing
+        #[arg(long, default_value = FOLDER)]
+        files_dir: PathBuf,
+    },
+
+    /// Make file with hexadecimal metadata for defaults release metadata set
+    ///
+    /// Produces file with hex-encoded network metadata from the hot database
+    /// [`METATREE`](constants::METATREE) entry.
+    ///
+    /// Output file named `<network_name><metadata_version>` is generated in
+    /// dedicated [`EXPORT_FOLDER`](constants::EXPORT_FOLDER). It contains
+    /// hexadecimal network metadata.
+    MetaDefaultFile {
+        /// File name
+        #[arg(long, value_name = "NETWORK NAME")]
+        name: String,
+
+        /// Version
+        #[arg(long, value_name = "NETWORK VERSION")]
+        version: u32,
+
+        /// Hot database path
+        #[arg(long= "hot-db-path", value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+        db_path: PathBuf,
+
+        /// Folder to save completed update messages
+        #[arg(long, default_value = EXPORT_FOLDER)]
+        export_dir: PathBuf,
+    },
+
+    /// Create file with network metadata at block hash
+    ///
+    /// Output file named `<network_name><metadata_version>_<block_hash>` is
+    /// generated in dedicated folder.
+    /// It contains hexadecimal network metadata.
+    /// This command does not address or update the hot database.
+    MetaAtBlock {
+        /// URL of the chain RPC point
+        #[arg(long, value_name = "RPC URL")]
+        url: String,
+
+        /// Hash of the block at which meta is asked
+        #[arg(long, value_name = "BLOCK HASH")]
+        block_hash: String,
+
+        /// Folder to save completed update messages
+        #[arg(long, default_value = EXPORT_FOLDER)]
+        export_dir: PathBuf,
+    },
+
+    /// Encode payload to multiframe QR
+    #[command(group(clap::ArgGroup::new("encodekey")
+                .required(true)
+                .args(&["path", "hex"])
+    ))]
+    EncodeToQr {
+        /// Path to a file to encode
+        #[arg(long, value_name = "FILE PATH")]
+        path: Option<PathBuf>,
+
+        /// Hex-encoded payload to encode
+        #[arg(long, value_name = "HEX ENCODED PAYLOAD")]
+        hex: Option<String>,
+
+        /// Size of a chunk in a multiframe RaptorQ encoding
+        #[arg(long, default_value = "128", value_name = "SIZE OF CHUNK")]
+        chunk_size: u16,
+
+        /// Destination file to write qr code to
+        #[arg(long, value_name = "FILE")]
+        dst_file: PathBuf,
+    },
+
+    /// Produce a test key info export QR
+    KeyInfoExportToQr {
+        #[arg(long, value_name = "FILE PATH")]
+        dst_file: PathBuf,
+
+        /// Size of a chunk in a multiframe RaptorQ encoding.
+        #[arg(long, value_name = "CHUNK SIZE")]
+        chunk_size: u16,
+
+        /// FPS of a multiframe RaptorQ encoding
+        #[arg(long, value_name = "FPS OF VIDEO QR")]
+        fps: u16,
+
+        /// Number of keys to generate and export
+        #[arg(long, value_name = "NUMBER OF TEST KEYS")]
+        keys_num: usize,
+    },
+
+    /// Produce a bulk tx signing QR
+    BulkTransactionTestPayload {
+        #[arg(long, value_name = "FILE PATH")]
+        dst_file: PathBuf,
+
+        /// Number of transactions in a bulk.
+        #[arg(long, value_name = "TX COUNT")]
+        tx_count: usize,
+
+        /// Size of a chunk in a multiframe RaptorQ encoding.
+        #[arg(long, value_name = "CHUNK SIZE")]
+        chunk_size: u16,
+
+        /// AccountId of transaction in hex form.
+        #[arg(long, value_name = "ADDRESS")]
+        from: String,
+
+        /// Qr or File
+        #[arg(long, value_name = "OUTPUT FORMAT")]
+        output_format: Goal,
+    },
+}
+
+/// Display data commands.
+#[derive(Clone, Debug, Subcommand)]
+pub enum Show {
+    /// Show all hot database entries
+    Metadata,
+
+    /// Show all hot database entries
+    Networks,
+
+    /// Show network specs from entry.
+    Specs {
+        #[arg(value_name = "ADDRESS BOOK TITLE")]
+        /// Address book title
+        s: String,
+    },
+
+    /// Check that external file is valid network metadata and search for
+    /// similar entry in hot database
+    CheckFile {
+        #[arg(value_name = "METADATA FILE")]
+        /// Path to metadata file
+        s: String,
+    },
+
+    /// Show all entries from `META_HISTORY` tree
+    BlockHistory,
+}
+
+/// Command details for `load-metadata`.
+#[derive(clap::Args, Debug)]
+pub struct InstructionMeta {
+    /// Setting key, as read from command line
+    #[clap(flatten)]
+    pub set: SetFlags,
+
+    /// Reference key, as read from command line
+    #[clap(flatten)]
+    pub content: ContentArgs,
+
+    /// Path to the hot database
+    #[arg(long= "hot-db-path", value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+    pub db: PathBuf,
+
+    /// Folder to save payloads ready for signing
+    #[arg(long, default_value = FOLDER)]
+    pub files_dir: PathBuf,
+}
+
+impl From<SetFlags> for Set {
+    fn from(set: SetFlags) -> Self {
+        match (set.d, set.f, set.k, set.p, set.t) {
+            (true, false, false, false, false) => Set::D,
+            (false, true, false, false, false) => Set::F,
+            (false, false, true, false, false) => Set::K,
+            (false, false, false, true, false) => Set::P,
+            (false, false, false, false, true) => Set::T,
+            _ => panic!("mutually exclusive args"),
+        }
+    }
+}
+
+/// Command details for `add-specs`.
+#[derive(clap::Args, Debug)]
+#[command(group(clap::ArgGroup::new("referencekey")
+                .required(true)
+                .args(&["all", "name", "address"])
+))]
+pub struct InstructionSpecs {
+    #[clap(flatten)]
+    pub set: SetFlags,
+
+    /// Overrides, relevant only for `add-specs` command
+    #[clap(flatten)]
+    pub over: Override,
+
+    #[clap(flatten)]
+    pub content: ContentArgs,
+
+    /// Path to the hot database
+    #[arg(long = "hot-db-path", value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+    pub db: PathBuf,
+
+    /// Folder to save payloads ready for signing
+    #[arg(long, default_value = FOLDER)]
+    pub files_dir: PathBuf,
+}
+
+#[derive(clap::Args, Debug, Default, Clone)]
+pub struct ContentArgs {
+    /// Deal with all relevant database entries
+    #[arg(long, short)]
+    pub all: bool,
+
+    /// Process only a specified network
+    #[arg(long, short)]
+    pub name: Option<String>,
+
+    /// Process only the network referred to by URL address
+    #[arg(short = 'u', long = "url")]
+    pub address: Option<String>,
+
+    /// Skip errors
+    #[arg(long)]
+    pub pass_errors: bool,
+}
+
+impl From<ContentArgs> for Content {
+    fn from(args: ContentArgs) -> Self {
+        match (args.all, &args.name, &args.address) {
+            (true, None, None) => Content::All {
+                pass_errors: args.pass_errors,
+            },
+            (false, Some(name), None) => Content::Name { s: name.clone() },
+            (false, None, Some(address)) => Content::Address { s: address.clone() },
+            _ => panic!("mutually exclusive flags"),
+        }
+    }
+}
+
+/// Reference key for `load-metadata` and `add-specs` commands.
+#[derive(Subcommand, Debug)]
+pub enum Content {
+    /// Deal with all relevant database entries
+    All {
+        #[arg(short)]
+        /// Skip errors
+        pass_errors: bool,
+    },
+
+    /// Process only a specified network
+    Name {
+        /// network name or network address book title
+        #[arg(long, short)]
+        s: String,
+    },
+
+    /// Process only the network referred to by URL address
+    Address {
+        /// Network address
+        #[arg(long, short)]
+        s: String,
+    },
+}
+
+/// Setting key for `load-metadata` and `add-specs` commands.
+#[derive(clap::ValueEnum, Clone, Debug)]
+pub enum Set {
+    /// Key `-d`: do **not** update the database, make RPC calls, and produce
+    /// output files
+    #[value(name = "-d")]
+    D,
+
+    /// Key `-f`: do **not** run RPC calls, produce output files from database
+    /// as it is
+    #[value(name = "-f")]
+    F,
+
+    /// Key `-k`: update database through RPC calls, produce output files only
+    /// for **updated** database entries
+    #[value(name = "-k")]
+    K,
+
+    /// Key `-p`: update database through RPC calls, do **not** produce any
+    /// output files
+    #[value(name = "-p")]
+    P,
+
+    /// Key `-t` (no setting key defaults here): update database through RPC
+    /// calls, produce output files
+    #[value(name = "-t")]
+    T,
+}
+
+#[derive(clap::Args, Default, Clone, Debug)]
+#[command(group(clap::ArgGroup::new("setflags")
+                .required(true)
+                .args(&["d", "f", "k", "p", "t"])
+))]
+pub struct SetFlags {
+    /// do not update the database, make RPC calls, and produce output files
+    #[arg(short = 'd')]
+    pub d: bool,
+
+    /// do not run RPC calls, produce output files from database as it is
+    #[arg(short = 'f')]
+    pub f: bool,
+
+    /// update database through RPC calls, produce output files only
+    /// for updated database entries
+    #[arg(short = 'k')]
+    pub k: bool,
+
+    /// update database through RPC calls, do **not** produce any output files
+    #[arg(short = 'p')]
+    pub p: bool,
+
+    /// (no setting key defaults here): update database through RPC
+    /// calls, produce output files
+    #[arg(short = 't')]
+    pub t: bool,
+}
+
+impl std::fmt::Display for Set {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        write!(f, "{self:?}")
+    }
+}
+
+/// Data to process `make` and `sign` commands.
+#[derive(clap::Args, Debug)]
+pub struct Make {
+    /// payload
+    #[arg(long)]
+    pub msg: Msg,
+
+    #[arg(long)]
+    pub payload: PathBuf,
+
+    /// target output format
+    #[arg(long, default_value_t = Goal::Both)]
+    pub goal: Goal,
+
+    #[clap(flatten)]
+    pub verifier: Verifier,
+
+    #[clap(flatten)]
+    pub signature: Signature,
+
+    #[clap(flatten)]
+    pub sufficient: Sufficient,
+
+    /// who is signing the payload
+    #[arg(long, value_name = "crypto", value_parser = encryption_from_args)]
+    pub crypto: Option<Encryption>,
+
+    /// output name override
+    #[arg(long, value_name = "name")]
+    pub name: Option<PathBuf>,
+
+    /// Folder to save payloads ready for signing
+    #[arg(long, default_value = FOLDER)]
+    pub files_dir: PathBuf,
+
+    /// Folder to save completed update messages
+    #[arg(long, default_value = EXPORT_FOLDER)]
+    pub export_dir: PathBuf,
+}
+
+impl Make {
+    pub fn payload(&self) -> Result<Vec<u8>> {
+        Ok(std::fs::read(self.files_dir.join(&self.payload))?)
+    }
+
+    pub fn crypto(&self) -> Result<Crypto> {
+        if let Some(s) = match (
+            &self.sufficient.sufficient_hex,
+            &self.sufficient.sufficient_file,
+        ) {
+            (Some(hex), None) => Some(unhex(hex)?),
+            (None, Some(path)) => {
+                let sufficient_filename = &self.files_dir.join(path);
+                Some(std::fs::read(sufficient_filename)?)
+            }
+            _ => None,
+        } {
+            let s = <SufficientCrypto>::decode(&mut &s[..])?;
+            return Ok(Crypto::Sufficient { s });
+        }
+        let verifier_public_key = match (
+            self.verifier.verifier_alice,
+            &self.verifier.verifier_hex,
+            &self.verifier.verifier_file,
+        ) {
+            (Some(e), None, None) => return Ok(Crypto::Alice { e }),
+            (None, Some(hex), None) => unhex(hex)?,
+            (None, None, Some(path)) => {
+                let verifier_filename = &self.files_dir.join(path);
+                std::fs::read(verifier_filename)?
+            }
+            f => {
+                if self.signature.signature_file.is_none() && self.signature.signature_hex.is_none()
+                {
+                    return Ok(Crypto::None);
+                } else {
+                    panic!("mutually exclusive flags: {:?}", f);
+                }
+            }
+        };
+
+        let signature = match (
+            &self.signature.signature_hex,
+            &self.signature.signature_file,
+        ) {
+            (Some(hex), None) => unhex(hex)?,
+            (None, Some(path)) => {
+                let signature_filename = &self.files_dir.join(path);
+                std::fs::read(signature_filename)?
+            }
+            f => panic!("mutually exclusive flags: {:?}", f),
+        };
+
+        Ok(Crypto::Sufficient {
+            s: into_sufficient(verifier_public_key, signature, self.crypto.unwrap())?,
+        })
+    }
+}
+
+/// Target output format for `derivations`, `make` and `sign` commands.
+#[derive(clap::ValueEnum, Debug, Clone)]
+pub enum Goal {
+    /// Only QR code
+    Qr,
+
+    /// Only text file with hexadecimal string (used for tests)
+    Text,
+
+    /// Both QR code and text file, default
+    Both,
+}
+
+impl std::fmt::Display for Goal {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        let s = match self {
+            Goal::Qr => "qr",
+            Goal::Text => "text",
+            Goal::Both => "both",
+        };
+        write!(f, "{s}")
+    }
+}
+
+/// Verifier-to-be, for `make` and `sign` commands.
+#[derive(clap::Args, Debug, Clone)]
+#[command(group(clap::ArgGroup::new("verifier")
+                .args(&["verifier_alice", "verifier_hex", "verifier_file"])
+        ))]
+pub struct Verifier {
+    /// Use Alice key with a specified encryption scheme
+    #[arg(long, value_name = "alice", value_parser = encryption_from_args)]
+    pub verifier_alice: Option<Encryption>,
+
+    /// Specify Verifier as a hex string argument
+    #[arg(long, value_name = "HEX")]
+    pub verifier_hex: Option<String>,
+
+    /// Read Verifier from a file
+    #[arg(long, value_name = "FILE")]
+    pub verifier_file: Option<PathBuf>,
+}
+
+/// Verifier-to-be, for `make` and `sign` commands.
+pub enum Crypto {
+    /// Alice key
+    Alice {
+        /// Encryption scheme to use
+        e: Encryption,
+    },
+
+    /// No verifier, to make unsigned updates.
+    None,
+
+    /// Real verifier, [`SufficientCrypto`] is either assembled from `make`
+    /// command input parts or from `sign` command input directly.
+    Sufficient { s: SufficientCrypto },
+}
+
+#[derive(clap::Args, Debug, Clone)]
+#[command(group(clap::ArgGroup::new("signature")
+                .args(&["signature_hex", "signature_file"])
+        ))]
+pub struct Signature {
+    /// Supply signature in hex format as command line argument
+    #[arg(long, value_name = "HEX")]
+    pub signature_hex: Option<String>,
+
+    /// Read signature from a file
+    #[arg(long, value_name = "FILE")]
+    pub signature_file: Option<String>,
+}
+
+#[derive(clap::Args, Debug, Clone)]
+#[command(group(clap::ArgGroup::new("sufficient")
+                .args(&["sufficient_hex", "sufficient_file"])
+        ))]
+pub struct Sufficient {
+    /// Supply signature in hex format as command line argument
+    #[arg(long, value_name = "HEX")]
+    pub sufficient_hex: Option<String>,
+
+    /// Read signature from a file
+    #[arg(long, value_name = "FILE")]
+    pub sufficient_file: Option<String>,
+}
+/// Payload for `make` and `sign` commands.
+///
+/// Associated data is `Vec<u8>` blob that becomes part of the update.
+///
+/// Payload content details are described in [`definitions::qr_transfers`].
+#[derive(clap::ValueEnum, Clone, Debug)]
+pub enum Msg {
+    /// `load-types` payload
+    LoadTypes,
+
+    /// `load-metadata` payload
+    LoadMetadata,
+
+    /// `add-specs` payload
+    AddSpecs,
+}
+
+/// Data to process `remove` command.
+#[derive(clap::Subcommand, Clone, Debug)]
+pub enum Remove {
+    /// Removing all network data by network address book title.
+    ///
+    /// Associated data is user-entered network address book title.
+    Title { t: String },
+
+    /// Remove specified network metadata entry.
+    ///
+    /// Associated data is network name and version.
+    SpecNameVersion { name: String, version: u32 },
+}
+
+/// Data to process `derivations` command.
+#[derive(clap::Args, Clone, Debug)]
+pub struct Derivations {
+    /// Target output format
+    #[arg(long)]
+    pub goal: Goal,
+
+    /// Address book title for network in which addresses with imported
+    /// derivations will be made in Vault
+    #[arg(long)]
+    pub title: String,
+
+    /// Contents of the payload file
+    #[arg(long)]
+    pub derivations: String,
+
+    /// Path to the hot database
+    #[arg(long= "hot-db-path", value_name = "HOT_DB_PATH", default_value = HOT_DB_NAME)]
+    pub db: PathBuf,
+}
+
+/// Overrides for `add-specs` command.
+#[derive(Args, Debug)]
+pub struct Override {
+    /// [`Encryption`] override to specify encryption algorithm used by a new
+    /// network or to add another encryption algorithm in known network.
+    #[arg(long, value_parser = encryption_from_args)]
+    pub encryption: Option<Encryption>,
+
+    /// Network title override, so that user can specify the network title in
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+    /// that determines under what title the network is displayed in the Vault
+    #[arg(long)]
+    pub title: Option<String>,
+
+    /// Token override to specify decimals used to display balance in
+    /// network transactions.
+    ///
+    /// Token override could be invoked only if:
+    ///
+    /// - network has no database record yet
+    /// - network has multiple decimals and unit values, those were retrieved as
+    /// arrays of equal size.
+    #[arg(long)]
+    pub token_decimals: Option<u8>,
+
+    /// Token override to specify units used to display balance in
+    /// network transactions.
+    ///
+    /// Token override could be invoked only if:
+    ///
+    /// - network has no database record yet
+    /// - network has multiple decimals and unit values, those were retrieved as
+    /// arrays of equal size.
+    #[arg(long)]
+    pub token_unit: Option<String>,
+}
+
+impl Override {
+    pub fn token(&self) -> Option<Token> {
+        match (self.token_decimals, self.token_unit.as_ref()) {
+            (Some(d), Some(u)) => Some(Token {
+                decimals: d,
+                unit: u.clone(),
+            }),
+            _ => None,
+        }
+    }
+}
+
+fn encryption_from_args(s: &str) -> std::result::Result<Encryption, &'static str> {
+    match s {
+        "ed25519" => Ok(Encryption::Ed25519),
+        "sr25519" => Ok(Encryption::Sr25519),
+        "ecdsa" => Ok(Encryption::Ecdsa),
+        "ethereum" => Ok(Encryption::Ethereum),
+        _ => {
+            Err("unexpected encryption type, expected `ed25519`, `sr25519`, `ecdsa` or `ethereum`")
+        }
+    }
+}
+
+impl Override {
+    /// Flag to indicate that no overrides were invoked.
+    pub fn all_empty(&self) -> bool {
+        self.encryption.is_none() && self.title.is_none() && self.token().is_none()
+    }
+}
+
+/// Data from command line for token override.
+#[derive(Debug)]
+pub struct Token {
+    /// Decimals of the token
+    pub decimals: u8,
+
+    /// Units of the token
+    pub unit: String,
+}
+
+fn vec_to_pubkey_array<const N: usize>(v: Vec<u8>) -> Result<[u8; N]> {
+    v.try_into()
+        .map_err(|e: Vec<_>| Error::PublicKeyWrongLength(N, e.len()))
+}
+
+fn vec_to_signature_array<const N: usize>(v: Vec<u8>) -> Result<[u8; N]> {
+    v.try_into()
+        .map_err(|e: Vec<_>| Error::SignatureWrongLength(N, e.len()))
+}
+
+/// Fit public key and signature drafts into [`SufficientCrypto`].
+fn into_sufficient(
+    verifier_public_key: Vec<u8>,
+    signature: Vec<u8>,
+    encryption: Encryption,
+) -> Result<SufficientCrypto> {
+    match encryption {
+        Encryption::Ed25519 => {
+            let into_pubkey = vec_to_pubkey_array(verifier_public_key)?;
+            let public = ed25519::Public::from_raw(into_pubkey);
+            let into_sign = vec_to_signature_array(signature)?;
+            let signature = ed25519::Signature::from_raw(into_sign);
+            Ok(SufficientCrypto::Ed25519 { public, signature })
+        }
+        Encryption::Sr25519 => {
+            let into_pubkey = vec_to_pubkey_array(verifier_public_key)?;
+            let public = sr25519::Public::from_raw(into_pubkey);
+            let into_sign = vec_to_signature_array(signature)?;
+            let signature = sr25519::Signature::from_raw(into_sign);
+            Ok(SufficientCrypto::Sr25519 { public, signature })
+        }
+        Encryption::Ecdsa | Encryption::Ethereum => {
+            let into_pubkey = vec_to_pubkey_array(verifier_public_key)?;
+            let public = ecdsa::Public::from_raw(into_pubkey);
+            let into_sign = vec_to_signature_array(signature)?;
+            let signature = ecdsa::Signature::from_raw(into_sign);
+            Ok(SufficientCrypto::Ecdsa { public, signature })
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/remove.rs.html b/rustdocs/src/generate_message/remove.rs.html new file mode 100644 index 0000000000..aa90097187 --- /dev/null +++ b/rustdocs/src/generate_message/remove.rs.html @@ -0,0 +1,269 @@ +remove.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+
//! Removing data from the hot database
+//!
+//! Users can remove from the database a single metadata entry for the network
+//! or all information about the network altogether.
+//!
+//! ## Remove a metadata entry
+//!
+//! ### Command line
+//!
+//! `$ cargo run remove -name <network_name> -version <network_version>`
+//!
+//! ### Example
+//!
+//! `$ cargo run remove -name westend -version 9200`
+//!
+//! Note that this will remove only the selected metadata from [`METATREE`] tree
+//! and will not affect [`ADDRESS_BOOK`](constants::ADDRESS_BOOK),
+//! [`META_HISTORY`] or [`SPECSTREEPREP`](constants::SPECSTREEPREP) trees of the
+//! database.
+//!
+//! If the same version of the network metadata is loaded again, the
+//! [`META_HISTORY`] entry get rewritten, so that the metadata and block hash
+//! are always matching in the database.
+//!
+//! ## Remove all data associated with a network
+//!
+//! ### Command line
+//!
+//! `$ cargo run remove title <address_book_title>`
+//!
+//! Network title in the address book is unique identifier for a network with
+//! given encryption. It always is constructed as
+//! `<network_name>-<network_encryption>`.
+//!
+//! Removed data associated with the address book title consists of:
+//!
+//! - address book entry
+//! [`AddressBookEntry`](definitions::metadata::AddressBookEntry) from
+//! [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree
+//! - network specs
+//! [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) from
+//! [`SPECSTREEPREP`](constants::SPECSTREEPREP) tree
+//! - all associated metadata entries from [`METATREE`] if there are no other
+//! address book entries this metadata is associated with
+//! - all associated meta block history entries from [`META_HISTORY`] if there
+//! are no other address book entries this block history entries are associated
+//! with
+//!
+//! Note that single address book entry corresponds to single network specs
+//! entry, and they are created and removed always simultaneously.
+//!
+//! ### Example
+//!
+//! `$ cargo run remove title westend-sr25519`
+//!
+//! If one of the default networks gets removed, it could be added back,
+//! however, it will not be marked as default anymore.
+use constants::{METATREE, META_HISTORY};
+use db_handling::{
+    db_transactions::TrDbHot,
+    helpers::{get_meta_values_by_name_version, open_tree},
+};
+use definitions::keyring::{AddressBookKey, MetaKey, MetaKeyPrefix, NetworkSpecsKey};
+use sled::Batch;
+
+use crate::error::Result;
+use crate::helpers::{get_address_book_entry, is_specname_in_db};
+use crate::parser::Remove;
+
+/// Remove information from the database.
+pub fn remove_info(database: &sled::Db, info: Remove) -> Result<()> {
+    match info {
+        // network data by the address book title
+        Remove::Title { t: network_title } => {
+            // init `Batch` for `ADDRESS_BOOK`, `SPECSTREEPREP`, `METADATA` and
+            // `META_HISTORY`
+            let mut address_book_batch = Batch::default();
+            let mut metadata_batch = Batch::default();
+            let mut meta_history_batch = Batch::default();
+            let mut network_specs_prep_batch = Batch::default();
+
+            // get `ADDRESS_BOOK` entry for the title
+            let address_book_entry = get_address_book_entry(database, &network_title)?;
+
+            // make `NetworkSpecsKey` using data in `ADDRESS_BOOK` entry
+            let network_specs_key = NetworkSpecsKey::from_parts(
+                &address_book_entry.genesis_hash,
+                &address_book_entry.encryption,
+            );
+
+            // finalize `Batch` for `ADDRESS_BOOK`
+            address_book_batch.remove(AddressBookKey::from_title(&network_title).key());
+
+            // finalize `Batch` for `SPECSTREEPREP`
+            network_specs_prep_batch.remove(network_specs_key.key());
+
+            // if the address book has no more entries with same network name,
+            // except the one currently being removed, the metadata and
+            // the block history entries get removed
+            if !is_specname_in_db(database, &address_book_entry.name, &network_title)? {
+                let metadata = open_tree(database, METATREE)?;
+                let meta_history = open_tree(database, META_HISTORY)?;
+                let meta_key_prefix = MetaKeyPrefix::from_name(&address_book_entry.name);
+                for (x, _) in metadata.scan_prefix(meta_key_prefix.prefix()).flatten() {
+                    // add element to `Batch` for `METATREE`
+                    metadata_batch.remove(x)
+                }
+                for (x, _) in meta_history.scan_prefix(meta_key_prefix.prefix()).flatten() {
+                    // add element to `Batch` for `META_HISTORY`
+                    meta_history_batch.remove(x)
+                }
+            }
+            TrDbHot::new()
+                .set_address_book(address_book_batch)
+                .set_metadata(metadata_batch)
+                .set_meta_history(meta_history_batch)
+                .set_network_specs_prep(network_specs_prep_batch)
+                .apply(database)?;
+        }
+
+        // network metadata by network name and version
+        Remove::SpecNameVersion { name, version } => {
+            let mut metadata_batch = Batch::default();
+            get_meta_values_by_name_version(database, &name, version)?;
+            let meta_key = MetaKey::from_parts(&name, version);
+            metadata_batch.remove(meta_key.key());
+            TrDbHot::new()
+                .set_metadata(metadata_batch)
+                .apply(database)?;
+        }
+    };
+
+    Ok(())
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/show.rs.html b/rustdocs/src/generate_message/show.rs.html new file mode 100644 index 0000000000..f9ff7260d1 --- /dev/null +++ b/rustdocs/src/generate_message/show.rs.html @@ -0,0 +1,455 @@ +show.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+
//! Utils to display the database content and to verify default metadata files
+use db_handling::helpers::try_get_meta_values_by_name_version;
+use definitions::{
+    metadata::{AddressBookEntry, MetaValues},
+    network_specs::NetworkSpecs,
+};
+use sp_core::blake2_256;
+
+use crate::error::Result;
+use crate::helpers::{
+    address_book_content, meta_history_content, network_specs_from_entry, network_specs_from_title,
+    read_metadata_database,
+};
+
+/// Display all metadata currently stored in the hot database.
+///
+/// Function prints for each entry in hot database
+/// [`METATREE`](constants::METATREE) tree:
+///
+/// - network name
+/// - network version
+/// - hexadecimal metadata hash
+/// - block hash at which the metadata was fetched if on record, from
+/// [`META_HISTORY`](constants::META_HISTORY) tree
+///
+/// It could be called by:
+///
+/// `$ cargo run show -metadata`
+///
+/// When generated, hot database has no metadata entries. All entries are
+/// expected to appear as a result of the database use, either from RPC calls or
+/// `wasm` files processing.
+///
+/// Network name and version combination is unique identifier of the metadata.
+///
+/// Metadata hashes could be used to compare metadata contents.
+///
+/// Block hash could be used to retrieve later the metadata from exactly same
+/// block if there is a need to compare metadata from different blocks.
+pub fn show_metadata(database: &sled::Db) -> Result<()> {
+    let meta_values_stamped_set = read_metadata_database(database)?;
+    if meta_values_stamped_set.is_empty() {
+        println!("Database has no metadata entries.");
+        return Ok(());
+    }
+    println!("Database has metadata information for following networks:\n");
+    for x in meta_values_stamped_set.iter() {
+        let block_hash_insert = match x.at_block_hash {
+            Some(h) => format!("fetched at block hash {}", hex::encode(h)),
+            None => String::from("no block hash on record"),
+        };
+        println!(
+            "{} {}, metadata hash {}, {}",
+            x.meta_values.name,
+            x.meta_values.version,
+            hash_string(&x.meta_values.meta),
+            block_hash_insert
+        );
+    }
+    Ok(())
+}
+
+/// Show current state of the hot database address book
+///
+/// Function prints for each entry in hot database
+/// [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) tree:
+///
+/// - address book title for the network
+/// - URL address at which RPC calls are made for the network
+/// - network encryption
+/// - additional marker that the network is a default one
+/// - network title as it will be displayed in Vault, from
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) in
+/// [`SPECSTREEPREP`](constants::SPECSTREEPREP) tree
+///
+/// It could be called by:
+///
+/// `$ cargo run show -networks`
+///
+/// When generated, hot database has address book entries for Polkadot, Kusama,
+/// and Westend. Other entries appear as a result of the database usage.
+///
+/// Address book title is `<network_name>-<network_encryption>` and does not
+/// necessarily coincide with network title as displayed by the Vault.
+///
+/// Address book title is used to address networks when making `add_specs`
+/// update payloads or inspecting existing network specs.
+pub fn show_networks(database: &sled::Db) -> Result<()> {
+    let address_book_set = address_book_content(database)?;
+    if address_book_set.is_empty() {
+        println!("Address book is empty.");
+        return Ok(());
+    }
+    struct SetPart {
+        title: String,
+        address_book_entry: AddressBookEntry,
+        network_specs: NetworkSpecs,
+    }
+    let mut set: Vec<SetPart> = Vec::new();
+    for (title, address_book_entry) in address_book_set.into_iter() {
+        let network_specs = network_specs_from_entry(database, &address_book_entry)?;
+        set.push(SetPart {
+            title,
+            address_book_entry,
+            network_specs,
+        })
+    }
+    println!("Address book has entries for following networks:\n");
+    for x in set.iter() {
+        if x.address_book_entry.def {
+            println!(
+                "{} at {}, encryption {} (default), Vault display title {}",
+                x.title,
+                x.address_book_entry.address,
+                x.address_book_entry.encryption.show(),
+                x.network_specs.title,
+            );
+        } else {
+            println!(
+                "{} at {}, encryption {}, Vault display title {}",
+                x.title,
+                x.address_book_entry.address,
+                x.address_book_entry.encryption.show(),
+                x.network_specs.title,
+            );
+        }
+    }
+    Ok(())
+}
+
+/// Check metadata file.
+///
+/// Function asserts that:
+///
+/// - the file contains valid metadata, with retrievable network name and
+/// version
+/// - if the metadata for same network name and version is in the hot database,
+/// it completely matches the one from the file
+///
+/// Function could be used to check release metadata files in `defaults` crate.
+pub fn check_file(database: &sled::Db, path: String) -> Result<()> {
+    let meta_str = std::fs::read_to_string(path)?;
+
+    // `MetaValues` from metadata in file
+    let from_file = MetaValues::from_str_metadata(meta_str.trim())?;
+
+    match try_get_meta_values_by_name_version(database, &from_file.name, from_file.version)? {
+        // network metadata for same network name and version is in the database
+        Some(from_database) => {
+            if from_database.meta == from_file.meta {
+                // metadata matches
+                println!(
+                    "{}{}, metadata hash {}, in the database",
+                    from_file.name,
+                    from_file.version,
+                    hash_string(&from_file.meta)
+                )
+            } else {
+                // metadata does not match, this could indicate a serious issue
+                println!(
+                    "{}{}, metadata hash {}, same version metadata in the database has different hash {}",
+                    from_file.name,
+                    from_file.version,
+                    hash_string(&from_file.meta),
+                    hash_string(&from_database.meta)
+                )
+            }
+        }
+
+        // network metadata is not in the database
+        None => {
+            println!(
+                "{}{}, metadata hash {}, not in the database",
+                from_file.name,
+                from_file.version,
+                hash_string(&from_file.meta)
+            )
+        }
+    }
+    Ok(())
+}
+
+/// Hash metadata and produce hash hexadecimal string.
+fn hash_string(meta: &[u8]) -> String {
+    hex::encode(blake2_256(meta))
+}
+
+/// Show network specs for user-entered address book title.
+pub fn show_specs(database: &sled::Db, title: String) -> Result<()> {
+    let specs = network_specs_from_title(database, &title)?;
+    println!(
+        "address book title: {}\nbase58 prefix: {}\ncolor: {}\ndecimals: {}\nencryption: {}\ngenesis_hash: {}\nlogo: {}\nname: {}\npath_id: {}\nsecondary_color: {}\ntitle: {}\nunit: {}",
+        title,
+        specs.base58prefix,
+        specs.color,
+        specs.decimals,
+        specs.encryption.show(),
+        hex::encode(specs.genesis_hash),
+        specs.logo,
+        specs.name,
+        specs.path_id,
+        specs.secondary_color,
+        specs.title,
+        specs.unit
+    );
+    Ok(())
+}
+
+/// Show metadata block hash history from
+/// [`META_HISTORY`](constants::META_HISTORY) tree.
+pub fn show_block_history(database: &sled::Db) -> Result<()> {
+    let meta_history_set = meta_history_content(database)?;
+    if meta_history_set.is_empty() {
+        println!("Database has no metadata fetch history entries on record.");
+        return Ok(());
+    }
+    println!("Database has following metadata fetch history:\n");
+    for x in meta_history_set.iter() {
+        println!(
+            "{} {}, fetched at block {}",
+            x.name,
+            x.version,
+            hex::encode(x.block_hash),
+        );
+    }
+    Ok(())
+}
+
\ No newline at end of file diff --git a/rustdocs/src/generate_message/specs.rs.html b/rustdocs/src/generate_message/specs.rs.html new file mode 100644 index 0000000000..ea317f2ecc --- /dev/null +++ b/rustdocs/src/generate_message/specs.rs.html @@ -0,0 +1,1159 @@ +specs.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+
//! `add_specs` payloads and specs related hot database updates
+//!
+//! This module deals with processing command
+//!
+//! `$ cargo run add-specs <keys> <argument(s)>`
+use definitions::{crypto::Encryption, keyring::NetworkSpecsKey, metadata::AddressBookEntry};
+use std::path::Path;
+
+use crate::error::{Error, Result};
+use crate::helpers::{
+    add_specs_print, address_book_content, db_upd_network, filter_address_book_by_url,
+    genesis_hash_in_hot_db, get_address_book_entry, network_specs_from_entry,
+    network_specs_from_title, specs_agnostic, try_get_network_specs_to_send, update_known_specs,
+    update_modify_encryption_specs,
+};
+use crate::parser::{Content, InstructionSpecs, Override, Set, Token};
+
+/// Process `add-specs` command according to the [`InstructionSpecs`] received
+/// from the command line.
+pub fn gen_add_specs(instruction: InstructionSpecs) -> Result<()> {
+    match instruction.set.into() {
+        // `-f` setting key: produce `add_specs` payload files from existing
+        // database entries.
+        Set::F => match instruction.content.clone().into() {
+            // `$ cargo run add-specs -f -a`
+            //
+            // Make `add_specs` payloads for all specs entries in the database.
+            Content::All { pass_errors: _ } => {
+                // makes no sense to override encryption, or token, or title
+                // for all entries at once
+                if !instruction.over.all_empty() {
+                    return Err(Error::NotSupported);
+                }
+
+                // collect `ADDRESS_BOOK` entries
+                let database = sled::open(instruction.db)?;
+                let address_book_set = address_book_content(&database)?;
+                if address_book_set.is_empty() {
+                    return Err(Error::AddressBookEmpty);
+                }
+
+                // process each entry
+                for (_, address_book_entry) in address_book_set.iter() {
+                    specs_f_a_element(&database, address_book_entry, &instruction.files_dir)?;
+                }
+                Ok(())
+            }
+
+            // `$ cargo run add-specs -f -n <address_book_title>
+            // <optional encryption override> <optional signer title override>`
+            //
+            // Make `add_specs` payload for single specs entry from the
+            // database, referred to by network address book title.
+            //
+            // Entry with encryption override and/or signer title override
+            // **will not** be added to the database.
+            Content::Name { s: name } => {
+                // no fetch is done, there is no way to check the override is
+                // allowed
+                if instruction.over.token().is_some() {
+                    return Err(Error::NotSupported);
+                }
+                let database = sled::open(instruction.db)?;
+                specs_f_n(
+                    &database,
+                    &name,
+                    instruction.over.encryption,
+                    instruction.over.title,
+                    instruction.files_dir,
+                )
+            }
+
+            // `-u` content key is to provide the URL address for RPC calls;
+            // since `-f` indicates the data is taken from the database, the
+            // the combination seems of no use.
+            // To address a specific network from the database, `-f -n` key
+            // combination is suggested.
+            Content::Address { .. } => Err(Error::NotSupported),
+        },
+
+        // `-d` setting key: produce `add_specs` payloads through RPC calls,
+        // **do not** interact with the database, export payload files.
+        Set::D => match instruction.content.clone().into() {
+            // `-d` does not write in the database, so fetching specs for known
+            // networks without checking the database seems of no use.
+            Content::All { pass_errors: _ } => Err(Error::NotSupported),
+
+            // Same as `-d -a` combination, of no use.
+            Content::Name { .. } => Err(Error::NotSupported),
+
+            // `$ cargo run add-specs -d -u network_url_address
+            // <encryption override> <optional token override> <optional signer
+            // title override>`
+            //
+            // Produce `add_specs` payload by making RPC calls at
+            // `network_url_address` and print payload file.
+            //
+            // Database does not get checked here.
+            //
+            // Command line **must** contain encryption override.
+            //
+            // Command may contain signer title override to set up the network
+            // title that is displayed in Vault.
+            //
+            // In some cases the command may contain token override as well.
+            Content::Address { s: address } => {
+                // not allowed to proceed without encryption override defined
+                if let Some(encryption) = instruction.over.encryption {
+                    specs_d_u(
+                        &address,
+                        encryption,
+                        instruction.over.token(),
+                        instruction.over.title.clone(),
+                        &instruction.files_dir,
+                    )
+                } else {
+                    Err(Error::NotSupported)
+                }
+            }
+        },
+
+        // `-k` setting key: produce payloads through RPC calls, update the
+        // database, export payload files only for updated information.
+        //
+        // Since network specs are expected to remain constant over time,
+        // threse commands seem to be of no use.
+        Set::K => Err(Error::NotSupported),
+
+        // `-p` setting key: update the database
+        Set::P => match instruction.content.clone().into() {
+            // Network specs are expected to remain constant over time, mass
+            // override should not be possible, this command seems to be of no
+            // use.
+            Content::All { pass_errors: _ } => Err(Error::NotSupported),
+
+            // `$ cargo run add-specs -p -n network_address_book_title
+            // <encryption override> <optional title override>
+            // <optional token override>`
+            //
+            // Network already has an entry in the database and could be
+            // referred to by network address book title. This key combination
+            // is intended to be used to:
+            // - add to the hot database same network with different encryption
+            // - change token (if possible for given network) or Vault
+            // displayed network title
+            //
+            // Payload files are not created.
+            Content::Name { s: name } => {
+                let database = sled::open(instruction.db)?;
+                // using this command makes sense only if there is some override
+                specs_pt_n(
+                    &database,
+                    &name,
+                    instruction.over,
+                    false,
+                    &instruction.files_dir,
+                )
+            }
+
+            // `$ cargo run add-specs -p -u network_url_address
+            // <encryption override> <optional token override>`
+            //
+            // Update the database by making RPC calls at `network_url_address`.
+            //
+            // This command is intended for the networks not introduced to the
+            // database, and **must** contain encryption override.
+            //
+            // Processing known URL or a different URL for known network
+            // genesis hash results in an error.
+            //
+            // In some cases the command may contain token override as well.
+            Content::Address { s: address } => {
+                // not allowed to proceed without encryption override defined
+                if let Some(encryption) = instruction.over.encryption {
+                    let database = sled::open(instruction.db)?;
+                    specs_pt_u(
+                        &database,
+                        &address,
+                        encryption,
+                        instruction.over.token(),
+                        instruction.over.title,
+                        false,
+                        instruction.files_dir,
+                    )
+                } else {
+                    Err(Error::NotSupported)
+                }
+            }
+        },
+
+        // `-t` setting key or no setting key: produce `add_specs` payloads,
+        // update the database.
+        Set::T => match instruction.content.clone().into() {
+            // Network specs are expected to remain constant over time,
+            // this command seems to be of no use.
+            Content::All { pass_errors: _ } => Err(Error::NotSupported),
+
+            // `$ cargo run add-specs -n network_address_book_title
+            // <encryption override>`
+            //
+            // Network already has an entry in the database and could be
+            // referred to by network address book title. This key combination
+            // is intended to be used to:
+            // - add to the hot database same network with different encryption
+            // - change token (if possible for given network) or Vault
+            // displayed network title
+            //
+            // Payload files are created.
+            Content::Name { s: name } => {
+                let database = sled::open(instruction.db)?;
+
+                specs_pt_n(
+                    &database,
+                    &name,
+                    instruction.over,
+                    true,
+                    instruction.files_dir,
+                )
+            }
+
+            // `$ cargo run add-specs -u network_url_address
+            // <encryption override> <optional token override>`
+            //
+            // Update the database by making RPC calls at `network_url_address`
+            // and create `add_specs` payload file.
+            //
+            // This command is intended for the networks not introduced to the
+            // database, and **must** contain encryption override.
+            //
+            // Processing known URL or a different URL for known network
+            // genesis hash results in an error.
+            //
+            // In some cases the command may contain token override as well.
+            Content::Address { s: address } => {
+                // not allowed to proceed without encryption override defined
+                if let Some(encryption) = instruction.over.encryption {
+                    let database = sled::open(&instruction.db)?;
+                    specs_pt_u(
+                        &database,
+                        &address,
+                        encryption,
+                        instruction.over.token(),
+                        instruction.over.title,
+                        true,
+                        instruction.files_dir,
+                    )
+                } else {
+                    Err(Error::NotSupported)
+                }
+            }
+        },
+    }
+}
+
+/// `add-specs -f -a` for individual address book entry.
+///
+/// - Get network specs
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) from
+/// the database using information in address book entry
+/// - Output raw bytes payload file
+fn specs_f_a_element<P>(database: &sled::Db, entry: &AddressBookEntry, files_dir: P) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let network_specs = network_specs_from_entry(database, entry)?;
+    add_specs_print(&network_specs, files_dir)
+}
+
+/// `add-specs -f -n <address_book_title> <override(s)>`
+///
+/// Token override is not allowed. Encryption and title override are optional.
+/// Overrides are used to modify the entry for specified address book title.
+///
+/// - Get address book entry for the network using network address book `title`
+/// - Get network specs
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) from
+/// the database using information in address book entry
+/// - Output raw bytes payload file
+fn specs_f_n<P>(
+    database: &sled::Db,
+    title: &str,
+    optional_encryption_override: Option<Encryption>,
+    optional_signer_title_override: Option<String>,
+    files_dir: P,
+) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let mut network_specs = network_specs_from_title(database, title)?;
+    match optional_encryption_override {
+        Some(encryption) => {
+            if network_specs.encryption == encryption {
+                if let Some(new_title) = optional_signer_title_override {
+                    network_specs.title = new_title
+                }
+                add_specs_print(&network_specs, &files_dir)
+            } else {
+                network_specs.title = optional_signer_title_override.unwrap_or(format!(
+                    "{}-{}",
+                    network_specs.name,
+                    encryption.show()
+                ));
+                network_specs.encryption = encryption;
+                add_specs_print(&network_specs, &files_dir)
+            }
+        }
+        None => add_specs_print(&network_specs, &files_dir),
+    }
+}
+
+/// `add-specs -d -u <url_address> <override(s)>`
+///
+/// Encryption override is mandatory. Title override is optional. Token override
+/// is possible if token set is fetched.
+///
+/// - Fetch network information using RPC calls and interpret it
+/// - Construct
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) with
+/// fetched values, user overrides and defaults
+/// - Output raw bytes payload file
+fn specs_d_u<P>(
+    address: &str,
+    encryption: Encryption,
+    optional_token_override: Option<Token>,
+    optional_signer_title_override: Option<String>,
+    files_dir: P,
+) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let specs = specs_agnostic(
+        address,
+        encryption,
+        optional_token_override,
+        optional_signer_title_override,
+    )?;
+    add_specs_print(&specs, &files_dir)
+}
+
+/// `add-specs <-p/-t> -n <address_book_title> <override(s)>`
+///
+/// Encryption and title overrides are possible. Token override is possible if
+/// network has token set.
+///
+/// Function inputs network address book title, override set [`Override`], and
+/// `printing` flag indicating if payload file should be made.
+///
+/// - Search for an address book entry by address book title and get
+/// corresponding
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+/// - Fetch network specs through RPC calls and check that the network specs
+/// from the database are still valid
+/// - Modify network specs according to the overrides requested
+/// - Update database as needed: [`ADDRESS_BOOK`](constants::ADDRESS_BOOK) and
+/// [`SPECSTREEPREP`](constants::SPECSTREEPREP) are updated if the encryption
+/// was not previously in the database for this network,
+/// [`SPECSTREEPREP`](constants::SPECSTREEPREP) alone is updated if the
+/// overrides modified network specs entry
+/// - Print payload files if requested
+///
+/// Network address book title for new address book entries is constructed as
+/// `<network_name>-<encryption>`. Field `title` in network specs
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs), i.e.
+/// the title under which Vault displays the network, is also constructed as
+/// `<network_name>-<encryption>` for non-default networks, unless overridden by
+/// the user.
+fn specs_pt_n<P>(
+    database: &sled::Db,
+    title: &str,
+    over: Override,
+    printing: bool,
+    files_dir: P,
+) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    // address book entry for `title`
+    let address_book_entry = get_address_book_entry(database, title)?;
+    let mut network_specs_to_change = network_specs_from_entry(database, &address_book_entry)?;
+    let make_update = match over.encryption {
+        // requested encryption override
+        Some(ref encryption) => {
+            // encryption is already correct in title entered by user
+            if address_book_entry.encryption == *encryption {
+                update_known_specs(
+                    &address_book_entry.address,
+                    &mut network_specs_to_change,
+                    over.title.clone(),
+                    over.token(),
+                )?
+            }
+            // encryption in override is different from encryption in title
+            else {
+                // construct `NetworkSpecsKey` with encryption from override and
+                // known genesis hash
+                let network_specs_key_possible =
+                    NetworkSpecsKey::from_parts(&address_book_entry.genesis_hash, encryption);
+
+                // check if this new network specs key has an entry in the
+                // database
+                match try_get_network_specs_to_send(database, &network_specs_key_possible)? {
+                    // user entered encryption override that already has an
+                    // entry in the database, only with wrong address book title
+                    //
+                    // try applying other overrides
+                    Some(network_specs_found) => {
+                        network_specs_to_change = network_specs_found;
+                        update_known_specs(
+                            &address_book_entry.address,
+                            &mut network_specs_to_change,
+                            over.title.clone(),
+                            over.token(),
+                        )?
+                    }
+
+                    // user has actually entered encryption override that is new
+                    // to the database
+                    None => {
+                        update_modify_encryption_specs(
+                            &address_book_entry.address,
+                            &mut network_specs_to_change,
+                            encryption,
+                            over.title.clone(),
+                            over.token(),
+                        )?;
+                        true
+                    }
+                }
+            }
+        }
+        None => update_known_specs(
+            &address_book_entry.address,
+            &mut network_specs_to_change,
+            over.title.clone(),
+            over.token(),
+        )?,
+    };
+
+    if make_update {
+        db_upd_network(
+            database,
+            &address_book_entry.address,
+            &network_specs_to_change,
+        )?;
+        if printing {
+            add_specs_print(&network_specs_to_change, &files_dir)
+        } else {
+            Ok(())
+        }
+    } else if printing {
+        add_specs_print(&network_specs_to_change, &files_dir)
+    } else {
+        Err(Error::SpecsInDb {
+            name: address_book_entry.name,
+            encryption: network_specs_to_change.encryption,
+        })
+    }
+}
+
+/// `add-specs <-p/-t> -u <url_address> <override(s)>`
+///
+/// Encryption override is mandatory. Title override is optional. Token override
+/// is possible if token set is fetched.
+///
+/// Function inputs `&str` URL address that could be used for RPC calls,
+/// encryption supported by the network [`Encryption`], optional token and
+/// title overrides and `printing` flag indicating if payload file should be
+/// made.
+///
+/// - Check that the URL address is unknown to the database
+/// - Fetch network information using RPC calls and interpret it
+/// - Check that there is no entries with same genesis hash as was just fetched
+/// in the database
+/// - Construct
+/// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs) with
+/// fetched values, user overrides and defaults
+/// - Construct `AddressBookEntry`
+/// - Update the database (network specs and address book)
+/// - Output raw bytes payload files if requested
+fn specs_pt_u<P>(
+    database: &sled::Db,
+    address: &str,
+    encryption: Encryption,
+    optional_token_override: Option<Token>,
+    optional_signer_title_override: Option<String>,
+    printing: bool,
+    files_dir: P,
+) -> Result<()>
+where
+    P: AsRef<Path>,
+{
+    let known_address_set = filter_address_book_by_url(database, address)?;
+
+    if !known_address_set.is_empty() {
+        return Err(Error::UKeyUrlInDb {
+            title: known_address_set[0].0.to_string(),
+            url: address.to_string(),
+        });
+    }
+
+    let specs = specs_agnostic(
+        address,
+        encryption,
+        optional_token_override,
+        optional_signer_title_override,
+    )?;
+
+    match genesis_hash_in_hot_db(database, specs.genesis_hash)? {
+        Some(address_book_entry) => Err(Error::UKeyHashInDb {
+            address_book_entry,
+            url: address.to_string(),
+        }),
+        None => {
+            db_upd_network(database, address, &specs)?;
+            if printing {
+                add_specs_print(&specs, &files_dir)?
+            }
+            Ok(())
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use crate::parser::{ContentArgs, Override, SetFlags};
+    use constants::{FOLDER, HOT_DB_NAME};
+
+    // The aim is to check that RPC calls are going through for "officially
+    // approved" networks. Although the blanket fetch test was nice, not all
+    // networks could be reached at all the times, therefore this is currently
+    // limited to three default networks that must be working always.
+    #[test]
+    #[ignore]
+    fn mass_fetch() {
+        let address_set = [
+            "wss://rpc.polkadot.io",
+            "wss://kusama-rpc.polkadot.io",
+            "wss://westend-rpc.polkadot.io",
+        ];
+        let mut all_clear = true;
+        for address in address_set {
+            let instruction = InstructionSpecs {
+                set: SetFlags {
+                    d: true,
+                    ..Default::default()
+                },
+                content: ContentArgs {
+                    address: Some(address.to_string()),
+                    ..Default::default()
+                },
+                over: Override {
+                    encryption: Some(Encryption::Sr25519),
+                    title: None,
+                    token_unit: None,
+                    token_decimals: None,
+                },
+                db: HOT_DB_NAME.into(),
+                files_dir: FOLDER.into(),
+            };
+            match gen_add_specs(instruction) {
+                Ok(()) => (),
+                Err(e) => {
+                    println!("Error: \n{e}");
+                    all_clear = false;
+                }
+            };
+        }
+        let path_set = std::fs::read_dir(FOLDER).unwrap();
+        for x in path_set.flatten() {
+            if let Some(filename) = x.path().to_str() {
+                if filename.contains("sign_me_add_specs") {
+                    std::fs::remove_file(x.path()).unwrap()
+                }
+            }
+        }
+        assert!(all_clear, "Errors were encountered");
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/actions.rs.html b/rustdocs/src/navigator/actions.rs.html new file mode 100644 index 0000000000..232dd6cb41 --- /dev/null +++ b/rustdocs/src/navigator/actions.rs.html @@ -0,0 +1,93 @@ +actions.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+
//!List of all interactive actions in app
+
+//use super::screens::Screen;
+//use crate::navstate::{Navstate, State};
+
+///All actions
+#[derive(PartialEq, Eq, Debug)]
+pub enum Action {
+    Start,
+    NavbarLog,
+    NavbarScan,
+    NavbarKeys,
+    NavbarSettings,
+    GoBack,
+    GoForward,
+    SelectSeed,
+    SelectKey,
+    NewKey,
+    RightButtonAction,
+    Shield,
+    NewSeed,
+    RecoverSeed,
+    BackupSeed,
+    NetworkSelector,
+    CheckPassword,
+    TransactionFetched,
+    RemoveNetwork,
+    RemoveMetadata,
+    RemoveTypes,
+    SignNetworkSpecs,
+    SignMetadata,
+    SignTypes,
+    ManageNetworks,
+    ViewGeneralVerifier,
+    ManageMetadata,
+    RemoveKey,
+    RemoveSeed,
+    ClearLog,
+    CreateLogComment,
+    ShowLogDetails,
+    Increment,
+    ShowDocuments,
+    TextEntry,
+    PushWord,
+    Nothing,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/alerts.rs.html b/rustdocs/src/navigator/alerts.rs.html new file mode 100644 index 0000000000..fa9ec45b2a --- /dev/null +++ b/rustdocs/src/navigator/alerts.rs.html @@ -0,0 +1,41 @@ +alerts.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+
//! List of all alerts
+
+#[derive(PartialEq, Eq, Debug, Copy, Clone)]
+pub enum Alert {
+    Empty,
+    Error,
+    ErrorDisplay, // for rare cases when the screen could not be displayed
+    Shield,
+}
+
+impl Alert {
+    pub fn get_name(&self) -> String {
+        match self {
+            Alert::Empty => String::from("Empty"),
+            Alert::Error => String::from("Error"),
+            Alert::ErrorDisplay => String::from("ErrorDisplay"),
+            Alert::Shield => String::from("Shield"),
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/error.rs.html b/rustdocs/src/navigator/error.rs.html new file mode 100644 index 0000000000..a5a1297046 --- /dev/null +++ b/rustdocs/src/navigator/error.rs.html @@ -0,0 +1,99 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+
pub type Result<T> = std::result::Result<T, Error>;
+
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error(transparent)]
+    DbHandling(#[from] db_handling::Error),
+
+    #[error(transparent)]
+    Definitions(#[from] definitions::error::Error),
+
+    #[error(transparent)]
+    TransactionParsing(#[from] transaction_parsing::Error),
+
+    #[error(transparent)]
+    Hex(#[from] hex::FromHexError),
+
+    #[error("DB not initialized.")]
+    DbNotInitialized,
+
+    #[error("Key not found {0}")]
+    KeyNotFound(String),
+
+    #[error("Mutex poisoned")]
+    MutexPoisoned,
+
+    #[error("Data packing error: {0}")]
+    DataPacking(String),
+
+    #[error("Tx Action not sign")]
+    TxActionNotSign,
+
+    #[error("Number of seeds provided {0} does not match number of txs in a bulk {1}")]
+    SeedsNumMismatch(usize, usize),
+
+    #[error(transparent)]
+    TransactionSigning(#[from] transaction_signing::Error),
+
+    #[error("Unsupported transaction action")]
+    TransactionActionUnsupported,
+
+    #[error("No transactions to sign")]
+    NoTransactionsToSign,
+
+    #[error("No seed phrase")]
+    NoSeedPhrase,
+
+    #[error("No networks attached to the address with path `{0}`")]
+    NoNetwork(String),
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/lib.rs.html b/rustdocs/src/navigator/lib.rs.html new file mode 100644 index 0000000000..58018bd5ae --- /dev/null +++ b/rustdocs/src/navigator/lib.rs.html @@ -0,0 +1,513 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+
//! This is experimental cross-platform navigation for Vault.
+//! Ideally it should replace almost everything and become the only interface
+
+#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+use db_handling::identities::{export_key_set_addrs, SignaturesBulk, SignaturesBulkV1};
+//do we support mutex?
+use lazy_static::lazy_static;
+use sp_runtime::MultiSignature;
+use std::{collections::HashMap, sync::Mutex};
+use transaction_signing::{
+    create_signature, sign_content, SignatureAndChecksum, SignatureType, SufficientContent,
+};
+
+use definitions::navigation::{
+    ActionResult, Address, ExportedSet, MAddressCard, MKeysInfoExport, MKeysNew, MSignatureReady,
+    MSignedTransaction, MSufficientCryptoReady, MTransaction, QrData, TransactionAction,
+    TransactionSignAction, TransactionType,
+};
+use parity_scale_codec::Encode;
+use qrcode_rtx::make_data_packs;
+
+mod error;
+
+mod actions;
+pub use actions::Action;
+use db_handling::helpers::get_address_details;
+use definitions::helpers::{make_identicon_from_multisigner, print_multisigner_as_base58_or_eth};
+use definitions::keyring::AddressKey;
+
+pub mod alerts;
+pub mod modals;
+mod navstate;
+mod states;
+use navstate::State;
+use transaction_parsing::parse_transaction::parse_dd_transaction;
+
+pub mod screens;
+#[cfg(test)]
+mod tests;
+
+pub use crate::error::{Error, Result};
+
+//TODO: multithread here some day!
+lazy_static! {
+    /// Navigation state of the app
+    ///
+    /// Navigation state is unsafe either way, since it has to persist
+    /// No matter if here or beyond FFI
+    pub static ref STATE: Mutex<Option<State>> = Mutex::new(
+        None
+    );
+}
+
+/// User actions handler.
+///
+/// This method is called on every user [`Action`] in the UI, performs changes in backend
+/// and returns new UI information as [`ActionResult`].
+pub fn do_action(
+    action: Action,
+    details_str: &str,
+    secret_seed_phrase: &str,
+) -> Result<ActionResult> {
+    let mut navstate = STATE.lock().map_err(|_| Error::MutexPoisoned)?;
+    navstate.as_mut().ok_or(Error::DbNotInitialized)?.perform(
+        action,
+        details_str,
+        secret_seed_phrase,
+    )
+}
+
+/// Should be called in the beginning to recall things stored only by phone
+pub fn init_navigation(db: sled::Db, seed_names: Vec<String>) -> Result<()> {
+    let mut navstate = STATE.lock().map_err(|_| Error::MutexPoisoned)?;
+    *navstate = Some(State::init_navigation(db, seed_names));
+    Ok(())
+}
+
+/// Should be called when seed names are modified in native to synchronize data
+pub fn update_seed_names(seed_names: Vec<String>) -> Result<()> {
+    let mut navstate = STATE.lock().map_err(|_| Error::MutexPoisoned)?;
+    navstate
+        .as_mut()
+        .ok_or(Error::DbNotInitialized)?
+        .update_seed_names(seed_names);
+
+    Ok(())
+}
+
+/// Export key info with derivations.
+pub fn export_key_info(
+    database: &sled::Db,
+    seed_name: &str,
+    exported_set: ExportedSet,
+) -> Result<MKeysInfoExport> {
+    let export_all_addrs = export_key_set_addrs(database, seed_name, exported_set)?;
+
+    let data = [&[0x53, 0xff, 0xde], export_all_addrs.encode().as_slice()].concat();
+    let frames = make_data_packs(&data, 128).map_err(|e| Error::DataPacking(e.to_string()))?;
+
+    Ok(MKeysInfoExport { frames })
+}
+
+/// Export signatures bulk.
+pub fn export_signatures_bulk(
+    signatures: &[(MultiSignature, SignatureType)],
+) -> Result<MSignatureReady> {
+    let signatures = if signatures.len() > 1 {
+        let v1: SignaturesBulkV1 = signatures
+            .iter()
+            .map(|s| s.0.clone())
+            .collect::<Vec<_>>()
+            .as_slice()
+            .into();
+        let v1: SignaturesBulk = v1.into();
+        let data = v1.encode();
+
+        make_data_packs(&data, 128).map_err(|e| Error::DataPacking(e.to_string()))?
+    } else {
+        let encoded = match signatures[0].1 {
+            SignatureType::Transaction => hex::encode(signatures[0].0.encode()),
+            SignatureType::Message => match &signatures[0].0 {
+                MultiSignature::Ed25519(a) => hex::encode(a),
+                MultiSignature::Sr25519(a) => hex::encode(a),
+                MultiSignature::Ecdsa(a) => hex::encode(a),
+            },
+        };
+        vec![QrData::Regular {
+            data: encoded.as_bytes().into(),
+        }]
+    };
+
+    Ok(MSignatureReady { signatures })
+}
+
+/// Sign dynamic derivation transaction and return data for mobile
+pub fn sign_dd_transaction(
+    database: &sled::Db,
+    payload_set: &[String],
+    seeds: HashMap<String, String>,
+) -> Result<MSignedTransaction> {
+    let mut transactions = vec![];
+    let mut signatures = vec![];
+    for (a, signature) in handle_dd_sign(database, payload_set, seeds)? {
+        transactions.push(MTransaction {
+            content: a.content.clone(),
+            ttype: TransactionType::Sign,
+            author_info: Some(a.author_info.clone()),
+            network_info: Some(a.network_info.clone().into()),
+        });
+        signatures.push((signature.signature().to_owned(), signature.signature_type()));
+    }
+    Ok(MSignedTransaction {
+        transaction: transactions,
+        signature: export_signatures_bulk(&signatures)?,
+    })
+}
+
+/// Parse and sign dynamic derivation transaction
+pub(crate) fn handle_dd_sign(
+    database: &sled::Db,
+    payload_set: &[String],
+    seeds: HashMap<String, String>,
+) -> Result<Vec<(TransactionSignAction, SignatureAndChecksum)>> {
+    let mut signed_transactions = vec![];
+
+    let mut actions = vec![];
+    let mut checksum = 0;
+    for t in payload_set.iter() {
+        match parse_dd_transaction(database, t, &seeds) {
+            Ok(TransactionAction::Sign {
+                actions: a,
+                checksum: c,
+            }) => {
+                actions.extend(a);
+                checksum = c;
+            }
+            Ok(_) => return Err(Error::TxActionNotSign),
+            Err(e) => return Err(e.into()),
+        };
+    }
+    for (idx, sign_action) in actions.into_iter().enumerate() {
+        let seed_phrase = seeds
+            .get(&sign_action.author_info.address.seed_name)
+            .ok_or(Error::NoSeedPhrase)?;
+
+        let signature_and_checksum = create_signature(
+            database,
+            seed_phrase,
+            "",
+            "",
+            checksum,
+            idx,
+            sign_action.network_info.specs.encryption,
+        )?;
+        checksum = signature_and_checksum.new_checksum();
+        signed_transactions.push((sign_action, signature_and_checksum));
+    }
+    Ok(signed_transactions)
+}
+
+/// Get keys by seed name
+pub fn keys_by_seed_name(database: &sled::Db, seed_name: &str) -> Result<MKeysNew> {
+    Ok(db_handling::interface_signer::keys_by_seed_name(
+        database, seed_name,
+    )?)
+}
+
+pub fn sign_sufficient_content(
+    database: &sled::Db,
+    address_key: &AddressKey,
+    sufficient_content: SufficientContent,
+    seed_phrase: &str,
+    pwd_entry: &str,
+) -> Result<MSufficientCryptoReady> {
+    let address_details = get_address_details(database, address_key)?;
+    let multisigner = address_key.multi_signer();
+    let (sufficient, content) = sign_content(
+        database,
+        multisigner,
+        &address_details,
+        sufficient_content,
+        seed_phrase,
+        pwd_entry,
+    )?;
+    let network_key = address_details
+        .network_id
+        .as_ref()
+        .ok_or(Error::NoNetwork(address_details.path.clone()))?;
+    let network_specs = db_handling::helpers::get_network_specs(database, network_key)?.specs;
+    let base58 = print_multisigner_as_base58_or_eth(
+        multisigner,
+        Some(network_specs.base58prefix),
+        network_specs.encryption,
+    );
+    Ok(MSufficientCryptoReady {
+        author_info: MAddressCard {
+            base58,
+            address_key: hex::encode(address_key.key()),
+            address: Address {
+                path: address_details.path.clone(),
+                has_pwd: address_details.has_pwd,
+                identicon: make_identicon_from_multisigner(
+                    multisigner,
+                    address_details.identicon_style(),
+                ),
+                seed_name: address_details.seed_name,
+                secret_exposed: address_details.secret_exposed,
+            },
+        },
+        sufficient,
+        content,
+        network_logo: Some(network_specs.logo),
+    })
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/modals.rs.html b/rustdocs/src/navigator/modals.rs.html new file mode 100644 index 0000000000..d0b8d1724d --- /dev/null +++ b/rustdocs/src/navigator/modals.rs.html @@ -0,0 +1,101 @@ +modals.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+
//! List of all modals
+
+use definitions::{keyring::NetworkSpecsKey, navigation::MSCContent};
+use sp_runtime::MultiSignature;
+use transaction_signing::SignatureType;
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub enum Modal {
+    Backup(String),
+    NewSeedMenu,
+    NewSeedBackup(String),
+    SeedMenu,
+    NetworkSelector(NetworkSpecsKey),
+    PasswordConfirm,
+    SignatureReady(Vec<(MultiSignature, SignatureType)>),
+    EnterPassword,
+    LogComment,
+    LogRight,
+    NetworkDetailsMenu,
+    ManageMetadata(u32),
+    SufficientCryptoReady((Vec<u8>, MSCContent)),
+    KeyDetailsAction,
+    TypesInfo,
+    SelectSeed,
+    Empty,
+}
+
+impl Modal {
+    pub fn get_name(&self) -> String {
+        match self {
+            Modal::Backup(_) => String::from("Backup"),
+            Modal::NewSeedMenu => String::from("NewSeedMenu"),
+            Modal::NewSeedBackup(_) => String::from("NewSeedBackup"),
+            Modal::SeedMenu => String::from("SeedMenu"),
+            Modal::NetworkSelector(_) => String::from("NetworkSelector"),
+            Modal::PasswordConfirm => String::from("PasswordConfirm"),
+            Modal::SignatureReady(_) => String::from("SignatureReady"),
+            Modal::EnterPassword => String::from("EnterPassword"),
+            Modal::LogComment => String::from("LogComment"),
+            Modal::LogRight => String::from("LogRight"),
+            Modal::NetworkDetailsMenu => String::from("NetworkDetailsMenu"),
+            Modal::ManageMetadata(_) => String::from("ManageMetadata"),
+            Modal::SufficientCryptoReady(_) => String::from("SufficientCryptoReady"),
+            Modal::KeyDetailsAction => String::from("KeyDetailsAction"),
+            Modal::TypesInfo => String::from("TypesInfo"),
+            Modal::SelectSeed => String::from("SelectSeed"),
+            Modal::Empty => String::from("Empty"),
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/navstate.rs.html b/rustdocs/src/navigator/navstate.rs.html new file mode 100644 index 0000000000..24c6718efe --- /dev/null +++ b/rustdocs/src/navigator/navstate.rs.html @@ -0,0 +1,3465 @@ +navstate.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+
//! Navigation state of the app
+
+use db_handling::helpers::get_danger_status;
+use db_handling::identities::get_multisigner_by_address;
+use db_handling::manage_history::get_history_entry_by_order;
+use definitions::navigation::{
+    ActionResult, AlertData, FooterButton, History, MDeriveKey, MEnterPassword, MKeyDetailsMulti,
+    MLog, MLogDetails, MManageNetworks, MNewSeed, MPasswordConfirm, MRecoverSeedName,
+    MRecoverSeedPhrase, MSeedMenu, MSeeds, MSettings, MSignSufficientCrypto,
+    MSufficientCryptoReady, MTransaction, ModalData, RightButton, ScreenData, ScreenNameType,
+    ShieldAlert, TransactionType,
+};
+use sp_runtime::MultiSigner;
+use std::fmt::Write;
+use transaction_parsing::{entry_to_transactions_with_decoding, TransactionAction};
+use zeroize::Zeroize;
+
+use crate::actions::Action;
+use crate::alerts::Alert;
+use crate::export_signatures_bulk;
+use crate::modals::Modal;
+use crate::screens::{
+    AddressState, DeriveState, KeysState, RecoverSeedPhraseState, Screen, SpecialtyKeysState,
+    SufficientCryptoState,
+};
+use crate::states::{SignResult, TransactionState};
+use db_handling::interface_signer::{get_all_seed_names_with_identicons, guess};
+use definitions::{
+    keyring::{AddressKey, NetworkSpecsKey},
+    network_specs::Verifier,
+    users::AddressDetails,
+};
+
+use crate::error::{Error, Result};
+
+///State of the app as remembered by backend
+#[derive(Clone)]
+pub struct State {
+    navstate: Navstate,
+    db: sled::Db,
+    seed_names: Vec<String>,
+}
+
+///Navigation state is completely defined here
+#[derive(Clone, Debug)]
+pub struct Navstate {
+    pub screen: Screen,
+    pub modal: Modal,
+    pub alert: Alert,
+}
+
+impl Navstate {
+    pub fn new() -> Navstate {
+        Navstate {
+            screen: Screen::SeedSelector,
+            modal: Modal::Empty,
+            alert: Alert::Empty,
+        }
+    }
+}
+
+impl Default for Navstate {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
+impl State {
+    pub fn init_navigation(db: sled::Db, seed_names: Vec<String>) -> Self {
+        Self {
+            navstate: Navstate::new(),
+            db,
+            seed_names,
+        }
+    }
+
+    pub fn update_seed_names(&mut self, seed_names: Vec<String>) {
+        self.seed_names = seed_names;
+    }
+
+    fn handle_navbar_log(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.to_owned();
+        let errorline = String::new();
+        if self.get_footer() {
+            new_navstate = Navstate::clean_screen(Screen::Log)
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_navbar_scan(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.to_owned();
+        let errorline = String::new();
+        if self.get_footer() {
+            new_navstate = Navstate::clean_screen(Screen::Scan)
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_navbar_keys(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.to_owned();
+        let errorline = String::new();
+
+        if self.get_footer() {
+            new_navstate = self.correct_seed_selector()
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_navbar_settings(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.to_owned();
+        let errorline = String::new();
+        if self.get_footer() {
+            new_navstate = Navstate::clean_screen(Screen::Settings)
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_action_start(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.to_owned();
+        let mut errorline = String::new();
+        match db_handling::interface_signer::purge_transactions(&self.db) {
+            Ok(()) => {
+                new_navstate = Navstate::clean_screen(Screen::SeedSelector);
+            }
+            Err(e) => {
+                new_navstate.alert = Alert::Error;
+                let _ = write!(&mut errorline, "{e}");
+            }
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_action_go_back(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+
+        match self.navstate.alert {
+            Alert::Empty => {
+                if let Modal::Empty = self.navstate.modal {
+                    match &self.navstate.screen {
+                        Screen::LogDetails(_) => {
+                            new_navstate.screen = Screen::Log;
+                        }
+                        Screen::Transaction(_) => {
+                            match db_handling::interface_signer::purge_transactions(&self.db) {
+                                Ok(()) => new_navstate.screen = Screen::Scan,
+                                Err(e) => {
+                                    new_navstate.alert = Alert::Error;
+                                    let _ = write!(&mut errorline, "{e}");
+                                }
+                            }
+                        }
+                        Screen::Keys(ref keys_state) => {
+                            match keys_state.get_specialty() {
+                                SpecialtyKeysState::MultiSelect(_) => {
+                                    new_navstate.screen =
+                                        Screen::Keys(keys_state.deselect_specialty())
+                                }
+                                _ => new_navstate = self.correct_seed_selector(),
+                            };
+                        }
+                        Screen::KeyDetails(address_state) => {
+                            new_navstate.screen = Screen::Keys(address_state.blank_keys_state());
+                        }
+                        Screen::KeyDetailsMulti(address_state_multi) => {
+                            new_navstate.screen =
+                                Screen::Keys(address_state_multi.blank_keys_state());
+                        }
+                        Screen::NewSeed => {
+                            new_navstate = self.correct_seed_selector();
+                        }
+                        Screen::RecoverSeedName(_) => {
+                            new_navstate = self.correct_seed_selector();
+                        }
+                        Screen::RecoverSeedPhrase(ref recover_seed_phrase_state) => {
+                            new_navstate.screen =
+                                Screen::RecoverSeedName(recover_seed_phrase_state.name());
+                        }
+                        Screen::DeriveKey(d) => {
+                            new_navstate.screen = Screen::Keys(d.blank_keys_state());
+                        }
+                        Screen::Verifier => {
+                            new_navstate.screen = Screen::Settings;
+                        }
+                        Screen::ManageNetworks => {
+                            new_navstate.screen = Screen::Settings;
+                        }
+                        Screen::NetworkDetails(_) => {
+                            new_navstate.screen = Screen::ManageNetworks;
+                        }
+                        Screen::SelectSeedForBackup => {
+                            new_navstate.screen = Screen::Settings;
+                        }
+                        Screen::SignSufficientCrypto(a) => match a.content() {
+                            transaction_signing::SufficientContent::AddSpecs(key) => {
+                                new_navstate.screen = Screen::NetworkDetails(key);
+                            }
+                            transaction_signing::SufficientContent::LoadMeta(key, _) => {
+                                new_navstate.screen = Screen::NetworkDetails(key);
+                            }
+                            transaction_signing::SufficientContent::LoadTypes => {
+                                new_navstate.screen = Screen::Settings;
+                            }
+                        },
+                        Screen::Documents => {
+                            new_navstate = Navstate::clean_screen(Screen::Settings)
+                        }
+                        _ => {
+                            println!("Back button pressed at the bottom of navigation");
+                        }
+                    };
+                } else {
+                    match &self.navstate.screen {
+                        Screen::Transaction(_) => {
+                            match db_handling::interface_signer::purge_transactions(&self.db) {
+                                Ok(()) => new_navstate = Navstate::clean_screen(Screen::Log),
+                                Err(e) => {
+                                    new_navstate.alert = Alert::Error;
+                                    let _ = write!(&mut errorline, "{e}");
+                                }
+                            }
+                        }
+                        Screen::SignSufficientCrypto(_) => {
+                            new_navstate = Navstate::clean_screen(Screen::Settings);
+                        }
+                        _ => {
+                            new_navstate.modal = Modal::Empty;
+                        }
+                    }
+                }
+            }
+            Alert::ErrorDisplay => {
+                new_navstate = Navstate::clean_screen(Screen::Settings);
+            }
+            _ => new_navstate.alert = Alert::Empty,
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_action_go_forward(
+        &self,
+        details_str: &str,
+        secret_seed_phrase: &str,
+    ) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::Log => {
+                match self.navstate.modal {
+                    Modal::LogComment => {
+                        // details_str is user entered comment
+                        match db_handling::manage_history::history_entry_user(&self.db, details_str)
+                        {
+                            Ok(()) => new_navstate = Navstate::clean_screen(Screen::Log),
+                            Err(e) => {
+                                new_navstate.alert = Alert::Error;
+                                let _ = write!(&mut errorline, "{e}");
+                            }
+                        }
+                    }
+                    _ => println!("GoForward does nothing here"),
+                }
+            }
+            Screen::NewSeed => {
+                // details_str is new seed name
+                match self.navstate.modal {
+                    Modal::Empty => {
+                        new_navstate.modal = Modal::NewSeedBackup(details_str.to_string())
+                    }
+                    Modal::NewSeedBackup(ref seed_name) => match details_str.parse::<bool>() {
+                        Ok(roots) => {
+                            match db_handling::identities::try_create_seed(
+                                &self.db,
+                                seed_name,
+                                secret_seed_phrase,
+                                roots,
+                            ) {
+                                Ok(()) => match KeysState::new(&self.db, seed_name) {
+                                    Ok(a) => new_navstate = Navstate::clean_screen(Screen::Keys(a)),
+                                    Err(e) => {
+                                        new_navstate.alert = Alert::Error;
+                                        let _ = write!(&mut errorline, "{e}");
+                                    }
+                                },
+                                Err(e) => {
+                                    new_navstate.alert = Alert::Error;
+                                    let _ = write!(&mut errorline, "{e}");
+                                }
+                            }
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    },
+                    _ => println!("GoForward does nothing here"),
+                }
+            }
+            Screen::RecoverSeedName(_) => {
+                match db_handling::identities::get_addresses_by_seed_name(&self.db, details_str) {
+                    Ok(a) => {
+                        if a.is_empty() {
+                            new_navstate = Navstate::clean_screen(Screen::RecoverSeedPhrase(
+                                RecoverSeedPhraseState::new(details_str),
+                            ))
+                        } else {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(
+                                &mut errorline,
+                                "Bad input data. Seed name {details_str} already exists."
+                            );
+                        }
+                    }
+                    Err(e) => {
+                        new_navstate.alert = Alert::Error;
+                        let _ = write!(&mut errorline, "{e}");
+                    }
+                }
+            }
+            Screen::RecoverSeedPhrase(ref recover_seed_phrase_state) => {
+                let seed_name = recover_seed_phrase_state.name();
+                match details_str.parse::<bool>() {
+                    Ok(roots) => match db_handling::identities::try_create_seed(
+                        &self.db,
+                        &seed_name,
+                        secret_seed_phrase,
+                        roots,
+                    ) {
+                        Ok(()) => match KeysState::new(&self.db, &seed_name) {
+                            Ok(a) => new_navstate = Navstate::clean_screen(Screen::Keys(a)),
+                            Err(e) => {
+                                new_navstate.alert = Alert::Error;
+                                let _ = write!(&mut errorline, "{e}");
+                            }
+                        },
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    },
+                    Err(e) => {
+                        new_navstate.alert = Alert::Error;
+                        let _ = write!(&mut errorline, "{e}");
+                    }
+                }
+            }
+            Screen::DeriveKey(ref _derive_state) => {
+                log::info!("Go Forward does nothing on Screen::DeriveKey");
+            }
+            Screen::Transaction(ref t) => match t.action() {
+                transaction_parsing::TransactionAction::Sign { .. } => {
+                    let mut new = t.clone();
+                    new.update_seeds(secret_seed_phrase);
+                    if let Modal::EnterPassword = self.navstate.modal {
+                        new.password_entered(details_str);
+                        new_navstate.modal = Modal::Empty;
+                    }
+                    match new.handle_sign(&self.db) {
+                        Ok(result) => {
+                            match result {
+                                SignResult::RequestPassword { .. } => {
+                                    if t.ok() {
+                                        new_navstate.screen = Screen::Transaction(new);
+                                        new_navstate.modal = Modal::EnterPassword;
+                                    } else {
+                                        new_navstate = Navstate::clean_screen(Screen::Log);
+                                    }
+                                }
+                                SignResult::Ready { signatures } => {
+                                    new_navstate.modal = Modal::SignatureReady(signatures);
+                                }
+                            };
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    }
+                }
+                transaction_parsing::TransactionAction::Stub {
+                    s: _,
+                    u: checksum,
+                    stub: stub_nav,
+                } => match transaction_signing::handle_stub(&self.db, *checksum) {
+                    Ok(()) => match stub_nav {
+                        transaction_parsing::StubNav::AddSpecs {
+                            n: network_specs_key,
+                        } => {
+                            new_navstate = Navstate::clean_screen(Screen::NetworkDetails(
+                                network_specs_key.clone(),
+                            ));
+                        }
+                        transaction_parsing::StubNav::LoadMeta {
+                            l: network_specs_key,
+                        } => {
+                            new_navstate = Navstate::clean_screen(Screen::NetworkDetails(
+                                network_specs_key.clone(),
+                            ));
+                        }
+                        transaction_parsing::StubNav::LoadTypes => {
+                            new_navstate = Navstate::clean_screen(Screen::ManageNetworks);
+                        }
+                    },
+                    Err(e) => {
+                        new_navstate.alert = Alert::Error;
+                        let _ = write!(&mut errorline, "{e}");
+                    }
+                },
+                transaction_parsing::TransactionAction::Read { .. } => {
+                    println!("GoForward does nothing here")
+                }
+                transaction_parsing::TransactionAction::Derivations { content: _ } => {
+                    new_navstate = Navstate::clean_screen(Screen::SeedSelector);
+                }
+            },
+            Screen::ManageNetworks => match NetworkSpecsKey::from_hex(details_str) {
+                Ok(network_specs_key) => {
+                    new_navstate = Navstate::clean_screen(Screen::NetworkDetails(network_specs_key))
+                }
+                Err(e) => {
+                    new_navstate.alert = Alert::Error;
+                    let _ = write!(&mut errorline, "{e}");
+                }
+            },
+            Screen::SignSufficientCrypto(ref s) => {
+                match s.key_selected() {
+                    Some((multisigner, address_details, _)) => {
+                        // can get here only if there is a password
+                        // details_str is password entry attempt
+                        if let Modal::EnterPassword = self.navstate.modal {
+                            let mut seed = s.seed();
+                            match transaction_signing::sign_content(
+                                &self.db,
+                                &multisigner,
+                                &address_details,
+                                s.content(),
+                                &seed,
+                                details_str,
+                            ) {
+                                Ok(a) => {
+                                    seed.zeroize();
+                                    new_navstate.modal = Modal::SufficientCryptoReady(a);
+                                }
+                                Err(e) => {
+                                    seed.zeroize();
+                                    if let transaction_signing::Error::WrongPassword = e {
+                                        if s.ok() {
+                                            new_navstate.screen =
+                                                Screen::SignSufficientCrypto(s.plus_one());
+                                        } else {
+                                            new_navstate = Navstate::clean_screen(Screen::Log);
+                                        }
+                                    }
+                                    new_navstate.alert = Alert::Error;
+                                    let _ = write!(&mut errorline, "{e}");
+                                }
+                            }
+                        }
+                    }
+                    None => {
+                        // `details_str` is `hex_address_key`
+                        // `secret_seed_phrase` is seed phrase
+                        match process_hex_address_key_address_details(&self.db, details_str) {
+                            Ok((multisigner, address_details)) => {
+                                if address_details.has_pwd {
+                                    new_navstate.screen = Screen::SignSufficientCrypto(s.update(
+                                        &multisigner,
+                                        &address_details,
+                                        secret_seed_phrase,
+                                    ));
+                                    new_navstate.modal = Modal::EnterPassword;
+                                } else {
+                                    match transaction_signing::sign_content(
+                                        &self.db,
+                                        &multisigner,
+                                        &address_details,
+                                        s.content(),
+                                        secret_seed_phrase,
+                                        "",
+                                    ) {
+                                        Ok(a) => {
+                                            new_navstate.screen = Screen::SignSufficientCrypto(
+                                                s.update(&multisigner, &address_details, ""),
+                                            );
+                                            new_navstate.modal = Modal::SufficientCryptoReady(a);
+                                        }
+                                        Err(e) => {
+                                            new_navstate.alert = Alert::Error;
+                                            let _ = write!(&mut errorline, "{e}");
+                                        }
+                                    }
+                                }
+                            }
+                            Err(e) => {
+                                new_navstate.alert = Alert::Error;
+                                let _ = write!(&mut errorline, "{e}");
+                            }
+                        }
+                    }
+                }
+            }
+            _ => println!("GoForward does nothing here"),
+        };
+        (new_navstate, errorline)
+    }
+
+    fn handle_select_seed(&self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::SeedSelector => {
+                if !details_str.is_empty() {
+                    // details_str is seed name
+                    match KeysState::new(&self.db, details_str) {
+                        Ok(a) => {
+                            new_navstate = Navstate::clean_screen(Screen::Keys(a));
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    }
+                } else {
+                    println!("SelectSeed needs non-empty details_str")
+                }
+            }
+            _ => println!("SelectSeed does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_select_key(&self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+
+        println!("handle select key");
+
+        match self.navstate.screen {
+            Screen::Keys(ref keys_state) => {
+                if keys_state.is_multiselect() {
+                    match get_multisigner_by_address(
+                        &self.db,
+                        &AddressKey::from_hex(details_str).unwrap(),
+                    ) {
+                        Ok(Some(multisigner)) => {
+                            new_navstate = Navstate::clean_screen(Screen::Keys(
+                                keys_state.select_single(&multisigner),
+                            ));
+                        }
+                        Ok(None) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "key not found {details_str}");
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    }
+                } else {
+                    match AddressState::new(&self.db, details_str, keys_state) {
+                        Ok(a) => {
+                            println!("key details");
+                            new_navstate = Navstate::clean_screen(Screen::KeyDetails(a));
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    }
+                }
+            }
+            _ => println!("SelectKey does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_new_key(&self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        match self.navstate.screen {
+            Screen::Keys(ref keys_state) => {
+                let collision = None;
+                new_navstate = Navstate::clean_screen(Screen::DeriveKey(DeriveState::new(
+                    details_str,
+                    keys_state,
+                    collision,
+                )));
+            }
+            _ => println!("NewKey does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_right_button(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        match &self.navstate.screen {
+            Screen::Log => new_navstate.modal = self.toggle_modal(Modal::LogRight),
+            Screen::SeedSelector => new_navstate.modal = self.toggle_modal(Modal::NewSeedMenu),
+            Screen::Keys(_) => new_navstate.modal = self.toggle_modal(Modal::SeedMenu),
+            Screen::KeyDetails(_) => {
+                new_navstate.modal = self.toggle_modal(Modal::KeyDetailsAction)
+            }
+            Screen::ManageNetworks => new_navstate.modal = self.toggle_modal(Modal::TypesInfo),
+            Screen::NetworkDetails(_) => {
+                new_navstate.modal = self.toggle_modal(Modal::NetworkDetailsMenu)
+            }
+            _ => {}
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_shield(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        new_navstate.alert = Alert::Shield;
+        (new_navstate, errorline)
+    }
+
+    fn handle_new_seed(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        if let Screen::SeedSelector = self.navstate.screen {
+            if let Modal::NewSeedMenu = self.navstate.modal {
+                new_navstate = Navstate::clean_screen(Screen::NewSeed);
+            }
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_recover_seed(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        if let Screen::SeedSelector = self.navstate.screen {
+            if let Modal::NewSeedMenu = self.navstate.modal {
+                new_navstate = Navstate::clean_screen(Screen::RecoverSeedName(String::new()));
+            }
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_backup_seed(&self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        if details_str.is_empty() {
+            match &self.navstate.screen {
+                Screen::Keys(ref keys_state) => {
+                    if let Modal::SeedMenu = self.navstate.modal {
+                        new_navstate.modal = Modal::Backup(keys_state.seed_name());
+                    }
+                }
+                Screen::Settings => {
+                    new_navstate = Navstate::clean_screen(Screen::SelectSeedForBackup);
+                }
+                _ => println!("BackupSeed without seed_name does nothing here"),
+            }
+        } else if let Screen::SelectSeedForBackup = self.navstate.screen {
+            new_navstate = match KeysState::new(&self.db, details_str) {
+                Ok(a) => Navstate {
+                    screen: Screen::Keys(a),
+                    modal: Modal::Backup(details_str.to_string()),
+                    alert: Alert::Empty,
+                },
+                Err(e) => {
+                    let _ = write!(&mut errorline, "{e}");
+                    Navstate {
+                        screen: Screen::Log,
+                        modal: Modal::Empty,
+                        alert: Alert::Error,
+                    }
+                }
+            };
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_network_selector(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        if let Modal::NetworkSelector(_) = self.navstate.modal {
+            new_navstate.modal = Modal::Empty;
+        } else {
+            match &self.navstate.screen {
+                Screen::Keys(ref keys_state) => {
+                    new_navstate.modal =
+                        Modal::NetworkSelector(keys_state.network_specs_key().unwrap());
+                }
+                _ => println!("NetworkSelector does nothing here"),
+            }
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_change_password(&self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        match self.navstate.screen {
+            Screen::DeriveKey(ref derive_state) => {
+                new_navstate.screen = Screen::DeriveKey(derive_state.update(details_str));
+                new_navstate.modal = Modal::PasswordConfirm;
+            }
+            _ => println!("No password to check"),
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_transaction_fetched(&self, details_str: &str) -> Result<(Navstate, String)> {
+        let errorline = String::new();
+
+        let new_navstate = Navstate::clean_screen(Screen::Transaction(Box::new(
+            TransactionState::new(&self.db, details_str)?,
+        )));
+
+        Ok((new_navstate, errorline))
+    }
+
+    fn handle_remove_network(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::NetworkDetails(ref network_specs_key) => {
+                if let Modal::NetworkDetailsMenu = self.navstate.modal {
+                    match db_handling::helpers::remove_network(&self.db, network_specs_key) {
+                        Ok(()) => {
+                            new_navstate = Navstate::clean_screen(Screen::ManageNetworks);
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    }
+                }
+            }
+            _ => println!("RemoveNetwork does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_remove_metadata(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::NetworkDetails(ref network_specs_key) => match self.navstate.modal {
+                Modal::ManageMetadata(network_version) => {
+                    match db_handling::helpers::remove_metadata(
+                        &self.db,
+                        network_specs_key,
+                        network_version,
+                    ) {
+                        Ok(()) => {
+                            new_navstate = Navstate::clean_screen(Screen::NetworkDetails(
+                                network_specs_key.to_owned(),
+                            ));
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    }
+                }
+                _ => println!("RemoveMetadata does nothing here"),
+            },
+            _ => println!("RemoveMetadata does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_remove_types(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::ManageNetworks => match self.navstate.modal {
+                Modal::TypesInfo => match db_handling::helpers::remove_types_info(&self.db) {
+                    Ok(()) => {
+                        new_navstate = Navstate::clean_screen(Screen::Log);
+                    }
+                    Err(e) => {
+                        new_navstate.alert = Alert::Error;
+                        let _ = write!(&mut errorline, "{e}");
+                    }
+                },
+                _ => println!("RemoveTypes does nothing here"),
+            },
+            _ => println!("RemoveTypes does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_sign_network_specs(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        match self.navstate.screen {
+            Screen::NetworkDetails(ref network_specs_key) => {
+                if let Modal::NetworkDetailsMenu = self.navstate.modal {
+                    new_navstate = Navstate::clean_screen(Screen::SignSufficientCrypto(
+                        SufficientCryptoState::init(
+                            transaction_signing::SufficientContent::AddSpecs(
+                                network_specs_key.to_owned(),
+                            ),
+                        ),
+                    ));
+                }
+            }
+            _ => println!("SignNetworkSpecs does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_sign_metadata(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        match self.navstate.screen {
+            Screen::NetworkDetails(ref network_specs_key) => {
+                if let Modal::ManageMetadata(network_version) = self.navstate.modal {
+                    new_navstate = Navstate::clean_screen(Screen::SignSufficientCrypto(
+                        SufficientCryptoState::init(
+                            transaction_signing::SufficientContent::LoadMeta(
+                                network_specs_key.to_owned(),
+                                network_version,
+                            ),
+                        ),
+                    ));
+                }
+            }
+            _ => println!("SignMetadata does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_sign_types(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        match self.navstate.screen {
+            Screen::ManageNetworks => match self.navstate.modal {
+                Modal::TypesInfo => {
+                    new_navstate = Navstate::clean_screen(Screen::SignSufficientCrypto(
+                        SufficientCryptoState::init(
+                            transaction_signing::SufficientContent::LoadTypes,
+                        ),
+                    ));
+                }
+                _ => println!("SignTypes does nothing here"),
+            },
+            _ => println!("SignTypes does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_manage_networks(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        match self.navstate.screen {
+            Screen::Settings => {
+                new_navstate = Navstate::clean_screen(Screen::ManageNetworks);
+            }
+            _ => println!("ManageNetworks does nothing here"),
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_view_general_verifier(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        match self.navstate.screen {
+            Screen::Settings => {
+                new_navstate = Navstate::clean_screen(Screen::Verifier);
+            }
+            _ => println!("ViewGeneralVerifier does nothing here"),
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_manage_metadata(&self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::NetworkDetails(_) => match details_str.parse::<u32>() {
+                Ok(version) => {
+                    new_navstate.modal = Modal::ManageMetadata(version);
+                }
+                Err(e) => {
+                    new_navstate.alert = Alert::Error;
+                    let _ = write!(&mut errorline, "{e}");
+                }
+            },
+            _ => println!("ManageMetadata does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_remove_key(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::Keys(ref keys_state) => match keys_state.get_specialty() {
+                SpecialtyKeysState::Swiped(ref _multisigner) => {
+                    log::info!("Swiped state is currently disabled");
+                }
+                SpecialtyKeysState::MultiSelect(ref multiselect) => {
+                    if let Some(ns) = keys_state.network_specs_key() {
+                        match db_handling::identities::remove_keys_set(&self.db, multiselect, &ns) {
+                            Ok(()) => {
+                                new_navstate = Navstate::clean_screen(Screen::Keys(
+                                    KeysState::new_in_network(&keys_state.seed_name(), &ns),
+                                ));
+                            }
+                            Err(e) => {
+                                new_navstate.alert = Alert::Error;
+                                let _ = write!(&mut errorline, "{e}");
+                            }
+                        }
+                    }
+                }
+                SpecialtyKeysState::None => println!("RemoveKey does nothing here"),
+            },
+            Screen::KeyDetails(ref address_state) => {
+                if let Modal::KeyDetailsAction = self.navstate.modal {
+                    if let Some(network_specs_key) = address_state.network_specs_key() {
+                        match db_handling::identities::remove_key(
+                            &self.db,
+                            &address_state.multisigner(),
+                            &network_specs_key,
+                        ) {
+                            Ok(()) => {
+                                new_navstate = Navstate::clean_screen(Screen::Log);
+                            }
+                            Err(e) => {
+                                new_navstate.alert = Alert::Error;
+                                let _ = write!(&mut errorline, "{e}");
+                            }
+                        }
+                    } else {
+                        println!("RemoveKey does nothing here")
+                    }
+                } else {
+                    println!("RemoveKey does nothing here")
+                }
+            }
+            _ => println!("RemoveKey does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_create_log_comment(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        match self.navstate.screen {
+            Screen::Log => {
+                if let Modal::LogRight = self.navstate.modal {
+                    new_navstate.modal = Modal::LogComment;
+                } else {
+                    println!("CreateLogComment does nothing here")
+                }
+            }
+            _ => println!("CreateLogComment does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_remove_seed(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::Keys(ref keys_state) => {
+                match db_handling::identities::remove_seed(&self.db, &keys_state.seed_name()) {
+                    Ok(()) => {
+                        new_navstate = Navstate::clean_screen(Screen::Log);
+                    }
+                    Err(e) => {
+                        new_navstate.alert = Alert::Error;
+                        let _ = write!(&mut errorline, "{e}");
+                    }
+                }
+            }
+            _ => println!("RemoveSeed does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_clear_log(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+        match self.navstate.screen {
+            Screen::Log => {
+                if let Modal::LogRight = self.navstate.modal {
+                    match db_handling::manage_history::clear_history(&self.db) {
+                        Ok(()) => {
+                            new_navstate = Navstate::clean_screen(Screen::Log);
+                        }
+                        Err(e) => {
+                            new_navstate.alert = Alert::Error;
+                            let _ = write!(&mut errorline, "{e}");
+                        }
+                    }
+                } else {
+                    println!("ClearLog does nothing here")
+                }
+            }
+            _ => println!("ClearLog does nothing here"),
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_show_log_details(&self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let mut errorline = String::new();
+
+        match self.navstate.screen {
+            Screen::Log => {
+                // details_str is u32 order which will be shown
+                match details_str.parse::<u32>() {
+                    Ok(order) => new_navstate = Navstate::clean_screen(Screen::LogDetails(order)),
+                    Err(e) => {
+                        new_navstate.alert = Alert::Error;
+                        let _ = write!(&mut errorline, "{e}");
+                    }
+                }
+            }
+            _ => println!("ShowLogDetails does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_increment(
+        &self,
+        _details_str: &str,
+        _secret_seed_phrase: &str,
+    ) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        match self.navstate.screen {
+            Screen::Keys(ref keys_state) => {
+                new_navstate = Navstate::clean_screen(Screen::Keys(
+                    KeysState::new(&self.db, &keys_state.seed_name()).unwrap(),
+                ));
+            }
+            _ => println!("Increment does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_show_documents(&self) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+        match self.navstate.screen {
+            Screen::Settings => new_navstate = Navstate::clean_screen(Screen::Documents),
+            _ => println!("ShowDocuments does nothing here"),
+        }
+        (new_navstate, errorline)
+    }
+
+    fn handle_text_entry(&mut self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        match self.navstate.screen {
+            Screen::RecoverSeedPhrase(ref mut recover_seed_phrase_state) => {
+                recover_seed_phrase_state.text_entry(details_str);
+                new_navstate = Navstate::clean_screen(Screen::RecoverSeedPhrase(
+                    recover_seed_phrase_state.to_owned(),
+                ));
+            }
+            _ => println!("TextEntry does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn handle_push_word(&mut self, details_str: &str) -> (Navstate, String) {
+        let mut new_navstate = self.navstate.clone();
+        let errorline = String::new();
+
+        match self.navstate.screen {
+            Screen::RecoverSeedPhrase(ref mut recover_seed_phrase_state) => {
+                recover_seed_phrase_state.push_word(details_str);
+                new_navstate = Navstate::clean_screen(Screen::RecoverSeedPhrase(
+                    recover_seed_phrase_state.to_owned(),
+                ));
+            }
+            _ => println!("PushWord does nothing here"),
+        }
+
+        (new_navstate, errorline)
+    }
+
+    fn get_screen_data(
+        &mut self,
+        new_navstate: &Navstate,
+        _details_str: &str,
+    ) -> Result<ScreenData> {
+        let sd = match new_navstate.screen {
+            Screen::Log => {
+                let history = db_handling::manage_history::get_history(&self.db)?;
+                let log: Vec<_> = history
+                    .into_iter()
+                    .map(|(order, entry)| History {
+                        order: order.stamp(),
+                        timestamp: entry.timestamp,
+                        events: entry.events,
+                    })
+                    .collect();
+                let f = MLog { log };
+
+                ScreenData::Log { f }
+            }
+            Screen::LogDetails(order) => {
+                let e = get_history_entry_by_order(&self.db, order)?;
+                let timestamp = e.timestamp.clone();
+                let events = entry_to_transactions_with_decoding(&self.db, e)?;
+                let f = MLogDetails { timestamp, events };
+                ScreenData::LogDetails { f }
+            }
+            Screen::Scan => ScreenData::Scan,
+            Screen::Transaction(ref t) => {
+                let f = match t.action() {
+                    TransactionAction::Derivations { content, .. } => vec![MTransaction {
+                        content: *content.clone(),
+                        ttype: TransactionType::ImportDerivations,
+                        author_info: None,
+                        network_info: None,
+                    }],
+                    TransactionAction::Sign { actions, .. } => actions
+                        .iter()
+                        .map(|a| MTransaction {
+                            content: a.content.clone(),
+                            ttype: TransactionType::Sign,
+                            author_info: Some(a.author_info.clone()),
+                            network_info: Some(a.network_info.clone().into()),
+                        })
+                        .collect(),
+                    TransactionAction::Stub { s, .. } => vec![MTransaction {
+                        content: *s.clone(),
+                        ttype: TransactionType::Stub,
+                        author_info: None,
+                        network_info: None,
+                    }],
+                    TransactionAction::Read { r } => vec![MTransaction {
+                        content: *r.clone(),
+                        ttype: TransactionType::Read,
+                        author_info: None,
+                        network_info: None,
+                    }],
+                };
+                ScreenData::Transaction { f }
+            }
+            Screen::SeedSelector => {
+                let seed_name_cards =
+                    db_handling::interface_signer::get_all_seed_names_with_identicons(
+                        &self.db,
+                        &self.seed_names,
+                    )?;
+                let f = MSeeds { seed_name_cards };
+                ScreenData::SeedSelector { f }
+            }
+            Screen::SelectSeedForBackup => {
+                let seed_name_cards =
+                    db_handling::interface_signer::get_all_seed_names_with_identicons(
+                        &self.db,
+                        &self.seed_names,
+                    )?;
+                let f = MSeeds { seed_name_cards };
+                ScreenData::SelectSeedForBackup { f }
+            }
+            Screen::Keys(ref keys_state) => ScreenData::Keys {
+                f: keys_state.seed_name(),
+            },
+            Screen::KeyDetails(ref address_state) => {
+                let f = if let Some(key) = address_state.network_specs_key().as_ref() {
+                    Some(db_handling::interface_signer::export_key(
+                        &self.db,
+                        &address_state.multisigner(),
+                        &address_state.seed_name(),
+                        key,
+                    )?)
+                } else {
+                    None
+                };
+                ScreenData::KeyDetails { f }
+            }
+            Screen::KeyDetailsMulti(ref address_state_multi) => {
+                let key_details = db_handling::interface_signer::export_key(
+                    &self.db,
+                    &address_state_multi.multisigner(),
+                    &address_state_multi.seed_name(),
+                    &address_state_multi.network_specs_key(),
+                )?;
+                let f = MKeyDetailsMulti {
+                    key_details,
+                    current_number: address_state_multi.number().to_string(),
+                    out_of: address_state_multi.out_of().to_string(),
+                };
+                ScreenData::KeyDetailsMulti { f }
+            }
+            Screen::NewSeed => {
+                let f = MNewSeed {
+                    keyboard: new_navstate.keyboard(),
+                };
+                ScreenData::NewSeed { f }
+            }
+            Screen::RecoverSeedName(ref seed_name) => {
+                let f = MRecoverSeedName {
+                    keyboard: new_navstate.keyboard(),
+                    seed_name: seed_name.to_string(),
+                };
+                ScreenData::RecoverSeedName { f }
+            }
+            Screen::RecoverSeedPhrase(ref recover_seed_phrase_state) => {
+                let draft = recover_seed_phrase_state.draft();
+                let user_input = draft.user_input();
+                let guess_set = guess(user_input);
+                let ready_seed = draft.try_finalize();
+                let mut draft = draft.draft();
+
+                let f = MRecoverSeedPhrase {
+                    keyboard: new_navstate.keyboard(),
+                    seed_name: recover_seed_phrase_state.name(),
+                    user_input: user_input.to_string(),
+                    guess_set: guess_set.iter().map(|s| s.to_string()).collect(),
+                    draft: draft.clone(),
+                    ready_seed,
+                };
+
+                draft.zeroize();
+                ScreenData::RecoverSeedPhrase { f }
+            }
+            Screen::DeriveKey(ref derive_state) => ScreenData::DeriveKey {
+                f: MDeriveKey {
+                    seed_name: derive_state.seed_name(),
+                },
+            },
+            Screen::Settings => {
+                // for now has same content as Screen::Verifier
+                //
+                // IMPORTANT: this screen should never fail. Ever.
+                // There is no error handling beyond this point,
+                // if this fails - user is stuck here forever.
+                //
+                // Please don't fall into error modal from here,
+                // you have `error` field for that.
+                //
+                // Don't ignore this on refactor like everyone else before you.
+                let f = match db_handling::helpers::get_general_verifier(&self.db) {
+                    Ok(Verifier { v: Some(vv) }) => {
+                        let card = vv.show_card();
+                        MSettings {
+                            public_key: Some(card.public_key),
+                            identicon: Some(card.identicon),
+                            encryption: Some(card.encryption),
+                            error: None,
+                        }
+                    }
+                    Ok(Verifier { v: None }) => Default::default(),
+                    Err(e) => MSettings {
+                        public_key: None,
+                        identicon: None,
+                        encryption: None,
+                        error: Some(format!("{e}")),
+                    },
+                };
+                ScreenData::Settings { f }
+            }
+            Screen::Verifier => {
+                let f = db_handling::helpers::get_general_verifier(&self.db)?;
+                ScreenData::VVerifier { f: f.show_card() }
+            }
+            Screen::ManageNetworks => {
+                let networks = db_handling::interface_signer::show_all_networks(&self.db)?;
+                let f = MManageNetworks { networks };
+                ScreenData::ManageNetworks { f }
+            }
+            Screen::NetworkDetails(ref network_specs_key) => {
+                let f = db_handling::interface_signer::network_details_by_key(
+                    &self.db,
+                    network_specs_key,
+                )?;
+                ScreenData::NNetworkDetails { f }
+            }
+            Screen::SignSufficientCrypto(_) => {
+                let identities = db_handling::interface_signer::print_all_identities(&self.db)?;
+                let f = MSignSufficientCrypto { identities };
+                ScreenData::SignSufficientCrypto { f }
+            }
+            _ => ScreenData::Documents,
+        };
+
+        Ok(sd)
+    }
+
+    fn get_modal_details(&mut self, new_navstate: &mut Navstate) -> Result<Option<ModalData>> {
+        let modal = match new_navstate.modal {
+            Modal::Backup(ref seed_name) => Some(ModalData::Backup {
+                f: db_handling::interface_signer::backup_prep(&self.db, seed_name)?,
+            }),
+            Modal::SeedMenu => match new_navstate.screen {
+                Screen::Keys(ref keys_state) => {
+                    let seed = keys_state.seed_name();
+                    new_navstate.screen = Screen::Keys(keys_state.deselect_specialty());
+                    Some(ModalData::SeedMenu {
+                        f: MSeedMenu { seed },
+                    })
+                }
+                _ => None,
+            },
+            Modal::NewSeedBackup(ref new_seed_name) => Some(ModalData::NewSeedBackup {
+                f: db_handling::interface_signer::print_new_seed(new_seed_name)?,
+            }),
+            Modal::NetworkSelector(ref network_specs_key) => Some(ModalData::NetworkSelector {
+                f: db_handling::interface_signer::show_all_networks_with_flag(
+                    &self.db,
+                    network_specs_key,
+                )?,
+            }),
+            Modal::PasswordConfirm => match new_navstate.screen {
+                Screen::DeriveKey(ref derive_state) => {
+                    let mut path = derive_state.path();
+                    match db_handling::identities::cut_path(&path) {
+                        Ok((cropped_path, pwd)) => {
+                            path.zeroize();
+                            Some(ModalData::PasswordConfirm {
+                                f: MPasswordConfirm {
+                                    pwd,
+                                    cropped_path,
+                                    seed_name: derive_state.seed_name(),
+                                },
+                            })
+                        }
+                        Err(e) => {
+                            path.zeroize();
+                            return Err(e.into());
+                        }
+                    }
+                }
+                _ => None,
+            },
+            Modal::SignatureReady(ref a) => Some(ModalData::SignatureReady {
+                f: export_signatures_bulk(a)?,
+            }),
+            Modal::EnterPassword => match new_navstate.screen {
+                Screen::Transaction(ref t) => {
+                    t.current_password_author_info()
+                        .map(|(author_info, network_info)| ModalData::EnterPassword {
+                            f: MEnterPassword {
+                                author_info,
+                                network_info: Some(network_info.into()),
+                                counter: t.counter() as u32,
+                            },
+                        })
+                }
+                Screen::SignSufficientCrypto(ref s) => {
+                    if let Some((_, _, author_info)) = s.key_selected() {
+                        Some(ModalData::EnterPassword {
+                            f: MEnterPassword {
+                                author_info,
+                                network_info: None,
+                                counter: s.counter() as u32,
+                            },
+                        })
+                    } else {
+                        None
+                    }
+                }
+                _ => None,
+            },
+            Modal::LogRight => Some(ModalData::LogRight {
+                f: definitions::navigation::MLogRight {
+                    checksum: db_handling::interface_signer::history_hex_checksum(&self.db)?,
+                },
+            }),
+            Modal::ManageMetadata(network_version) => match new_navstate.screen {
+                Screen::NetworkDetails(ref network_specs_key) => Some(ModalData::ManageMetadata {
+                    f: db_handling::interface_signer::metadata_details(
+                        &self.db,
+                        network_specs_key,
+                        network_version,
+                    )?,
+                }),
+                _ => None,
+            },
+            Modal::SufficientCryptoReady((ref sufficient, ref content)) => {
+                match new_navstate.screen {
+                    Screen::SignSufficientCrypto(ref s) => {
+                        if let Some((_, address, author_info)) = s.key_selected() {
+                            let content = content.clone();
+                            let network_logo = match address.network_id {
+                                Some(network_id) => Some(
+                                    db_handling::helpers::get_network_specs(&self.db, &network_id)?
+                                        .specs
+                                        .logo,
+                                ),
+                                None => None,
+                            };
+                            let f = MSufficientCryptoReady {
+                                author_info,
+                                sufficient: sufficient.clone(),
+                                content,
+                                network_logo,
+                            };
+                            Some(ModalData::SufficientCryptoReady { f })
+                        } else {
+                            None
+                        }
+                    }
+                    _ => None,
+                }
+            }
+            Modal::TypesInfo => Some(ModalData::TypesInfo {
+                f: db_handling::interface_signer::show_types_status(&self.db)?,
+            }),
+            Modal::SelectSeed => {
+                match get_all_seed_names_with_identicons(&self.db, &self.seed_names) {
+                    Ok(a) => Some(ModalData::SelectSeed {
+                        f: MSeeds { seed_name_cards: a },
+                    }),
+                    Err(_e) => {
+                        new_navstate.alert = Alert::Error;
+                        Some(ModalData::SelectSeed {
+                            f: MSeeds {
+                                seed_name_cards: vec![],
+                            },
+                        })
+                    }
+                }
+            }
+            Modal::NewSeedMenu => Some(ModalData::NewSeedMenu),
+            Modal::LogComment => Some(ModalData::LogComment),
+            Modal::NetworkDetailsMenu => Some(ModalData::NetworkDetailsMenu),
+            Modal::KeyDetailsAction => Some(ModalData::KeyDetailsAction),
+            Modal::Empty => None,
+        };
+        Ok(modal)
+    }
+
+    ///Decide what to do and do it!
+    pub fn perform(
+        &mut self,
+        action: Action,
+        details_str: &str,
+        secret_seed_phrase: &str,
+    ) -> Result<ActionResult> {
+        let mut new_navstate = self.navstate.to_owned();
+
+        let mut errorline;
+        //Try to perform action
+        (new_navstate, errorline) = match action {
+            //App init
+            Action::Start => self.handle_action_start(),
+            //Simple navigation commands
+            Action::NavbarLog => self.handle_navbar_log(),
+            Action::NavbarScan => self.handle_navbar_scan(),
+            Action::NavbarKeys => self.handle_navbar_keys(),
+            Action::NavbarSettings => self.handle_navbar_settings(),
+            //General back action is defined here
+            Action::GoBack => self.handle_action_go_back(),
+            Action::GoForward => self.handle_action_go_forward(details_str, secret_seed_phrase),
+            Action::SelectSeed => self.handle_select_seed(details_str),
+            Action::SelectKey => self.handle_select_key(details_str),
+            Action::NewKey => self.handle_new_key(details_str),
+            Action::RightButtonAction => self.handle_right_button(),
+            Action::Shield => self.handle_shield(),
+            Action::NewSeed => self.handle_new_seed(),
+            Action::RecoverSeed => self.handle_recover_seed(),
+            Action::BackupSeed => self.handle_backup_seed(details_str),
+            Action::NetworkSelector => self.handle_network_selector(),
+            Action::CheckPassword => self.handle_change_password(details_str),
+            Action::TransactionFetched => self.handle_transaction_fetched(details_str)?,
+            Action::RemoveNetwork => self.handle_remove_network(),
+            Action::RemoveMetadata => self.handle_remove_metadata(),
+            Action::RemoveTypes => self.handle_remove_types(),
+            Action::SignNetworkSpecs => self.handle_sign_network_specs(),
+            Action::SignMetadata => self.handle_sign_metadata(),
+            Action::SignTypes => self.handle_sign_types(),
+            Action::ManageNetworks => self.handle_manage_networks(),
+            Action::ViewGeneralVerifier => self.handle_view_general_verifier(),
+            Action::ManageMetadata => self.handle_manage_metadata(details_str),
+            Action::RemoveKey => self.handle_remove_key(),
+            Action::RemoveSeed => self.handle_remove_seed(),
+            Action::ClearLog => self.handle_clear_log(),
+            Action::CreateLogComment => self.handle_create_log_comment(),
+            Action::ShowLogDetails => self.handle_show_log_details(details_str),
+            Action::Increment => self.handle_increment(details_str, secret_seed_phrase),
+            Action::ShowDocuments => self.handle_show_documents(),
+            Action::TextEntry => self.handle_text_entry(details_str),
+            Action::PushWord => self.handle_push_word(details_str),
+            Action::Nothing => (new_navstate, String::new()),
+        };
+
+        //Prepare screen details
+        let screen_data = match self.get_screen_data(&new_navstate, details_str) {
+            Ok(sd) => sd,
+            Err(e) => {
+                let _ = write!(&mut errorline, "{e}");
+                //This is special error used only
+                //here; please do not change it to
+                //`Alert::Error` or app may get stuck
+                new_navstate.alert = Alert::ErrorDisplay;
+                ScreenData::Settings {
+                    f: MSettings::default(),
+                }
+            }
+        };
+
+        //Prepare modal details
+        let modal_data = match self.get_modal_details(&mut new_navstate) {
+            Ok(md) => md,
+            Err(e) => {
+                let _ = write!(&mut errorline, "{e}");
+                new_navstate.alert = Alert::Error;
+                None
+            }
+        };
+
+        //Prepare alert details
+        //Important! No errors could be handled in this block!
+        let alert_data = match new_navstate.alert {
+            Alert::Error | Alert::ErrorDisplay => Some(AlertData::ErrorData { f: errorline }),
+            Alert::Empty => None,
+            Alert::Shield => match get_danger_status(&self.db) {
+                Ok(true) => Some(AlertData::Shield {
+                    f: Some(ShieldAlert::Past),
+                }),
+                Ok(false) => Some(AlertData::Shield { f: None }),
+                Err(e) => Some(AlertData::ErrorData { f: format!("{e}") }),
+            },
+        };
+
+        self.navstate = new_navstate;
+
+        let action_result = ActionResult {
+            screen_label: self.get_screen_label(),
+            back: self.navstate.screen.has_back(),
+            footer: self.get_footer(),
+            footer_button: self.get_active_navbutton(),
+            right_button: self.get_right_button(),
+            screen_name_type: self.get_screen_name_type(),
+            screen_data,
+            modal_data,
+            alert_data,
+        };
+
+        Ok(action_result)
+    }
+
+    fn toggle_modal(&self, modal: Modal) -> Modal {
+        if modal == self.navstate.modal {
+            Modal::Empty
+        } else {
+            modal
+        }
+    }
+
+    ///Generate screen label taking into account state
+    fn get_screen_label(&self) -> String {
+        match &self.navstate.screen {
+            Screen::KeyDetails(ref address_state) => {
+                if address_state.is_root() {
+                    String::from("Seed Key")
+                } else {
+                    String::from("Derived Key")
+                }
+            }
+            a => a.get_default_label(),
+        }
+    }
+
+    fn get_footer(&self) -> bool {
+        match self.navstate.screen {
+            Screen::Log => true,
+            Screen::LogDetails(_) => true,
+            Screen::Scan => true,
+            Screen::Transaction(_) => false,
+            Screen::SeedSelector => true,
+            Screen::Keys(_) => true,
+            Screen::KeyDetails(_) => false,
+            Screen::KeyDetailsMulti(_) => false,
+            Screen::NewSeed => false,
+            Screen::RecoverSeedName(_) => false,
+            Screen::RecoverSeedPhrase(_) => false,
+            Screen::DeriveKey(_) => false,
+            Screen::Settings => true,
+            Screen::Verifier => false,
+            Screen::ManageNetworks => false,
+            Screen::NetworkDetails(_) => false,
+            Screen::SelectSeedForBackup => false,
+            Screen::SignSufficientCrypto(_) => false,
+            Screen::Documents => false,
+            Screen::Nowhere => true,
+        }
+    }
+
+    ///Decide which footer button should shine
+    fn get_active_navbutton(&self) -> Option<FooterButton> {
+        match self.navstate.screen {
+            Screen::Log | Screen::LogDetails(_) => Some(FooterButton::Log),
+            Screen::Scan | Screen::Transaction(_) => Some(FooterButton::Scan),
+            Screen::SeedSelector
+            | Screen::Keys(_)
+            | Screen::KeyDetails(_)
+            | Screen::KeyDetailsMulti(_)
+            | Screen::NewSeed
+            | Screen::RecoverSeedName(_)
+            | Screen::RecoverSeedPhrase(_)
+            | Screen::DeriveKey(_) => Some(FooterButton::Keys),
+            Screen::Settings
+            | Screen::Verifier
+            | Screen::ManageNetworks
+            | Screen::NetworkDetails(_)
+            | Screen::SelectSeedForBackup
+            | Screen::SignSufficientCrypto(_)
+            | Screen::Documents => Some(FooterButton::Settings),
+            Screen::Nowhere => None,
+        }
+    }
+
+    ///Should header have some button on the right?
+    fn get_right_button(&self) -> Option<RightButton> {
+        match self.navstate.screen {
+            Screen::Log => Some(RightButton::LogRight),
+            Screen::SeedSelector => Some(RightButton::NewSeed),
+            Screen::Keys(ref keys_state) => {
+                if let Modal::Backup(_) = self.navstate.modal {
+                    None
+                } else if keys_state.is_multiselect() {
+                    Some(RightButton::MultiSelect)
+                } else {
+                    Some(RightButton::Backup)
+                }
+            }
+            Screen::KeyDetails(_) | Screen::KeyDetailsMulti(_) => Some(RightButton::KeyMenu),
+            Screen::NewSeed
+            | Screen::RecoverSeedName(_)
+            | Screen::RecoverSeedPhrase(_)
+            | Screen::DeriveKey(_)
+            | Screen::Settings
+            | Screen::LogDetails(_)
+            | Screen::Scan
+            | Screen::Transaction(_)
+            | Screen::Documents
+            | Screen::Nowhere
+            | Screen::Verifier
+            | Screen::SignSufficientCrypto(_) => None,
+            Screen::ManageNetworks => Some(RightButton::TypesInfo),
+            Screen::NetworkDetails(_) => Some(RightButton::NDMenu),
+            Screen::SelectSeedForBackup => Some(RightButton::Backup),
+        }
+    }
+
+    ///Determine whether screen name should be `h1` or `h4`
+    fn get_screen_name_type(&self) -> ScreenNameType {
+        match self.navstate.screen {
+            Screen::Log
+            | Screen::LogDetails(_)
+            | Screen::Keys(_)
+            | Screen::KeyDetails(_)
+            | Screen::KeyDetailsMulti(_)
+            | Screen::Settings
+            | Screen::Verifier
+            | Screen::ManageNetworks
+            | Screen::NetworkDetails(_)
+            | Screen::SelectSeedForBackup
+            | Screen::Documents
+            | Screen::Nowhere => ScreenNameType::H4,
+            Screen::NewSeed
+            | Screen::RecoverSeedName(_)
+            | Screen::RecoverSeedPhrase(_)
+            | Screen::DeriveKey(_)
+            | Screen::Scan
+            | Screen::Transaction(_)
+            | Screen::SeedSelector
+            | Screen::SignSufficientCrypto(_) => ScreenNameType::H1,
+        }
+    }
+
+    fn correct_seed_selector(&self) -> Navstate {
+        Navstate::clean_screen(Screen::SeedSelector)
+    }
+}
+
+impl Navstate {
+    pub fn clean_screen(screen: Screen) -> Navstate {
+        Navstate {
+            screen,
+            modal: Modal::Empty,
+            alert: Alert::Empty,
+        }
+    }
+
+    ///Check if keyboard should be shown
+    fn keyboard(&self) -> bool {
+        if let Modal::Empty = self.modal {
+            matches!(self.alert, Alert::Empty)
+        } else {
+            false
+        }
+    }
+}
+
+fn process_hex_address_key_address_details(
+    database: &sled::Db,
+    hex_address_key: &str,
+) -> Result<(MultiSigner, AddressDetails)> {
+    let address_key = AddressKey::from_hex(hex_address_key)?;
+    let multisigner = get_multisigner_by_address(database, &address_key)?
+        .ok_or_else(|| Error::KeyNotFound(format!("0x{hex_address_key}")))?;
+    let address_details = db_handling::helpers::get_address_details(database, &address_key)?;
+    Ok((multisigner, address_details))
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/screens.rs.html b/rustdocs/src/navigator/screens.rs.html new file mode 100644 index 0000000000..b41395ab5b --- /dev/null +++ b/rustdocs/src/navigator/screens.rs.html @@ -0,0 +1,1263 @@ +screens.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+
//!List of all screens
+
+use sp_runtime::MultiSigner;
+use zeroize::Zeroize;
+
+use crate::{
+    error::{Error, Result},
+    states::TransactionState,
+};
+use db_handling::{
+    helpers::{get_address_details, get_network_specs},
+    interface_signer::{first_network, SeedDraft},
+};
+use definitions::navigation::MAddressCard;
+use definitions::{
+    crypto::Encryption,
+    helpers::{make_identicon_from_multisigner, multisigner_to_public, IdenticonStyle},
+    keyring::{AddressKey, NetworkSpecsKey},
+    navigation::Address,
+    users::AddressDetails,
+};
+use transaction_signing;
+
+const MAX_COUNT_SET: u8 = 3;
+
+///All screens
+#[derive(Clone, Debug)]
+pub enum Screen {
+    Log,
+    LogDetails(u32),
+    Scan,
+    Transaction(Box<TransactionState>),
+    SeedSelector,
+    Keys(KeysState),
+    KeyDetails(AddressState),
+    KeyDetailsMulti(AddressStateMulti),
+    NewSeed,
+    RecoverSeedName(String),
+    RecoverSeedPhrase(RecoverSeedPhraseState),
+    DeriveKey(DeriveState),
+    Settings,
+    Verifier,
+    ManageNetworks,
+    NetworkDetails(NetworkSpecsKey),
+    SelectSeedForBackup,
+    SignSufficientCrypto(SufficientCryptoState),
+    Documents,
+    Nowhere,
+}
+
+#[derive(Debug, Clone)]
+pub enum SpecialtyKeysState {
+    None,
+    Swiped(MultiSigner),
+    MultiSelect(Vec<MultiSigner>),
+}
+
+///State of keys screen
+#[derive(Debug, Clone)]
+pub struct KeysState {
+    seed_name: String,
+    network_specs_key: Option<NetworkSpecsKey>,
+    specialty: SpecialtyKeysState,
+}
+
+///State of screen with 1 key
+#[derive(Debug, Clone)]
+pub struct AddressState {
+    seed_name: String,
+    network_specs_key: Option<NetworkSpecsKey>,
+    multisigner: MultiSigner,
+    is_root: bool,
+}
+
+///State of screen with multiple keys
+#[derive(Debug, Clone)]
+pub struct AddressStateMulti {
+    seed_name: String,
+    network_specs_key: NetworkSpecsKey,
+    selected: usize,
+    set: Vec<(MultiSigner, bool)>,
+}
+
+///State of derive key screen
+#[derive(Debug, Clone)]
+pub struct DeriveState {
+    entered_info: EnteredInfo,
+    keys_state: KeysState,
+    collision: Option<(MultiSigner, AddressDetails)>,
+}
+
+///State of screen generating sufficient crypto
+#[derive(Debug, Clone)]
+pub struct SufficientCryptoState {
+    key_selected: Option<(MultiSigner, AddressDetails, MAddressCard)>,
+    entered_info: EnteredInfo,
+    content: transaction_signing::SufficientContent,
+    counter: u8,
+}
+
+///State of screen recover seed phrase
+#[derive(Debug, Clone)]
+pub struct RecoverSeedPhraseState {
+    seed_name: String,
+    seed_draft: SeedDraft,
+}
+
+///`EnteredInfo`, `path+pwd` entered by the user, zeroizeable
+#[derive(Debug, Clone, Zeroize)]
+#[zeroize(drop)]
+pub struct EnteredInfo(pub String);
+
+impl KeysState {
+    pub fn new(database: &sled::Db, seed_name: &str) -> Result<Self> {
+        let network_specs = first_network(database)?;
+
+        Ok(Self {
+            seed_name: seed_name.to_string(),
+            network_specs_key: network_specs.map(|ns| {
+                NetworkSpecsKey::from_parts(&ns.specs.genesis_hash, &ns.specs.encryption)
+            }),
+            specialty: SpecialtyKeysState::None,
+        })
+    }
+    pub fn new_in_network(seed_name: &str, network_specs_key: &NetworkSpecsKey) -> Self {
+        Self {
+            seed_name: seed_name.to_string(),
+            network_specs_key: Some(network_specs_key.to_owned()),
+            specialty: SpecialtyKeysState::None,
+        }
+    }
+    pub fn change_network(&self, network_specs_key: &NetworkSpecsKey) -> Self {
+        Self {
+            seed_name: self.seed_name(),
+            network_specs_key: Some(network_specs_key.to_owned()),
+            specialty: SpecialtyKeysState::None,
+        }
+    }
+    pub fn seed_name(&self) -> String {
+        self.seed_name.to_owned()
+    }
+    pub fn network_specs_key(&self) -> Option<NetworkSpecsKey> {
+        self.network_specs_key.to_owned()
+    }
+    pub fn get_specialty(&self) -> SpecialtyKeysState {
+        self.specialty.to_owned()
+    }
+    pub fn swipe(&self, multisigner: &MultiSigner) -> Self {
+        let specialty = match &self.specialty {
+            SpecialtyKeysState::None => SpecialtyKeysState::Swiped(multisigner.to_owned()),
+            SpecialtyKeysState::Swiped(swiped_multisigner) => {
+                if swiped_multisigner == multisigner {
+                    SpecialtyKeysState::None
+                } else {
+                    SpecialtyKeysState::Swiped(multisigner.to_owned())
+                }
+            }
+            SpecialtyKeysState::MultiSelect(_) => self.specialty.to_owned(),
+        };
+        Self {
+            seed_name: self.seed_name(),
+            network_specs_key: self.network_specs_key(),
+            specialty,
+        }
+    }
+    pub fn select_single(&self, multisigner: &MultiSigner) -> Self {
+        let specialty = match &self.specialty {
+            SpecialtyKeysState::None => {
+                SpecialtyKeysState::MultiSelect(vec![multisigner.to_owned()])
+            }
+            SpecialtyKeysState::Swiped(_) => self.specialty.to_owned(),
+            SpecialtyKeysState::MultiSelect(multiselect) => {
+                let mut new_multiselect = multiselect.to_owned();
+                if multiselect.contains(multisigner) {
+                    new_multiselect.retain(|a| a != multisigner);
+                } else {
+                    new_multiselect.push(multisigner.to_owned());
+                }
+                SpecialtyKeysState::MultiSelect(new_multiselect)
+            }
+        };
+        Self {
+            seed_name: self.seed_name(),
+            network_specs_key: self.network_specs_key(),
+            specialty,
+        }
+    }
+    pub fn select_set(&self, set: Vec<MultiSigner>) -> Self {
+        Self {
+            seed_name: self.seed_name(),
+            network_specs_key: self.network_specs_key(),
+            specialty: SpecialtyKeysState::MultiSelect(set),
+        }
+    }
+    pub fn get_swiped_key(&self) -> Option<MultiSigner> {
+        if let SpecialtyKeysState::Swiped(ref multisigner) = self.specialty {
+            Some(multisigner.to_owned())
+        } else {
+            None
+        }
+    }
+    pub fn get_multiselect_keys(&self) -> Vec<MultiSigner> {
+        if let SpecialtyKeysState::MultiSelect(ref multiselect) = self.specialty {
+            multiselect.to_vec()
+        } else {
+            Vec::new()
+        }
+    }
+    pub fn is_multiselect(&self) -> bool {
+        matches!(self.specialty, SpecialtyKeysState::MultiSelect(_))
+    }
+    pub fn deselect_specialty(&self) -> Self {
+        Self {
+            seed_name: self.seed_name(),
+            network_specs_key: self.network_specs_key(),
+            specialty: SpecialtyKeysState::None,
+        }
+    }
+}
+
+impl AddressState {
+    pub fn new(database: &sled::Db, details_str: &str, keys_state: &KeysState) -> Result<Self> {
+        let lines: Vec<_> = details_str.lines().collect();
+        let hex_address_key = lines[0];
+        let network_specs_key = lines.get(1);
+        let network_specs_key = if let Some(network_specs_key) = &network_specs_key {
+            NetworkSpecsKey::from_hex(network_specs_key)?
+        } else {
+            return Err(Error::KeyNotFound("network specs key".to_string()));
+        };
+        let address_key = AddressKey::from_hex(hex_address_key)?;
+        let multisigner = address_key.multi_signer().clone();
+        let network_specs = get_network_specs(database, &network_specs_key)?;
+        let is_root = get_address_details(
+            database,
+            &AddressKey::new(multisigner.clone(), Some(network_specs.specs.genesis_hash)),
+        )?
+        .is_root();
+
+        Ok(Self {
+            seed_name: keys_state.seed_name(),
+            network_specs_key: Some(network_specs_key),
+            multisigner,
+            is_root,
+        })
+    }
+    pub fn blank_keys_state(&self) -> KeysState {
+        KeysState {
+            seed_name: self.seed_name(),
+            // TODO: Derive in network correct implementation:
+            // https://github.com/paritytech/parity-signer/issues/1505
+            network_specs_key: Some(self.network_specs_key().unwrap()),
+            specialty: SpecialtyKeysState::None,
+        }
+    }
+    pub fn seed_name(&self) -> String {
+        self.seed_name.to_owned()
+    }
+    /// If `None`, this is a root key.
+    pub fn network_specs_key(&self) -> Option<NetworkSpecsKey> {
+        self.network_specs_key.to_owned()
+    }
+    pub fn multisigner(&self) -> MultiSigner {
+        self.multisigner.to_owned()
+    }
+    pub fn is_root(&self) -> bool {
+        self.is_root
+    }
+}
+
+impl AddressStateMulti {
+    pub fn new(
+        database: &sled::Db,
+        seed_name: String,
+        network_specs_key: NetworkSpecsKey,
+        multiselect: &[MultiSigner],
+    ) -> Result<Self> {
+        let mut set: Vec<(MultiSigner, bool)> = Vec::new();
+        let network = get_network_specs(database, &network_specs_key)?;
+
+        for multisigner in multiselect.iter() {
+            let address_details = get_address_details(
+                database,
+                &AddressKey::new(multisigner.clone(), Some(network.specs.genesis_hash)),
+            )?;
+            set.push((multisigner.to_owned(), address_details.is_root()))
+        }
+        Ok(Self {
+            seed_name,
+            network_specs_key,
+            selected: 0,
+            set,
+        })
+    }
+    pub fn blank_keys_state(&self) -> KeysState {
+        KeysState {
+            seed_name: self.seed_name(),
+            network_specs_key: Some(self.network_specs_key()),
+            specialty: SpecialtyKeysState::None,
+        }
+    }
+    pub fn seed_name(&self) -> String {
+        self.seed_name.to_owned()
+    }
+    pub fn network_specs_key(&self) -> NetworkSpecsKey {
+        self.network_specs_key.to_owned()
+    }
+    pub fn multisigner(&self) -> MultiSigner {
+        self.set[self.selected].0.to_owned()
+    }
+    pub fn set(&self) -> Vec<(MultiSigner, bool)> {
+        self.set.to_owned()
+    }
+    pub fn next(&self) -> Self {
+        let selected = {
+            if self.selected + 1 == self.set.len() {
+                0
+            } else {
+                self.selected + 1
+            }
+        };
+        Self {
+            seed_name: self.seed_name(),
+            network_specs_key: self.network_specs_key(),
+            selected,
+            set: self.set(),
+        }
+    }
+    pub fn previous(&self) -> Self {
+        let selected = {
+            if self.selected == 0 {
+                self.set.len() - 1
+            } else {
+                self.selected - 1
+            }
+        };
+        Self {
+            seed_name: self.seed_name(),
+            network_specs_key: self.network_specs_key(),
+            selected,
+            set: self.set(),
+        }
+    }
+    pub fn number(&self) -> usize {
+        self.selected + 1
+    }
+    pub fn out_of(&self) -> usize {
+        self.set.len()
+    }
+    pub fn is_root(&self) -> bool {
+        self.set[self.selected].1
+    }
+}
+
+impl DeriveState {
+    pub fn new(
+        entered_string: &str,
+        keys_state: &KeysState,
+        collision: Option<(MultiSigner, AddressDetails)>,
+    ) -> Self {
+        Self {
+            entered_info: EnteredInfo(entered_string.to_string()),
+            keys_state: keys_state.to_owned(),
+            collision,
+        }
+    }
+    pub fn blank_keys_state(&self) -> KeysState {
+        KeysState {
+            seed_name: self.keys_state.seed_name(),
+            network_specs_key: self.keys_state.network_specs_key(),
+            specialty: SpecialtyKeysState::None,
+        }
+    }
+    pub fn seed_name(&self) -> String {
+        self.keys_state.seed_name()
+    }
+    pub fn network_specs_key(&self) -> Option<NetworkSpecsKey> {
+        self.keys_state.network_specs_key()
+    }
+    pub fn path(&self) -> String {
+        self.entered_info.0.to_owned()
+    }
+    pub fn collision(&self) -> Option<(MultiSigner, AddressDetails)> {
+        self.collision.to_owned()
+    }
+    pub fn update(&self, new_secret_string: &str) -> Self {
+        Self {
+            entered_info: EnteredInfo(new_secret_string.to_string()),
+            keys_state: self.blank_keys_state(),
+            collision: self.collision(),
+        }
+    }
+    pub fn collided_with(
+        &self,
+        multisigner: &MultiSigner,
+        address_details: &AddressDetails,
+    ) -> Self {
+        Self {
+            entered_info: self.entered_info.to_owned(),
+            keys_state: self.blank_keys_state(),
+            collision: Some((multisigner.to_owned(), address_details.to_owned())),
+        }
+    }
+}
+
+impl SufficientCryptoState {
+    pub fn init(content: transaction_signing::SufficientContent) -> Self {
+        Self {
+            key_selected: None,
+            entered_info: EnteredInfo("".to_string()),
+            content,
+            counter: 1,
+        }
+    }
+    pub fn content(&self) -> transaction_signing::SufficientContent {
+        self.content.to_owned()
+    }
+    pub fn key_selected(&self) -> Option<(MultiSigner, AddressDetails, MAddressCard)> {
+        self.key_selected.to_owned()
+    }
+    pub fn update(
+        &self,
+        multisigner: &MultiSigner,
+        address_details: &AddressDetails,
+        new_secret_string: &str,
+    ) -> Self {
+        let style = if address_details.encryption == Encryption::Ethereum {
+            IdenticonStyle::Blockies
+        } else {
+            IdenticonStyle::Dots
+        };
+
+        let identicon = make_identicon_from_multisigner(multisigner, style);
+        let address_key = hex::encode(AddressKey::new(multisigner.clone(), None).key());
+        let author_info = MAddressCard {
+            base58: hex::encode(multisigner_to_public(multisigner)),
+            address_key,
+            address: Address {
+                identicon,
+                seed_name: address_details.seed_name.clone(),
+                path: address_details.path.clone(),
+                has_pwd: address_details.has_pwd,
+                secret_exposed: address_details.secret_exposed,
+            },
+        };
+        Self {
+            key_selected: Some((
+                multisigner.to_owned(),
+                address_details.to_owned(),
+                author_info,
+            )),
+            entered_info: EnteredInfo(new_secret_string.to_string()),
+            content: self.content(),
+            counter: self.counter,
+        }
+    }
+    pub fn seed(&self) -> String {
+        self.entered_info.0.to_string()
+    }
+    pub fn plus_one(&self) -> Self {
+        Self {
+            key_selected: self.key_selected(),
+            entered_info: self.entered_info.to_owned(),
+            content: self.content(),
+            counter: self.counter + 1,
+        }
+    }
+    pub fn ok(&self) -> bool {
+        self.counter < MAX_COUNT_SET
+    }
+    pub fn counter(&self) -> u8 {
+        self.counter
+    }
+}
+
+impl RecoverSeedPhraseState {
+    pub fn new(seed_name: &str) -> Self {
+        Self {
+            seed_name: seed_name.to_string(),
+            seed_draft: SeedDraft::initiate(),
+        }
+    }
+    pub fn name(&self) -> String {
+        self.seed_name.to_string()
+    }
+    pub fn draft(&self) -> &SeedDraft {
+        &self.seed_draft
+    }
+    pub fn text_entry(&mut self, details_str: &str) {
+        self.seed_draft.text_field_update(details_str)
+    }
+    pub fn push_word(&mut self, details_str: &str) {
+        self.seed_draft.added(details_str, None);
+    }
+}
+
+impl Screen {
+    ///Encode screen name into string for UI
+    pub fn get_name(&self) -> Option<String> {
+        match self {
+            Screen::Log => Some(String::from("Log")),
+            Screen::LogDetails(_) => Some(String::from("LogDetails")),
+            Screen::Scan => Some(String::from("Scan")),
+            Screen::Transaction(_) => Some(String::from("Transaction")),
+            Screen::SeedSelector => Some(String::from("SeedSelector")),
+            Screen::Keys(_) => Some(String::from("Keys")),
+            Screen::KeyDetails(_) => Some(String::from("KeyDetails")),
+            Screen::KeyDetailsMulti(_) => Some(String::from("KeyDetailsMultiSelect")),
+            Screen::NewSeed => Some(String::from("NewSeed")),
+            Screen::RecoverSeedName(_) => Some(String::from("RecoverSeedName")),
+            Screen::RecoverSeedPhrase(_) => Some(String::from("RecoverSeedPhrase")),
+            Screen::DeriveKey(_) => Some(String::from("DeriveKey")),
+            Screen::Settings => Some(String::from("Settings")),
+            Screen::Verifier => Some(String::from("Verifier")),
+            Screen::ManageNetworks => Some(String::from("ManageNetworks")),
+            Screen::NetworkDetails(_) => Some(String::from("NetworkDetails")),
+            Screen::SelectSeedForBackup => Some(String::from("SelectSeedForBackup")),
+            Screen::SignSufficientCrypto(_) => Some(String::from("SignSufficientCrypto")),
+            Screen::Documents => Some(String::from("Documents")),
+            Screen::Nowhere => None,
+        }
+    }
+
+    pub fn get_default_label(&self) -> String {
+        match self {
+            Screen::Log => "",
+            Screen::LogDetails(_) => "Event details",
+            Screen::Scan => "",
+            Screen::Transaction(_) => "",
+            Screen::SeedSelector => "Select seed",
+            Screen::Keys(_) => "",
+            Screen::KeyDetails(_) => "Key",
+            Screen::KeyDetailsMulti(_) => "Key",
+            Screen::NewSeed => "New Seed",
+            Screen::RecoverSeedName(_) => "Recover Seed",
+            Screen::RecoverSeedPhrase(_) => "Recover Seed",
+            Screen::DeriveKey(_) => "Derive Key",
+            Screen::Settings => "",
+            Screen::Verifier => "VERIFIER CERTIFICATE",
+            Screen::ManageNetworks => "MANAGE NETWORKS",
+            Screen::NetworkDetails(_) => "Network details",
+            Screen::SelectSeedForBackup => "Select seed",
+            Screen::SignSufficientCrypto(_) => "Sign SufficientCrypto",
+            Screen::Documents => "ABOUT",
+            Screen::Nowhere => "",
+        }
+        .to_string()
+    }
+
+    pub fn has_back(&self) -> bool {
+        match self {
+            Screen::Log
+            | Screen::Scan
+            | Screen::Settings
+            | Screen::SeedSelector
+            | Screen::Nowhere => false,
+            Screen::Transaction(_)
+            | Screen::LogDetails(_)
+            | Screen::Keys(_)
+            | Screen::KeyDetails(_)
+            | Screen::KeyDetailsMulti(_)
+            | Screen::NewSeed
+            | Screen::RecoverSeedName(_)
+            | Screen::RecoverSeedPhrase(_)
+            | Screen::DeriveKey(_)
+            | Screen::Verifier
+            | Screen::ManageNetworks
+            | Screen::NetworkDetails(_)
+            | Screen::SelectSeedForBackup
+            | Screen::SignSufficientCrypto(_)
+            | Screen::Documents => true,
+        }
+    }
+}
+
+#[cfg(test)]
+mod tests {
+
+    use sp_core::sr25519::Public;
+
+    use super::*;
+
+    use definitions::{crypto::Encryption, users::AddressDetails};
+
+    const PUBLIC: [u8; 32] = [
+        142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147,
+        201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72,
+    ];
+    fn test_address_details() -> AddressDetails {
+        AddressDetails {
+            seed_name: String::from("Alice"),
+            path: String::from("//alice"),
+            has_pwd: false,
+            network_id: Some(NetworkSpecsKey::from_hex("").unwrap()),
+            encryption: Encryption::Sr25519,
+            secret_exposed: false,
+        }
+    }
+
+    /// `EnteredInfo` holds String with sensitive information arriving either from Vault phone memory or from the user.
+    /// `EnteredInto` is used in several structs, and should always be zeroized properly.
+    #[test]
+    fn zeroize_entered_info_in_sufficient_crypto_state() {
+        let secret_ptr: *const u8;
+        // using secret entered info in this scope, zeroize afterwards
+        {
+            let mock_seed = "super secret seed element";
+            let sufficient_crypto_test =
+                SufficientCryptoState::init(transaction_signing::SufficientContent::LoadTypes);
+            let sufficient_crypto_test_updated = sufficient_crypto_test.update(
+                &MultiSigner::Sr25519(Public::from_raw(PUBLIC)),
+                &test_address_details(),
+                mock_seed,
+            );
+            secret_ptr = unsafe {
+                sufficient_crypto_test_updated
+                    .entered_info
+                    .0
+                    .as_ptr()
+                    .offset(-100)
+            };
+        }
+        println!("zeroize should have happened");
+        let memory: &[u8] = unsafe { std::slice::from_raw_parts(secret_ptr, 300) };
+        let memory_string = String::from_utf8_lossy(memory);
+        assert!(
+            !memory_string.contains("super secret seed element"),
+            "\n{memory_string:?}"
+        );
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/navigator/states.rs.html b/rustdocs/src/navigator/states.rs.html new file mode 100644 index 0000000000..16e307ff46 --- /dev/null +++ b/rustdocs/src/navigator/states.rs.html @@ -0,0 +1,429 @@ +states.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+
use std::collections::HashMap;
+
+use definitions::{navigation::MAddressCard, network_specs::OrderedNetworkSpecs};
+use sp_runtime::MultiSignature;
+use transaction_parsing::{produce_output, TransactionAction};
+use transaction_signing::{Error as SignError, SignatureType};
+
+use crate::{Error, Result};
+
+const MAX_COUNT_SET: u8 = 3;
+
+/// The result of a step within the signing protocol
+/// between the user and the Vault.
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum SignResult {
+    /// A password for one of the passworded keys is requested.
+    RequestPassword { idx: usize, counter: u8 },
+
+    /// All signatures are ready.
+    Ready {
+        signatures: Vec<(MultiSignature, SignatureType)>,
+    },
+}
+
+/// State of transaction screen.
+///
+/// In general case Vault may sign a bulk of transactions
+/// (more than one) and any subset of the transactions within
+/// a bulk may be signed by the passworded keys. This structure
+/// implements an interactive protocol between Vault and the user
+/// where user repeatedly enters all necessary passwords until all
+/// transactions are successfully signed or a password entry limit
+/// occurs.
+///
+/// If the same passworded key is used to sign more than one
+/// transaction in the bulk the password for this key is only
+/// requested once.
+///
+/// In case when no transactions in the bulk are signed by passworded
+/// key the result becomes available to the user right away minimizing
+/// the amount of user actions necessary.
+#[derive(Clone, Debug)]
+pub struct TransactionState {
+    /// The vector of seeds per-transcation being signed.
+    /// Since it is possible that signer is signing more than
+    /// one transaction (a bulk) this is a `Vec`.
+    seeds: Vec<String>,
+
+    /// Passwords for the accounts. Key is the ss58 addr.
+    passwords: HashMap<String, String>,
+
+    /// The `TransactionAction` being processed.
+    action: TransactionAction,
+
+    /// User-provided comments for each transaction.
+    comments: Vec<String>,
+
+    /// Failed password entries counter for the tx
+    /// currently being signed if any.
+    counter: u8,
+
+    /// The index of the transaction being currently signed.
+    currently_signing: usize,
+
+    /// Accumulates already-produced signatures.
+    signatures: Vec<(MultiSignature, SignatureType)>,
+}
+
+impl TransactionState {
+    pub fn current_password_author_info(&self) -> Option<(MAddressCard, OrderedNetworkSpecs)> {
+        match &self.action {
+            TransactionAction::Sign { actions, .. } => Some((
+                actions[self.currently_signing].author_info.clone(),
+                actions[self.currently_signing].network_info.clone(),
+            )),
+            _ => None,
+        }
+    }
+
+    pub fn new(database: &sled::Db, details_str: &str) -> Result<Self> {
+        Ok(Self {
+            seeds: vec![],
+            action: produce_output(database, details_str)?,
+            counter: 1,
+            passwords: HashMap::new(),
+            comments: vec![],
+            currently_signing: 0,
+            signatures: vec![],
+        })
+    }
+
+    pub fn update_seeds(&mut self, seeds: &str) {
+        if self.seeds.is_empty() {
+            self.seeds = seeds.lines().map(|seed| seed.to_string()).collect();
+        }
+    }
+
+    pub fn update_comments(&mut self, comments: &str) {
+        if self.comments.is_empty() {
+            self.comments = comments
+                .lines()
+                .map(|comment| comment.to_string())
+                .collect();
+        }
+    }
+
+    pub fn update_checksum_sign(&mut self, new_checksum: u32) {
+        if let TransactionAction::Sign { checksum, .. } = &mut self.action {
+            *checksum = new_checksum;
+        }
+    }
+
+    pub fn action(&self) -> &TransactionAction {
+        &self.action
+    }
+
+    /// Try to further progress the signing of transactions.
+    pub fn handle_sign(&mut self, database: &sled::Db) -> Result<SignResult> {
+        if let TransactionAction::Sign { actions, checksum } = &mut self.action {
+            if self.seeds.len() != actions.len() {
+                return Err(Error::SeedsNumMismatch(self.seeds.len(), actions.len()));
+            }
+
+            loop {
+                // Get the tx currently being signed.
+                let action = &actions[self.currently_signing];
+
+                // Get the password; if there is none, request one.
+                let password = if action.has_pwd {
+                    match self.passwords.get(&action.author_info.base58) {
+                        Some(pwd) => pwd,
+                        None => {
+                            return Ok(SignResult::RequestPassword {
+                                idx: self.currently_signing,
+                                counter: self.counter,
+                            });
+                        }
+                    }
+                } else {
+                    ""
+                };
+
+                // Try to sign it.
+                match transaction_signing::create_signature(
+                    database,
+                    &self.seeds[self.currently_signing],
+                    password,
+                    self.comments
+                        .get(self.currently_signing)
+                        .map(|s| s.as_str())
+                        .unwrap_or_else(|| ""),
+                    *checksum,
+                    self.currently_signing,
+                    action.network_info.specs.encryption,
+                ) {
+                    Ok(signature_and_checksum) => {
+                        // If signed successfully progress to the
+                        // next transaction in the bulk.
+                        self.currently_signing += 1;
+                        self.counter = 1;
+                        *checksum = signature_and_checksum.new_checksum();
+                        self.signatures.push((
+                            signature_and_checksum.signature().clone(),
+                            signature_and_checksum.signature_type(),
+                        ));
+
+                        // If this is the last tx, return
+                        //
+                        if self.currently_signing == self.seeds.len() {
+                            return Ok(SignResult::Ready {
+                                signatures: self.signatures.clone(),
+                            });
+                        }
+                    }
+                    Err(e) => {
+                        match e {
+                            SignError::WrongPasswordNewChecksum(new_checksum) => {
+                                // Password was not correct, re-request it.
+                                self.update_checksum_sign(new_checksum);
+                                self.counter += 1;
+
+                                return Ok(SignResult::RequestPassword {
+                                    idx: self.currently_signing,
+                                    counter: self.counter,
+                                });
+                            }
+                            _ => {
+                                // Other signing error happened.
+                                return Err(Error::TransactionSigning(e));
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            Err(Error::TxActionNotSign)
+        }
+    }
+
+    pub fn password_entered(&mut self, pwd: &str) {
+        if let TransactionAction::Sign { actions, .. } = &self.action {
+            let base58 = actions[self.currently_signing].author_info.base58.clone();
+            self.passwords.insert(base58, pwd.to_string());
+        }
+    }
+
+    pub fn ok(&self) -> bool {
+        self.counter < MAX_COUNT_SET
+    }
+
+    pub fn counter(&self) -> u8 {
+        self.counter
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/cards.rs.html b/rustdocs/src/parser/cards.rs.html new file mode 100644 index 0000000000..5d6b3ddfee --- /dev/null +++ b/rustdocs/src/parser/cards.rs.html @@ -0,0 +1,269 @@ +cards.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+
use sp_core::{
+    crypto::{AccountId32, Ss58AddressFormat, Ss58Codec},
+    H256,
+};
+use sp_runtime::generic::Era;
+
+#[derive(Clone)]
+pub enum ParserCard {
+    Pallet(String), // pallet name
+    Method {
+        method_name: String,
+        docs: String,
+    },
+    Varname(String),
+    Default(String),
+    Text(String),
+    Id {
+        id: AccountId32,
+        base58prefix: u16,
+    },
+    Id20 {
+        id: [u8; 20],
+        base58prefix: u16,
+    },
+    None,
+    IdentityField(String),
+    BitVec(String), // String from printing `BitVec`
+    Balance {
+        number: String,
+        units: String,
+    },
+    FieldName {
+        name: String,
+        docs_field_name: String,
+        path_type: String,
+        docs_type: String,
+    },
+    FieldNumber {
+        number: usize,
+        docs_field_number: String,
+        path_type: String,
+        docs_type: String,
+    },
+    EnumVariantName {
+        name: String,
+        docs_enum_variant: String,
+    },
+    Era(Era),
+    Nonce(String),
+    BlockHash(H256),
+    Tip {
+        number: String,
+        units: String,
+    },
+    NetworkNameVersion {
+        name: String,
+        version: String,
+    },
+    TxVersion(String),
+}
+
+impl ParserCard {
+    pub fn show_no_docs(&self, indent: u32) -> String {
+        match &self {
+            ParserCard::Pallet(pallet_name) => readable(indent, "pallet", pallet_name),
+            ParserCard::Method {
+                method_name,
+                docs: _,
+            } => readable(indent, "method", method_name),
+            ParserCard::Varname(varname) => readable(indent, "varname", varname),
+            ParserCard::Default(decoded_string) => readable(indent, "default", decoded_string),
+            ParserCard::Text(decoded_text) => readable(indent, "text", decoded_text),
+            ParserCard::Id { id, base58prefix } => readable(
+                indent,
+                "Id",
+                &id.to_ss58check_with_version(Ss58AddressFormat::custom(*base58prefix)),
+            ),
+            ParserCard::Id20 {
+                id,
+                base58prefix: _,
+            } => readable(indent, "Id", &format!("0x{}", hex::encode(id))),
+            ParserCard::None => readable(indent, "none", ""),
+            ParserCard::IdentityField(variant) => readable(indent, "identity_field", variant),
+            ParserCard::BitVec(bv) => readable(indent, "bitvec", bv),
+            ParserCard::Balance { number, units } => {
+                readable(indent, "balance", &format!("{number} {units}"))
+            }
+            ParserCard::FieldName {
+                name,
+                docs_field_name: _,
+                path_type: _,
+                docs_type: _,
+            } => readable(indent, "field_name", name),
+            ParserCard::FieldNumber {
+                number,
+                docs_field_number: _,
+                path_type: _,
+                docs_type: _,
+            } => readable(indent, "field_number", &number.to_string()),
+            ParserCard::EnumVariantName {
+                name,
+                docs_enum_variant: _,
+            } => readable(indent, "enum_variant_name", name),
+            ParserCard::Era(era) => match era {
+                Era::Immortal => readable(indent, "era", "Immortal"),
+                Era::Mortal(period, phase) => readable(
+                    indent,
+                    "era",
+                    &format!("Mortal, phase: {phase}, period: {period}"),
+                ),
+            },
+            ParserCard::Nonce(nonce) => readable(indent, "nonce", nonce),
+            ParserCard::BlockHash(block_hash) => {
+                readable(indent, "block_hash", &hex::encode(block_hash))
+            }
+            ParserCard::Tip { number, units } => {
+                readable(indent, "tip", &format!("{number} {units}"))
+            }
+            ParserCard::NetworkNameVersion { name, version } => {
+                readable(indent, "network", &format!("{name}{version}"))
+            }
+            ParserCard::TxVersion(x) => readable(indent, "tx_version", x),
+        }
+    }
+}
+
+fn readable(indent: u32, card_type: &str, card_payload: &str) -> String {
+    format!(
+        "{}{}: {}",
+        "  ".repeat(indent as usize),
+        card_type,
+        card_payload
+    )
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/decoding_commons.rs.html b/rustdocs/src/parser/decoding_commons.rs.html new file mode 100644 index 0000000000..bc1c2b9371 --- /dev/null +++ b/rustdocs/src/parser/decoding_commons.rs.html @@ -0,0 +1,759 @@ +decoding_commons.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+
use parity_scale_codec::{Compact, Decode, HasCompact};
+use sp_arithmetic::PerThing;
+use sp_core::crypto::AccountId32;
+use std::{convert::TryInto, mem::size_of};
+
+use definitions::network_specs::ShortSpecs;
+use printing_balance::convert_balance_pretty;
+
+use crate::cards::ParserCard;
+use crate::decoding_sci_ext::{Ext, SpecialExt};
+use crate::error::{ParserDecodingError, ParserMetadataError};
+use crate::Result;
+
+/// Struct to store the decoded data, used for data storage between decoding iterations.
+/// `decoded_string` is short json-like format,
+/// `fancy_out` is format used for js output cards (the one really going out at this point)
+/// and remaining vector contains the input data not yet used after the last decoding iteration.
+pub(crate) struct DecodedOut {
+    pub(crate) remaining_vector: Vec<u8>,
+    pub(crate) fancy_out: Vec<OutputCard>,
+}
+
+#[derive(Clone)]
+pub struct OutputCard {
+    pub card: ParserCard,
+    pub indent: u32,
+}
+
+/// Struct to store results of searching `Vec<u8>` for encoded compact:
+/// consists of actual number decoded, and, if it exists, the beginning position for data after the compact
+pub struct CutCompact<T: HasCompact> {
+    pub compact_found: T,
+    pub start_next_unit: Option<usize>,
+}
+
+/// Function to search `&[u8]` for shortest compact <T> by brute force.
+/// Outputs `CutCompact` value in case of success.
+pub fn get_compact<T>(data: &[u8]) -> Result<CutCompact<T>>
+where
+    T: HasCompact,
+    Compact<T>: Decode,
+{
+    if data.is_empty() {
+        return Err(ParserDecodingError::DataTooShort.into());
+    }
+    let mut out = None;
+    for i in 1..data.len() + 1 {
+        let mut hippo = &data[..i];
+        let unhippo = <Compact<T>>::decode(&mut hippo);
+        if let Ok(hurray) = unhippo {
+            let mut start_next_unit = None;
+            if data.len() > i {
+                start_next_unit = Some(i);
+            }
+            out = Some(CutCompact {
+                compact_found: hurray.0,
+                start_next_unit,
+            });
+            break;
+        }
+    }
+    match out {
+        Some(c) => Ok(c),
+        None => Err(ParserDecodingError::NoCompact.into()),
+    }
+}
+
+/// Function to decode types with trait `PerThing` (`Percent`, `Permill`, `Perbill` etc).
+/// Decoding type T either as compact or as fixed length type.
+/// Used only in `decoding_older` module, without `serde`.
+///
+/// The function decodes only this element, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `compact` flag to initiate compact decoding,
+/// - `&str` name of type to be displayed in case of error,
+/// - `indent` used for creating properly formatted js cards,
+///
+/// The function outputs the `DecodedOut` value in case of success.
+pub(crate) fn decode_perthing<T>(
+    data: &[u8],
+    compact_flag: bool,
+    found_ty: &str,
+    indent: u32,
+) -> Result<DecodedOut>
+where
+    T: PerThing + Decode + HasCompact,
+    Compact<T>: Decode,
+{
+    let (fancy_out, remaining_vector) = {
+        if compact_flag {
+            let compact_found = get_compact::<T>(data)?;
+            let fancy_out = vec![OutputCard {
+                card: ParserCard::Default(
+                    compact_found.compact_found.deconstruct().into().to_string(),
+                ),
+                indent,
+            }];
+            let remaining_vector = match compact_found.start_next_unit {
+                Some(x) => (data[x..]).to_vec(),
+                None => Vec::new(),
+            };
+            (fancy_out, remaining_vector)
+        } else {
+            let length = size_of::<T>();
+            if data.len() < length {
+                return Err(ParserDecodingError::DataTooShort.into());
+            }
+            let decoded_data = <T>::decode(&mut &data[..length])
+                .map_err(|_| ParserDecodingError::PrimitiveFailure(found_ty.to_string()))?;
+            let fancy_out = vec![OutputCard {
+                card: ParserCard::Default(decoded_data.deconstruct().into().to_string()),
+                indent,
+            }];
+            let remaining_vector = data[length..].to_vec();
+            (fancy_out, remaining_vector)
+        }
+    };
+    Ok(DecodedOut {
+        remaining_vector,
+        fancy_out,
+    })
+}
+
+/// Function to decode a displayable type of known length (i.e. length stable with respect to `mem::size_of`).
+/// Used in both `decoding_older` and `decoding_sci`, for types not compatible with compact or balance printing
+///
+/// The function decodes only this type, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - found_ty: name of the type found,
+/// - indent used for creating properly formatted js cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+pub(crate) fn decode_known_length<T: Decode + std::fmt::Display>(
+    data: &[u8],
+    found_ty: &str,
+    indent: u32,
+) -> Result<DecodedOut> {
+    let length = size_of::<T>();
+    if data.len() < length {
+        return Err(ParserDecodingError::DataTooShort.into());
+    }
+    let decoded_data = <T>::decode(&mut &data[..length])
+        .map_err(|_| ParserDecodingError::PrimitiveFailure(found_ty.to_string()))?;
+    let fancy_out = vec![OutputCard {
+        card: ParserCard::Default(decoded_data.to_string()),
+        indent,
+    }];
+    let remaining_vector = data[length..].to_vec();
+    Ok(DecodedOut {
+        remaining_vector,
+        fancy_out,
+    })
+}
+
+/// Function to decode a displayable type compatible with compact and balance printing.
+/// Used in both `decoding_older` and `decoding_sci`.
+/// Decoding type T either as compact or as fixed length type, possibly as a balance.
+///
+/// The function decodes only this element, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - compact flag and balance flag to choose decoding variant,
+/// - `&str` name of type to be displayed in case of error,
+/// - indent used for creating properly formatted js cards,
+/// - `ShortSpecs` to format the balance properly if the balance is involved.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+pub(crate) fn decode_primitive_with_flags<T>(
+    data: &[u8],
+    possible_ext: &mut Option<&mut Ext>,
+    compact_flag: bool,
+    balance_flag: bool,
+    found_ty: &str,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut>
+where
+    T: Decode + HasCompact + std::fmt::Display,
+    Compact<T>: Decode,
+{
+    let balance_flag = {
+        if let Some(ext) = possible_ext {
+            if let SpecialExt::Tip = ext.specialty {
+                true
+            } else {
+                balance_flag
+            }
+        } else {
+            balance_flag
+        }
+    };
+    if compact_flag {
+        let compact_found = get_compact::<T>(data)?;
+        let fancy_out = {
+            if balance_flag {
+                process_balance(
+                    &compact_found.compact_found.to_string(),
+                    possible_ext,
+                    indent,
+                    short_specs,
+                )?
+            } else {
+                process_number(
+                    compact_found.compact_found.to_string(),
+                    possible_ext,
+                    indent,
+                    short_specs,
+                )?
+            }
+        };
+        let remaining_vector = match compact_found.start_next_unit {
+            Some(x) => (data[x..]).to_vec(),
+            None => Vec::new(),
+        };
+        Ok(DecodedOut {
+            remaining_vector,
+            fancy_out,
+        })
+    } else {
+        let length = size_of::<T>();
+        if data.len() < length {
+            return Err(ParserDecodingError::DataTooShort.into());
+        }
+        let decoded_data = <T>::decode(&mut &data[..length])
+            .map_err(|_| ParserDecodingError::PrimitiveFailure(found_ty.to_string()))?;
+        let fancy_out = {
+            if balance_flag {
+                process_balance(&decoded_data.to_string(), possible_ext, indent, short_specs)?
+            } else {
+                process_number(decoded_data.to_string(), possible_ext, indent, short_specs)?
+            }
+        };
+        let remaining_vector = data[length..].to_vec();
+        Ok(DecodedOut {
+            remaining_vector,
+            fancy_out,
+        })
+    }
+}
+
+fn process_balance(
+    balance: &str,
+    possible_ext: &mut Option<&mut Ext>,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<Vec<OutputCard>> {
+    let balance_output = convert_balance_pretty(balance, short_specs.decimals, &short_specs.unit);
+    let out_balance = vec![OutputCard {
+        card: ParserCard::Balance {
+            number: balance_output.number.to_string(),
+            units: balance_output.units.to_string(),
+        },
+        indent,
+    }];
+    let out_tip = vec![OutputCard {
+        card: ParserCard::Tip {
+            number: balance_output.number.to_string(),
+            units: balance_output.units,
+        },
+        indent,
+    }];
+    if let Some(ext) = possible_ext {
+        if let SpecialExt::Tip = ext.specialty {
+            Ok(out_tip)
+        } else {
+            Ok(out_balance)
+        }
+    } else {
+        Ok(out_balance)
+    }
+}
+
+fn process_number(
+    number: String,
+    possible_ext: &mut Option<&mut Ext>,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<Vec<OutputCard>> {
+    if let Some(ext) = possible_ext {
+        match ext.specialty {
+            SpecialExt::Nonce => Ok(vec![OutputCard {
+                card: ParserCard::Nonce(number),
+                indent,
+            }]),
+            SpecialExt::SpecVersion => {
+                ext.found_ext.network_version_printed = match ext.found_ext.network_version_printed
+                {
+                    Some(_) => return Err(ParserMetadataError::SpecVersionTwice.into()),
+                    None => Some(number.to_string()),
+                };
+                Ok(vec![OutputCard {
+                    card: ParserCard::NetworkNameVersion {
+                        name: short_specs.name.to_string(),
+                        version: number,
+                    },
+                    indent,
+                }])
+            }
+            SpecialExt::TxVersion => Ok(vec![OutputCard {
+                card: ParserCard::TxVersion(number),
+                indent,
+            }]),
+            _ => Ok(vec![OutputCard {
+                card: ParserCard::Default(number),
+                indent,
+            }]),
+        }
+    } else {
+        Ok(vec![OutputCard {
+            card: ParserCard::Default(number),
+            indent,
+        }])
+    }
+}
+
+/// Function to decode of `AccountId` special case and transform the result into base58 format.
+///
+/// The function decodes only a single `AccountId` type entry,
+/// removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `indent` used for creating properly formatted js cards.
+/// - `short_specs` (taking base58 prefix from there).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+///
+/// Resulting `AccountId` in base58 form is added to `fancy_out` on js card "Id".
+pub(crate) fn special_case_account_id(
+    data: Vec<u8>,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let a = data.get(0..32).ok_or(ParserDecodingError::DataTooShort)?;
+    let array_decoded: [u8; 32] = a.try_into().expect("constant length, always fits");
+    let remaining_vector = data[32..].to_vec();
+    let account_id = AccountId32::new(array_decoded);
+    let fancy_out = vec![OutputCard {
+        card: ParserCard::Id {
+            id: account_id,
+            base58prefix: short_specs.base58prefix,
+        },
+        indent,
+    }];
+    Ok(DecodedOut {
+        remaining_vector,
+        fancy_out,
+    })
+}
+
+pub(crate) fn special_case_account_id_20(
+    data: Vec<u8>,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let a = data.get(0..20).ok_or(ParserDecodingError::DataTooShort)?;
+    let array_decoded: [u8; 20] = a.try_into().expect("constant length, always fits");
+    let remaining_vector = data[20..].to_vec();
+    let fancy_out = vec![OutputCard {
+        card: ParserCard::Id20 {
+            id: array_decoded,
+            base58prefix: short_specs.base58prefix,
+        },
+        indent,
+    }];
+    Ok(DecodedOut {
+        remaining_vector,
+        fancy_out,
+    })
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/decoding_older.rs.html b/rustdocs/src/parser/decoding_older.rs.html new file mode 100644 index 0000000000..079345c517 --- /dev/null +++ b/rustdocs/src/parser/decoding_older.rs.html @@ -0,0 +1,2121 @@ +decoding_older.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+
use bitvec::prelude::{BitVec, Lsb0};
+use lazy_static::lazy_static;
+use regex::Regex;
+use sp_arithmetic::{PerU16, Perbill, Percent};
+
+use definitions::{
+    network_specs::ShortSpecs,
+    types::{Description, EnumVariant, EnumVariantType, StructField, TypeEntry},
+};
+
+use crate::cards::ParserCard;
+use crate::decoding_commons::{
+    decode_known_length, decode_perthing, decode_primitive_with_flags, get_compact,
+    special_case_account_id, DecodedOut, OutputCard,
+};
+use crate::error::{Error, ParserDecodingError, Result};
+use crate::method::{what_next_old, OlderMeta};
+
+/// Function to decode primitive types (fixed-width or compact form), and `Percent`,
+/// `Permill`, and `PerU16` structs (also fixed-width or compact form).
+/// All those types have stable length by `std::mem::size_of()` and also are serializeable.
+///
+/// The function decodes only found_ty, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `found_ty` (type of the argument found in the previous iteration, to be interpreted on run)
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `indent` used for creating properly formatted js cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn decode_primitive(
+    found_ty: &str,
+    data: &[u8],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Option<DecodedOut> {
+    match found_ty {
+        "bool" => decode_known_length::<bool>(data, found_ty, indent).map_or_else(|_| None, Some),
+        "u8" => decode_primitive_with_flags::<u8>(
+            data,
+            &mut None,
+            false,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "u16" => decode_primitive_with_flags::<u16>(
+            data,
+            &mut None,
+            false,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "u32" => decode_primitive_with_flags::<u32>(
+            data,
+            &mut None,
+            false,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "u64" => decode_primitive_with_flags::<u64>(
+            data,
+            &mut None,
+            false,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "u128" => decode_primitive_with_flags::<u128>(
+            data,
+            &mut None,
+            false,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "Percent" => {
+            decode_perthing::<Percent>(data, false, found_ty, indent).map_or_else(|_| None, Some)
+        }
+        "Perbill" => {
+            decode_perthing::<Perbill>(data, false, found_ty, indent).map_or_else(|_| None, Some)
+        }
+        "PerU16" => {
+            decode_perthing::<PerU16>(data, false, found_ty, indent).map_or_else(|_| None, Some)
+        }
+        "Compact<u8>" => decode_primitive_with_flags::<u8>(
+            data,
+            &mut None,
+            true,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "Compact<u16>" => decode_primitive_with_flags::<u16>(
+            data,
+            &mut None,
+            true,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "Compact<u32>" => decode_primitive_with_flags::<u32>(
+            data,
+            &mut None,
+            true,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "Compact<u64>" => decode_primitive_with_flags::<u64>(
+            data,
+            &mut None,
+            true,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "Compact<u128>" => decode_primitive_with_flags::<u128>(
+            data,
+            &mut None,
+            true,
+            false,
+            found_ty,
+            indent,
+            short_specs,
+        )
+        .map_or_else(|_| None, Some),
+        "Compact<Percent>" => {
+            decode_perthing::<Percent>(data, true, found_ty, indent).map_or_else(|_| None, Some)
+        }
+        "Compact<Perbill>" => {
+            decode_perthing::<Perbill>(data, true, found_ty, indent).map_or_else(|_| None, Some)
+        }
+        "Compact<PerU16>" => {
+            decode_perthing::<PerU16>(data, true, found_ty, indent).map_or_else(|_| None, Some)
+        }
+        _ => None,
+    }
+}
+
+/// Function to decode any type, including calls and vectors of calls.
+/// Here starts the decoding of argument with type found_ty.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+/// The function decodes only found_ty, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `found_ty` (type of the argument found in the previous iteration, to be interpreted on run)
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `meta` (metadata for the network used),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - `indent` used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+///
+/// Calls and vectors of calls are treated separately here.
+/// All simpler types are processed through `decode_simple` function.
+fn decode_complex(
+    found_ty: &str,
+    mut data: Vec<u8>,
+    meta: &OlderMeta,
+    type_database: &[TypeEntry],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    match found_ty {
+        "Box<<T as Config<I>>::Proposal>"
+        | "Box<<T as Config>::Call>"
+        | "Box<<T as Config>::Proposal>" => {
+            process_as_call(data, meta, type_database, indent, short_specs)
+        }
+        "Vec<<T as Config>::Call>" => {
+            let pre_vector = get_compact::<u32>(&data)?;
+            let number_of_calls = pre_vector.compact_found;
+            let mut fancy_output_prep: Vec<OutputCard> = Vec::new();
+            match pre_vector.start_next_unit {
+                Some(start) => {
+                    if data.len() < start + 2 * (number_of_calls as usize) {
+                        return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+                    }
+                    data = data[start..].to_vec();
+                    for _i in 0..number_of_calls {
+                        let after_run =
+                            process_as_call(data, meta, type_database, indent, short_specs)?;
+                        fancy_output_prep.extend_from_slice(&after_run.fancy_out);
+                        data = after_run.remaining_vector;
+                    }
+                }
+                None => {
+                    if number_of_calls != 0 {
+                        return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+                    }
+                }
+            }
+            Ok(DecodedOut {
+                remaining_vector: data,
+                fancy_out: fancy_output_prep,
+            })
+        }
+        _ => decode_simple(found_ty, data, type_database, indent, short_specs),
+    }
+}
+
+/// Function to process a single call (essentially, `Vec<u8>`).
+/// This is the place to start when decoding the transaction.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+/// The function decodes only a single call, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `data` (call itself),
+/// - `meta` (metadata for the network used),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - `indent` used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+///
+/// In each encoded call the first two elements denote the numbers of the pallet and the method
+/// in corresponding network metadata, indicating what arguments the call has.
+/// The card "call" containing pallet name and method name is added to `fancy_out`.
+/// Each argument is then processed in a sequence, the name of the argument
+/// and the type of the argument are found in the network metadata during the run.
+/// For each argument the card "varname" with argument name is added to `fancy_out`,
+/// followed by card(s) of actual decoded argument values.
+pub(crate) fn process_as_call(
+    mut data: Vec<u8>,
+    meta: &OlderMeta,
+    type_database: &[TypeEntry],
+    mut indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let call_in_processing = what_next_old(data, meta)?;
+    data = call_in_processing.data;
+
+    let mut fancy_out = vec![
+        OutputCard {
+            card: ParserCard::Pallet(call_in_processing.method.pallet_name),
+            indent,
+        },
+        OutputCard {
+            card: ParserCard::Method {
+                method_name: call_in_processing.method.method_name,
+                docs: call_in_processing.method.docs,
+            },
+            indent: indent + 1,
+        },
+    ];
+    indent += 2;
+
+    for x in call_in_processing.method.arguments.iter() {
+        fancy_out.push(OutputCard {
+            card: ParserCard::Varname(x.name.to_string()),
+            indent,
+        });
+
+        let decoded_out =
+            decode_complex(&x.ty, data, meta, type_database, indent + 1, short_specs)?;
+        data = decoded_out.remaining_vector;
+        fancy_out.extend_from_slice(&decoded_out.fancy_out);
+    }
+
+    Ok(DecodedOut {
+        remaining_vector: data.to_vec(),
+        fancy_out,
+    })
+}
+
+// Making regular expressions for analysing any type encountered except calls and Vec<calls>.
+// The type to be parsed is found in network metadata on the run.
+// In some cases the type could be `Option<arg>`, `Vec<arg>`, tuple such as (arg1, arg2, arg3)
+// (currently among types are found tuples of up to 4 elements, could change at any point),
+// array such as [arg; num], and compact such as Compact<arg>.
+// To reduce the number of types in `type_database` and to simplify and
+// at least a bit generalize the decoding process,
+// the options, vectors, tuples, arrays, and compacts are currently treated specially
+// and first are "husked" to interpret the inner type.
+// This regular expressions are used for just that: find the inner type.
+// All those are constructed statically, and pre-tested.
+lazy_static! {
+    static ref REGOPTION: Regex = Regex::new(r#"(?m)^Option<(?P<arg>.*)>"#).expect("constructed from checked static value");
+    static ref REGVECTOR: Regex = Regex::new(r#"(?m)^Vec<(?P<arg>.*)>"#).expect("constructed from checked static value");
+    static ref REGTUPLE: Regex = Regex::new(r"(?m)^\((?P<arg1>([^( ]*(\([^)]*\)[^) ]*))|[^(),]*), (?P<arg2>([^( ]*\([^)]*\)[^) ]*)|[^(),]*)(, (?P<arg3>([^( ]*\([^)]*\)[^) ]*)|[^(),]*))?(, (?P<arg4>([^( ]*\([^)]*\)[^) ]*)|[^(),]*))?\)").expect("constructed from checked static value");
+    static ref REGARRAY: Regex = Regex::new(r"(?i)(?m)^\[(?P<arg>[a-z0-9]+); (?P<num>[0-9]+)\]").expect("constructed from checked static value");
+    static ref REGCOMPACT: Regex = Regex::new(r#"(?m)^Compact<(?P<arg>.*)>"#).expect("constructed from checked static value");
+}
+
+/// Function to decode `Option<inner_ty>`.
+/// Special case of Option<bool> is considered separately.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+/// The function decodes only a single option, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `inner_ty` (type inside Option, found using regular expressions)
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - `indent` used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+///
+/// Js cards are of type "none" if the Option<_> is None.
+/// At this moment no special js card for Some(x) is presented, only the card of x itself.
+fn deal_with_option(
+    inner_ty: &str,
+    mut data: Vec<u8>,
+    type_database: &[TypeEntry],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    if inner_ty == "bool" {
+        let fancy_out = match &data[0] {
+            0 => vec![OutputCard {
+                card: ParserCard::None,
+                indent,
+            }],
+            1 => vec![OutputCard {
+                card: ParserCard::Default(String::from("True")),
+                indent,
+            }],
+            2 => vec![OutputCard {
+                card: ParserCard::Default(String::from("False")),
+                indent,
+            }],
+            _ => {
+                return Err(Error::Decoding(
+                    ParserDecodingError::UnexpectedOptionVariant,
+                ))
+            }
+        };
+        let remaining_vector = {
+            if data.len() > 1 {
+                data[1..].to_vec()
+            } else {
+                Vec::new()
+            }
+        };
+        Ok(DecodedOut {
+            remaining_vector,
+            fancy_out,
+        })
+    } else {
+        match &data[0] {
+            0 => {
+                let remaining_vector = {
+                    if data.len() > 1 {
+                        data[1..].to_vec()
+                    } else {
+                        Vec::new()
+                    }
+                };
+                let fancy_out = vec![OutputCard {
+                    card: ParserCard::None,
+                    indent,
+                }];
+                Ok(DecodedOut {
+                    remaining_vector,
+                    fancy_out,
+                })
+            }
+            1 => {
+                if data.len() == 1 {
+                    return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+                }
+                data = data[1..].to_vec();
+                decode_simple(inner_ty, data, type_database, indent, short_specs)
+            }
+            _ => Err(Error::Decoding(
+                ParserDecodingError::UnexpectedOptionVariant,
+            )),
+        }
+    }
+}
+
+/// Function to decode `Vector<inner_ty>`.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+/// The function decodes only a single vector of type `inner_ty`, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// Encoded vectors are preluded by the number of vector elements as compact,
+/// followed by concatenated individually encoded elements.
+/// So, the function first searches for compact to determine the number of elements
+/// and then proceeds to decode each element of the vector.
+///
+/// The function takes as arguments
+/// - `inner_ty` (type inside `Vec`, found using regular expressions)
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - `indent` used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn deal_with_vector(
+    inner_ty: &str,
+    mut data: Vec<u8>,
+    type_database: &[TypeEntry],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let pre_vector = get_compact::<u32>(&data)?;
+    let mut fancy_output_prep: Vec<OutputCard> = Vec::new();
+    let elements_of_vector = pre_vector.compact_found;
+    match pre_vector.start_next_unit {
+        Some(start) => {
+            data = data[start..].to_vec();
+            for _i in 0..elements_of_vector {
+                let after_run = decode_simple(inner_ty, data, type_database, indent, short_specs)?;
+                fancy_output_prep.extend_from_slice(&after_run.fancy_out);
+                data = after_run.remaining_vector;
+            }
+            Ok(DecodedOut {
+                remaining_vector: data,
+                fancy_out: fancy_output_prep,
+            })
+        }
+        None => {
+            if elements_of_vector != 0 {
+                Err(Error::Decoding(ParserDecodingError::DataTooShort))
+            } else {
+                Ok(DecodedOut {
+                    remaining_vector: Vec::new(),
+                    fancy_out: vec![OutputCard {
+                        card: ParserCard::Default(String::new()),
+                        indent,
+                    }],
+                })
+            }
+        }
+    }
+}
+
+/// Function to decode an array such as `[inner_ty; number_of_elements]`.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+/// The function decodes only a single array of type `inner_ty` and length `number_of_elements`,
+/// removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `inner_ty` (type of array elements, found using regular expressions)
+/// - `number_of_elements` (number of array elements, found using regular expressions)
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - `indent` used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn deal_with_array(
+    inner_ty: &str,
+    number_of_elements: u32,
+    mut data: Vec<u8>,
+    type_database: &[TypeEntry],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let mut fancy_output_prep: Vec<OutputCard> = Vec::new();
+    for _i in 0..number_of_elements {
+        let after_run = decode_simple(inner_ty, data, type_database, indent, short_specs)?;
+        fancy_output_prep.extend_from_slice(&after_run.fancy_out);
+        data = after_run.remaining_vector;
+    }
+    Ok(DecodedOut {
+        remaining_vector: data,
+        fancy_out: fancy_output_prep,
+    })
+}
+
+/// Function to decode IdentityFields special case.
+/// `IdentityFields` is a struct from `pallet_identity::IdentityFields`,
+/// which is wrapper type for `BitFlags<IdentityField>`.
+/// To avoid output complications arising from private non-printable fields
+/// the type was re-implemented here using `BitVec` and enum `IdentityField` from `type_database`.
+///
+/// The function decodes only a single `IdentityFields` type entry,
+/// removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - indent used for creating properly formatted js cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+///
+/// For each identity field an individual js card `identity_field` is added to `fancy_out`.
+fn special_case_identity_fields(
+    data: Vec<u8>,
+    type_database: &[TypeEntry],
+    indent: u32,
+) -> Result<DecodedOut> {
+    // at the moment, the length is known: 8 units in `Vec<u8>`
+    if data.len() < 8 {
+        return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+    }
+    let remaining_vector = {
+        if data.len() > 8 {
+            data[8..].to_vec()
+        } else {
+            Vec::new()
+        }
+    };
+    let into_bv = data[..8].to_vec();
+    // make correct `BitVec`
+    let bv: BitVec<u8, Lsb0> = BitVec::from_vec(into_bv);
+    let mut found = false;
+    let mut fancy_out: Vec<OutputCard> = Vec::new();
+    for x in type_database.iter() {
+        if x.name == "IdentityField" {
+            if let Description::Enum(v1) = &x.description {
+                found = true;
+                for (i, x) in v1.iter().enumerate() {
+                    if bv[i] {
+                        fancy_out.push(OutputCard {
+                            card: ParserCard::IdentityField(x.variant_name.to_string()),
+                            indent,
+                        });
+                    };
+                }
+            }
+            break;
+        }
+    }
+    if !found {
+        return Err(Error::Decoding(ParserDecodingError::IdFields));
+    }
+    Ok(DecodedOut {
+        remaining_vector,
+        fancy_out,
+    })
+}
+
+/// Function to decode `BitVec` special case.
+///
+/// The function decodes only a single `BitVec` type entry,
+/// removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// Trait Decode is not implemented for `BitVec` type.
+/// Existing signer documentation in js suggests that the encoded `BitVec` is preluded by the number
+/// of `BitVec` elements as compact, and each 8 of those form an `u8` element in input data.
+/// So, the function first searches for compact to determine the number of `BitVec` elements
+/// then calculates how many actual `u8` elements are used to store those, takes needed length of data
+/// and gets `BitVec` from it.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - indent used for creating properly formatted js cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+///
+/// Resulting `BitVec` is added to `fancy_out` on js card `bitvec`.
+fn special_case_bitvec(data: Vec<u8>, indent: u32) -> Result<DecodedOut> {
+    // the data is preluded by compact indicating the number of `BitVec` elements - info from js documentation, decode not implemented for `BitVec` as is
+    let pre_bitvec = get_compact::<u32>(&data)?;
+    let actual_length = match pre_bitvec.compact_found % 8 {
+        0 => pre_bitvec.compact_found / 8,
+        _ => (pre_bitvec.compact_found / 8) + 1,
+    };
+    match pre_bitvec.start_next_unit {
+        Some(start) => {
+            let fin = start + (actual_length as usize);
+            if data.len() < fin {
+                return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+            }
+            let into_bv = data[start..fin].to_vec();
+            let bv: BitVec<u8, Lsb0> = BitVec::from_vec(into_bv);
+            let fancy_out = vec![OutputCard {
+                card: ParserCard::BitVec(bv.to_string()),
+                indent,
+            }];
+            let remaining_vector = {
+                if data.len() > fin {
+                    data[fin..].to_vec()
+                } else {
+                    Vec::new()
+                }
+            };
+            Ok(DecodedOut {
+                remaining_vector,
+                fancy_out,
+            })
+        }
+        None => {
+            if actual_length != 0 {
+                return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+            }
+            Ok(DecodedOut {
+                remaining_vector: Vec::new(),
+                fancy_out: vec![OutputCard {
+                    card: ParserCard::Default(String::new()),
+                    indent,
+                }],
+            })
+        }
+    }
+}
+
+/// Function to determine if special case balance is applicable
+fn goto_balance(found_ty: &str) -> bool {
+    (found_ty == "Balance")
+        || (found_ty == "T::Balance")
+        || (found_ty == "BalanceOf<T>")
+        || (found_ty == "BalanceOf<T, I>")
+        || (found_ty == "Compact<Balance>")
+        || (found_ty == "Compact<T::Balance>")
+        || (found_ty == "Compact<BalanceOf<T>>")
+        || (found_ty == "Compact<BalanceOf<T, I>>")
+}
+
+/// Function to decode and represent properly any special case related to balances
+/// (both compacts and non-compacts).
+///
+/// The function decodes only a single balance-related type entry,
+/// removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - indent used for creating properly formatted js cards.
+/// - `short_specs` (taking currency units and decimals from there).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+///
+/// Resulting balance is added to `fancy_out` on js card "balance".
+fn special_case_balance(
+    found_ty: &str,
+    data: Vec<u8>,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    match found_ty {
+        "Balance" | "T::Balance" | "BalanceOf<T>" | "BalanceOf<T, I>" => {
+            decode_primitive_with_flags::<u128>(
+                &data,
+                &mut None,
+                false,
+                true,
+                "u128",
+                indent,
+                short_specs,
+            )
+        }
+        "Compact<Balance>"
+        | "Compact<T::Balance>"
+        | "Compact<BalanceOf<T>>"
+        | "Compact<BalanceOf<T, I>>" => decode_primitive_with_flags::<u128>(
+            &data,
+            &mut None,
+            true,
+            true,
+            "u128",
+            indent,
+            short_specs,
+        ),
+        _ => Err(Error::Decoding(ParserDecodingError::BalanceNotDescribed)),
+    }
+}
+
+/// Function to decode structs described in `type_database`.
+///
+/// Function iterates over struct fields, for each field it creates js card `field_name`
+/// or `field_number` (if there are no field names),
+/// and card(s) for corresponding content in `fancy_out`.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+///
+/// The function takes as arguments
+/// - vector of `StructField` of currently processed type, as found in `type_database`
+/// - data (remaining `Vec<u8>` of data),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - indent used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn deal_with_struct(
+    v1: &[StructField],
+    mut data: Vec<u8>,
+    type_database: &[TypeEntry],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let mut fancy_out: Vec<OutputCard> = Vec::new();
+    for (i, y) in v1.iter().enumerate() {
+        let fancy_output_prep = match &y.field_name {
+            Some(z) => OutputCard {
+                card: ParserCard::FieldName {
+                    name: z.to_string(),
+                    docs_field_name: String::new(),
+                    path_type: String::new(),
+                    docs_type: String::new(),
+                },
+                indent,
+            },
+            None => OutputCard {
+                card: ParserCard::FieldNumber {
+                    number: i,
+                    docs_field_number: String::new(),
+                    path_type: String::new(),
+                    docs_type: String::new(),
+                },
+                indent,
+            },
+        };
+        fancy_out.push(fancy_output_prep);
+        let after_run = decode_simple(&y.field_type, data, type_database, indent + 1, short_specs)?;
+        data = after_run.remaining_vector;
+        fancy_out.extend_from_slice(&after_run.fancy_out);
+    }
+    Ok(DecodedOut {
+        remaining_vector: data,
+        fancy_out,
+    })
+}
+
+/// Function to decode enums described in `type_database`.
+///
+/// Function determines which enum variant is used, and adds to `fancy_out` card `enum_variant_name`,
+/// and, if there is content associated with enum variant, card(s) for this content.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+///
+/// The function takes as arguments
+/// - vector of `EnumVariant` of currently processed type, as found in `type_database`
+/// - data (remaining `Vec<u8>` of data),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - indent used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn deal_with_enum(
+    v1: &[EnumVariant],
+    mut data: Vec<u8>,
+    type_database: &[TypeEntry],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let enum_index = data[0] as usize;
+    if enum_index >= v1.len() {
+        return Err(Error::Decoding(ParserDecodingError::UnexpectedEnumVariant));
+    }
+    let found_variant = &v1[enum_index];
+    match &found_variant.variant_type {
+        EnumVariantType::None => {
+            let remaining_vector = {
+                if data.len() > 1 {
+                    data[1..].to_vec()
+                } else {
+                    Vec::new()
+                }
+            };
+            let fancy_out = vec![OutputCard {
+                card: ParserCard::EnumVariantName {
+                    name: found_variant.variant_name.to_string(),
+                    docs_enum_variant: String::new(),
+                },
+                indent,
+            }];
+            Ok(DecodedOut {
+                remaining_vector,
+                fancy_out,
+            })
+        }
+        EnumVariantType::Type(inner_ty) => {
+            if data.len() == 1 {
+                return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+            }
+            data = data[1..].to_vec();
+            let mut fancy_output_prep = vec![OutputCard {
+                card: ParserCard::EnumVariantName {
+                    name: found_variant.variant_name.to_string(),
+                    docs_enum_variant: String::new(),
+                },
+                indent,
+            }];
+            let after_run = decode_simple(inner_ty, data, type_database, indent + 1, short_specs)?;
+            fancy_output_prep.extend_from_slice(&after_run.fancy_out);
+            data = after_run.remaining_vector;
+            Ok(DecodedOut {
+                remaining_vector: data,
+                fancy_out: fancy_output_prep,
+            })
+        }
+        EnumVariantType::Struct(v2) => {
+            if data.len() == 1 {
+                return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+            }
+            data = data[1..].to_vec();
+            let mut fancy_out: Vec<OutputCard> = Vec::new();
+            for (i, y) in v2.iter().enumerate() {
+                let fancy_output_prep = match &y.field_name {
+                    Some(z) => OutputCard {
+                        card: ParserCard::FieldName {
+                            name: z.to_string(),
+                            docs_field_name: String::new(),
+                            path_type: String::new(),
+                            docs_type: String::new(),
+                        },
+                        indent,
+                    },
+                    None => OutputCard {
+                        card: ParserCard::FieldNumber {
+                            number: i,
+                            docs_field_number: String::new(),
+                            path_type: String::new(),
+                            docs_type: String::new(),
+                        },
+                        indent,
+                    },
+                };
+                fancy_out.push(fancy_output_prep);
+                let after_run =
+                    decode_simple(&y.field_type, data, type_database, indent + 1, short_specs)?;
+                data = after_run.remaining_vector;
+                fancy_out.extend_from_slice(&after_run.fancy_out);
+            }
+            Ok(DecodedOut {
+                remaining_vector: data,
+                fancy_out,
+            })
+        }
+    }
+}
+
+/// Function to decode any type, except calls.
+///
+/// This function is recursive, i.e. it could call itself later if needed with changed input data.
+/// The function decodes only found_ty, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - found_ty (type of the argument found in the previous iteration, to be interpreted on run)
+/// - data (remaining `Vec<u8>` of data),
+/// - `type_database` (it describes all fundamental types that could be encountered in known networks
+/// and are not primitive types (i.e. types decoded by `decode_primitive` function), this database
+/// currently is retrieved and decoded from the database on device used),
+/// - indent used for creating properly formatted js cards,
+/// - `short_specs` (network parameters, such as base58 prefix, currency units and decimals),
+/// all those are used in some cases for proper output formatting).
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn decode_simple(
+    found_ty: &str,
+    mut data: Vec<u8>,
+    type_database: &[TypeEntry],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    if data.is_empty() {
+        return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+    }
+    match decode_primitive(found_ty, &data, indent, short_specs) {
+        Some(a) => Ok(a),
+        None => {
+            // check for option
+            match REGOPTION.captures(found_ty) {
+                Some(caps) => {
+                    deal_with_option(&caps["arg"], data, type_database, indent, short_specs)
+                }
+                None => {
+                    // check for vector
+                    match REGVECTOR.captures(found_ty) {
+                        Some(caps) => {
+                            deal_with_vector(&caps["arg"], data, type_database, indent, short_specs)
+                        }
+                        None => {
+                            // check for tuples
+                            match REGTUPLE.captures(found_ty) {
+                                Some(caps) => {
+                                    let mut fancy_out: Vec<OutputCard> = Vec::new();
+                                    let mut i = 1;
+                                    loop {
+                                        let capture_name = format!("arg{i}");
+                                        match caps.name(&capture_name) {
+                                            Some(x) => {
+                                                fancy_out.push(OutputCard {
+                                                    card: ParserCard::FieldNumber {
+                                                        number: i,
+                                                        docs_field_number: String::new(),
+                                                        path_type: String::new(),
+                                                        docs_type: String::new(),
+                                                    },
+                                                    indent,
+                                                });
+                                                let inner_ty = x.as_str();
+                                                let after_run = decode_simple(
+                                                    inner_ty,
+                                                    data,
+                                                    type_database,
+                                                    indent + 1,
+                                                    short_specs,
+                                                )?;
+                                                fancy_out.extend_from_slice(&after_run.fancy_out);
+                                                data = after_run.remaining_vector;
+                                            }
+                                            None => break,
+                                        }
+                                        i += 1;
+                                    }
+                                    Ok(DecodedOut {
+                                        remaining_vector: data,
+                                        fancy_out,
+                                    })
+                                }
+                                None => {
+                                    // check for array
+                                    match REGARRAY.captures(found_ty) {
+                                        Some(caps) => {
+                                            let inner_ty = &caps["arg"];
+                                            let number_of_elements: u32 = caps["num"]
+                                                .parse()
+                                                .expect("Should have captured a number.");
+                                            deal_with_array(
+                                                inner_ty,
+                                                number_of_elements,
+                                                data,
+                                                type_database,
+                                                indent,
+                                                short_specs,
+                                            )
+                                        }
+                                        None => {
+                                            // check for special case of Balance as is or in Compact form
+                                            if goto_balance(found_ty) {
+                                                special_case_balance(
+                                                    found_ty,
+                                                    data,
+                                                    indent,
+                                                    short_specs,
+                                                )
+                                            } else {
+                                                // check for compact and find the alias for compact
+                                                match REGCOMPACT.captures(found_ty) {
+                                                    Some(caps) => {
+                                                        let inner_ty = &caps["arg"];
+                                                        let mut new_inner_ty = None;
+                                                        for x in type_database.iter() {
+                                                            if x.name == inner_ty {
+                                                                new_inner_ty = match &x.description {
+                                                                    Description::Type(a) => Some(a),
+                                                                    _ => return Err(Error::Decoding(ParserDecodingError::UnexpectedCompactInsides)),
+                                                                };
+                                                                break;
+                                                            }
+                                                        }
+                                                        match new_inner_ty {
+                                                            Some(a) => {
+                                                                let new_ty = found_ty.replace(inner_ty, a);
+                                                                decode_simple(&new_ty, data, type_database, indent, short_specs)
+                                                            },
+                                                            None => Err(Error::Decoding(ParserDecodingError::UnexpectedCompactInsides)),
+                                                        }
+                                                    }
+                                                    None => {
+                                                        // special case of IdentityFields type (from pallet_identity): uses BitFlags, private fields
+                                                        if found_ty == "IdentityFields" {
+                                                            special_case_identity_fields(
+                                                                data,
+                                                                type_database,
+                                                                indent,
+                                                            )
+                                                        } else {
+                                                            // special case of `BitVec` type
+                                                            if found_ty == "BitVec" {
+                                                                special_case_bitvec(data, indent)
+                                                            } else {
+                                                                // special case of AccountId type
+                                                                if (found_ty == "AccountId")
+                                                                    || (found_ty == "T::AccountId")
+                                                                {
+                                                                    special_case_account_id(
+                                                                        data,
+                                                                        indent,
+                                                                        short_specs,
+                                                                    )
+                                                                } else {
+                                                                    // do a search through the type database
+                                                                    let mut found_solution = None;
+                                                                    for x in type_database.iter() {
+                                                                        if x.name == found_ty {
+                                                                            let wrap_me = match &x.description {
+                                                                                Description::Type(inner_ty) => {decode_simple(inner_ty, data, type_database, indent, short_specs)?},
+                                                                                Description::Enum(v1) => {deal_with_enum(v1, data, type_database, indent, short_specs)?},
+                                                                                Description::Struct(v1) => {deal_with_struct(v1, data, type_database, indent, short_specs)?},
+                                                                            };
+                                                                            found_solution =
+                                                                                Some(wrap_me);
+                                                                            break;
+                                                                        }
+                                                                    }
+                                                                    match found_solution {
+                                                                        Some(x) => Ok(x),
+                                                                        None => Err(Error::Decoding(ParserDecodingError::UnknownType(found_ty.to_string()))),
+                                                                    }
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/decoding_sci.rs.html b/rustdocs/src/parser/decoding_sci.rs.html new file mode 100644 index 0000000000..3bcafa3279 --- /dev/null +++ b/rustdocs/src/parser/decoding_sci.rs.html @@ -0,0 +1,2293 @@ +decoding_sci.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+
use std::fmt::Write;
+
+use bitvec::{
+    order::BitOrder,
+    prelude::{BitVec, Lsb0, Msb0},
+    store::BitStore,
+};
+use frame_metadata::v14::RuntimeMetadataV14;
+use num_bigint::{BigInt, BigUint};
+use parity_scale_codec::Decode;
+use scale_info::{
+    form::PortableForm, Field, Type, TypeDef, TypeDefBitSequence, TypeDefComposite,
+    TypeDefPrimitive, TypeDefVariant,
+};
+
+use definitions::network_specs::ShortSpecs;
+
+use crate::decoding_commons::{
+    decode_known_length, decode_primitive_with_flags, get_compact, special_case_account_id,
+    special_case_account_id_20, DecodedOut, OutputCard,
+};
+use crate::decoding_sci_ext::{special_case_era, special_case_hash, Ext, Hash, SpecialExt};
+use crate::error::{ParserDecodingError, ParserMetadataError, Result};
+use crate::{cards::ParserCard, Error};
+
+enum FoundBitOrder {
+    Lsb0,
+    Msb0,
+}
+
+#[derive(Clone, Copy)]
+pub(crate) enum CallExpectation {
+    None,
+    Pallet,
+    Method,
+}
+
+impl CallExpectation {
+    fn add(self) -> Self {
+        match self {
+            CallExpectation::None => CallExpectation::Pallet,
+            CallExpectation::Pallet => CallExpectation::Method,
+            CallExpectation::Method => CallExpectation::Method,
+        }
+    }
+}
+
+/// Function to decode types that are variants of `TypeDefPrimitive` enum.
+///
+/// The function decodes only given type found_ty, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - `found_ty` (`TypeDefPrimitive`, found in the previous iteration)
+/// - `data` (remaining `Vec<u8>` of data),
+/// - `indent` used for creating properly formatted js cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn decode_type_def_primitive(
+    found_ty: &TypeDefPrimitive,
+    possible_ext: &mut Option<&mut Ext>,
+    compact_flag: bool,
+    balance_flag: bool,
+    data: &[u8],
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    match found_ty {
+        TypeDefPrimitive::Bool => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_known_length::<bool>(data, "bool", indent)
+        }
+        TypeDefPrimitive::Char => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_char(data, indent)
+        }
+        TypeDefPrimitive::Str => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_str(data, indent)
+        }
+        TypeDefPrimitive::U8 => decode_primitive_with_flags::<u8>(
+            data,
+            possible_ext,
+            compact_flag,
+            balance_flag,
+            "u8",
+            indent,
+            short_specs,
+        ),
+        TypeDefPrimitive::U16 => decode_primitive_with_flags::<u16>(
+            data,
+            possible_ext,
+            compact_flag,
+            balance_flag,
+            "u16",
+            indent,
+            short_specs,
+        ),
+        TypeDefPrimitive::U32 => decode_primitive_with_flags::<u32>(
+            data,
+            possible_ext,
+            compact_flag,
+            balance_flag,
+            "u32",
+            indent,
+            short_specs,
+        ),
+        TypeDefPrimitive::U64 => decode_primitive_with_flags::<u64>(
+            data,
+            possible_ext,
+            compact_flag,
+            balance_flag,
+            "u64",
+            indent,
+            short_specs,
+        ),
+        TypeDefPrimitive::U128 => decode_primitive_with_flags::<u128>(
+            data,
+            possible_ext,
+            compact_flag,
+            balance_flag,
+            "u128",
+            indent,
+            short_specs,
+        ),
+        TypeDefPrimitive::U256 => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_big256(data, false, indent)
+        }
+        TypeDefPrimitive::I8 => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_known_length::<i8>(data, "i8", indent)
+        }
+        TypeDefPrimitive::I16 => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_known_length::<i16>(data, "i16", indent)
+        }
+        TypeDefPrimitive::I32 => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_known_length::<i32>(data, "i32", indent)
+        }
+        TypeDefPrimitive::I64 => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_known_length::<i64>(data, "i64", indent)
+        }
+        TypeDefPrimitive::I128 => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_known_length::<i128>(data, "i128", indent)
+        }
+        TypeDefPrimitive::I256 => {
+            reject_flags(compact_flag, balance_flag)?;
+            decode_big256(data, true, indent)
+        }
+    }
+}
+
+fn reject_flags(compact_flag: bool, balance_flag: bool) -> Result<()> {
+    if compact_flag {
+        return Err(Error::Decoding(
+            ParserDecodingError::UnexpectedCompactInsides,
+        ));
+    }
+    if balance_flag {
+        return Err(Error::Decoding(ParserDecodingError::BalanceNotDescribed));
+    }
+    Ok(())
+}
+
+/// Function to decode `char`.
+/// `char` is always 4 byte element, so the needed length pre-determined.
+///
+/// The function decodes only `char` part, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - indent used for creating properly formatted output cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn decode_char(data: &[u8], indent: u32) -> Result<DecodedOut> {
+    let mut slice_to_char = data.get(0..4).ok_or(ParserDecodingError::DataTooShort)?;
+    let a = <u32>::decode(&mut slice_to_char)
+        .map_err(|_| ParserDecodingError::PrimitiveFailure("char".to_string()))?;
+    let b = char::from_u32(a)
+        .ok_or_else(|| ParserDecodingError::PrimitiveFailure("char".to_string()))?;
+    let fancy_out = vec![OutputCard {
+        card: ParserCard::Default(b.to_string()),
+        indent,
+    }];
+    let remaining_vector = (data[4..]).to_vec();
+    Ok(DecodedOut {
+        remaining_vector,
+        fancy_out,
+    })
+}
+
+/// Function to decode `str`.
+/// `str` is encoded as a vector of utf-converteable elements, and is therefore
+/// preluded by the number of elements as compact.
+///
+/// The function decodes only `str` part, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - indent used for creating properly formatted output cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn decode_str(data: &[u8], indent: u32) -> Result<DecodedOut> {
+    let pre_str = get_compact::<u32>(data)?;
+    let str_length = pre_str.compact_found as usize;
+    match pre_str.start_next_unit {
+        Some(start) => match data.get(start..start + str_length) {
+            Some(a) => {
+                let text = String::from_utf8(a.to_vec())
+                    .map_err(|_| ParserDecodingError::PrimitiveFailure("str".to_string()))?;
+                let fancy_out = vec![OutputCard {
+                    card: ParserCard::Text(text),
+                    indent,
+                }];
+                let remaining_vector = data[start + str_length..].to_vec();
+                Ok(DecodedOut {
+                    remaining_vector,
+                    fancy_out,
+                })
+            }
+            None => Err(Error::Decoding(ParserDecodingError::DataTooShort)),
+        },
+        None => {
+            if str_length != 0 {
+                Err(Error::Decoding(ParserDecodingError::DataTooShort))
+            } else {
+                let fancy_out = vec![OutputCard {
+                    card: ParserCard::Text(String::new()),
+                    indent,
+                }];
+                let remaining_vector = Vec::new();
+                Ok(DecodedOut {
+                    remaining_vector,
+                    fancy_out,
+                })
+            }
+        }
+    }
+}
+
+/// Function to decode `U256` and `I256`.
+/// Both `U256` and `I256` are always 32 byte element, so the needed length pre-determined.
+/// Note: both types are marked as non-existing in rust in scale-info.
+/// For decoding the elements, `le` functions from `num_bigint` crate are used.
+///
+/// The function decodes only `U256` or `I256` part, removes already decoded part of input data `Vec<u8>`,
+/// and returns whatever remains as `DecodedOut` field `remaining_vector`, which is processed later separately.
+///
+/// The function takes as arguments
+/// - data (remaining `Vec<u8>` of data),
+/// - boolean flag if the expected value is signed (signed corresponds to `I256`, unsigned corresponds to `U256`),
+/// - indent used for creating properly formatted output cards.
+///
+/// The function outputs the `DecodedOut` value in case of success.
+fn decode_big256(data: &[u8], signed: bool, indent: u32) -> Result<DecodedOut> {
+    match data.get(0..32) {
+        Some(slice_to_big256) => {
+            let fancy_out = {
+                if signed {
+                    vec![OutputCard {
+                        card: ParserCard::Default(
+                            BigInt::from_signed_bytes_le(slice_to_big256).to_string(),
+                        ),
+                        indent,
+                    }]
+                }
+                // I256
+                else {
+                    vec![OutputCard {
+                        card: ParserCard::Default(
+                            BigUint::from_bytes_le(slice_to_big256).to_string(),
+                        ),
+                        indent,
+                    }]
+                } // `U256`
+            };
+            let remaining_vector = (data[32..]).to_vec();
+            Ok(DecodedOut {
+                remaining_vector,
+                fancy_out,
+            })
+        }
+        None => Err(Error::Decoding(ParserDecodingError::DataTooShort)),
+    }
+}
+
+#[derive(Debug)]
+enum SpecialType {
+    AccountId,
+    AccountId20,
+    Call,
+    None,
+}
+
+fn check_special(current_type: &Type<PortableForm>) -> SpecialType {
+    match current_type.path.ident() {
+        Some(a) => match a.as_str() {
+            "AccountId32" => SpecialType::AccountId,
+            "AccountId20" => SpecialType::AccountId20,
+            "Call" => SpecialType::Call,
+            _ => SpecialType::None,
+        },
+        None => SpecialType::None,
+    }
+}
+
+// TODO Types that should be displayed as Balance can originate not from fields, for example, from tuples.
+// Typical example is (`AccountId`, `Balance`) tuple. While `AccountId` goes through type with `AccountId` in ident,
+// and could be easily detected, Balance is immediately linked to corresponding number.
+// If however, the typeName is searched for word "Balance", numerous false positives are possible.
+fn field_type_name_is_balance(type_name: &str) -> bool {
+    (type_name == "Balance")
+        || (type_name == "T::Balance")
+        || (type_name == "BalanceOf<T>")
+        || (type_name == "ExtendedBalance")
+        || (type_name == "BalanceOf<T, I>")
+        || (type_name == "DepositBalance")
+        || (type_name == "PalletBalanceOf<T>")
+}
+
+#[allow(clippy::too_many_arguments)]
+pub(crate) fn decoding_sci_complete(
+    current_type: &Type<PortableForm>,
+    possible_ext: &mut Option<&mut Ext>,
+    compact_flag: bool,
+    balance_flag: bool,
+    call_expectation: &CallExpectation,
+    data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    if let Some(ext) = possible_ext {
+        ext.check_special(current_type)
+    }
+    let special_type = check_special(current_type);
+    let call_expectation = {
+        if let SpecialType::Call = special_type {
+            call_expectation.add()
+        } else {
+            CallExpectation::None
+        }
+    };
+    match special_type {
+        SpecialType::AccountId => special_case_account_id(data, indent, short_specs),
+        SpecialType::AccountId20 => special_case_account_id_20(data, indent, short_specs),
+        _ => {
+            if let Some(ext) = possible_ext {
+                if let SpecialExt::Era = ext.specialty {
+                    if ext.found_ext.era.is_some() {
+                        return Err(Error::FundamentallyBadV14Metadata(
+                            ParserMetadataError::EraTwice,
+                        ));
+                    } else {
+                        return special_case_era(data, &mut ext.found_ext, indent);
+                    }
+                }
+            }
+            match &current_type.type_def {
+                TypeDef::Composite(x) => decode_type_def_composite(
+                    x,
+                    possible_ext,
+                    compact_flag,
+                    balance_flag,
+                    data,
+                    meta_v14,
+                    indent,
+                    short_specs,
+                ),
+                TypeDef::Variant(x) => {
+                    reject_flags(compact_flag, balance_flag)?;
+                    decode_type_def_variant(
+                        x,
+                        possible_ext,
+                        &call_expectation,
+                        data,
+                        meta_v14,
+                        indent,
+                        short_specs,
+                    )
+                }
+                TypeDef::Sequence(x) => {
+                    if compact_flag {
+                        return Err(Error::Decoding(
+                            ParserDecodingError::UnexpectedCompactInsides,
+                        ));
+                    }
+                    let inner_type = meta_v14
+                        .types
+                        .resolve(x.type_param.id)
+                        .ok_or(ParserDecodingError::V14TypeNotResolved)?;
+                    decode_type_def_sequence(
+                        inner_type,
+                        possible_ext,
+                        balance_flag,
+                        &call_expectation,
+                        data,
+                        meta_v14,
+                        indent,
+                        short_specs,
+                    )
+                }
+                TypeDef::Array(x) => {
+                    if let Some(ext) = possible_ext {
+                        if let SpecialExt::Hash(ref hash) = ext.specialty {
+                            match hash {
+                                Hash::GenesisHash => {
+                                    if ext.found_ext.genesis_hash.is_some() {
+                                        return Err(Error::FundamentallyBadV14Metadata(
+                                            ParserMetadataError::GenesisHashTwice,
+                                        ));
+                                    }
+                                }
+                                Hash::BlockHash => {
+                                    if ext.found_ext.block_hash.is_some() {
+                                        return Err(Error::FundamentallyBadV14Metadata(
+                                            ParserMetadataError::BlockHashTwice,
+                                        ));
+                                    }
+                                }
+                            }
+                            return special_case_hash(
+                                data,
+                                &mut ext.found_ext,
+                                indent,
+                                short_specs,
+                                hash,
+                            );
+                        }
+                    }
+                    if compact_flag {
+                        return Err(Error::Decoding(
+                            ParserDecodingError::UnexpectedCompactInsides,
+                        ));
+                    }
+                    let inner_type = meta_v14
+                        .types
+                        .resolve(x.type_param.id)
+                        .ok_or(ParserDecodingError::V14TypeNotResolved)?;
+                    decode_type_def_array(
+                        inner_type,
+                        x.len,
+                        possible_ext,
+                        balance_flag,
+                        data,
+                        meta_v14,
+                        indent,
+                        short_specs,
+                    )
+                }
+                TypeDef::Tuple(x) => {
+                    if compact_flag {
+                        return Err(Error::Decoding(
+                            ParserDecodingError::UnexpectedCompactInsides,
+                        ));
+                    }
+                    let id_set = x.fields.iter().map(|a| a.id).collect();
+                    decode_type_def_tuple(
+                        id_set,
+                        possible_ext,
+                        balance_flag,
+                        data,
+                        meta_v14,
+                        indent,
+                        short_specs,
+                    )
+                }
+                TypeDef::Primitive(x) => decode_type_def_primitive(
+                    x,
+                    possible_ext,
+                    compact_flag,
+                    balance_flag,
+                    &data,
+                    indent,
+                    short_specs,
+                ),
+                TypeDef::Compact(x) => {
+                    let inner_type = meta_v14
+                        .types
+                        .resolve(x.type_param.id)
+                        .ok_or(ParserDecodingError::V14TypeNotResolved)?;
+                    let compact_flag = true;
+                    decoding_sci_complete(
+                        inner_type,
+                        possible_ext,
+                        compact_flag,
+                        balance_flag,
+                        &CallExpectation::None,
+                        data,
+                        meta_v14,
+                        indent,
+                        short_specs,
+                    )
+                }
+                TypeDef::BitSequence(x) => {
+                    reject_flags(compact_flag, balance_flag)?;
+                    decode_type_def_bit_sequence(x, data, meta_v14, indent)
+                }
+            }
+        }
+    }
+}
+
+pub(crate) fn decoding_sci_entry_point(
+    mut data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    mut indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let pallet_index: u8 = *data.first().ok_or(ParserDecodingError::DataTooShort)?;
+
+    let mut found_call_type: Option<u32> = None;
+    let mut found_pallet_name: Option<String> = None;
+    for x in meta_v14.pallets.iter() {
+        if x.index == pallet_index {
+            found_pallet_name = Some(x.name.to_string());
+            if let Some(a) = &x.calls {
+                found_call_type = Some(a.ty.id);
+            }
+            break;
+        }
+    }
+    let pallet_name = found_pallet_name.ok_or(ParserDecodingError::PalletNotFound(pallet_index))?;
+    let type_id =
+        found_call_type.ok_or_else(|| ParserDecodingError::NoCallsInPallet(pallet_name.clone()))?;
+    let (current_type, _, _) = type_path_docs(meta_v14, type_id)?;
+
+    let mut fancy_out = vec![OutputCard {
+        card: ParserCard::Pallet(pallet_name),
+        indent,
+    }];
+    indent += 1;
+    data = data[1..].to_vec();
+
+    let compact_flag = false;
+    let balance_flag = false;
+    let decoded_out = decoding_sci_complete(
+        &current_type,
+        &mut None,
+        compact_flag,
+        balance_flag,
+        &CallExpectation::Pallet,
+        data,
+        meta_v14,
+        indent,
+        short_specs,
+    )?;
+    fancy_out.extend_from_slice(&decoded_out.fancy_out);
+
+    Ok(DecodedOut {
+        remaining_vector: decoded_out.remaining_vector,
+        fancy_out,
+    })
+}
+
+#[allow(clippy::too_many_arguments)]
+fn decode_type_def_sequence(
+    inner_type: &Type<PortableForm>,
+    possible_ext: &mut Option<&mut Ext>,
+    balance_flag: bool,
+    call_expectation: &CallExpectation,
+    mut data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let pre_vector = get_compact::<u32>(&data)?;
+    let mut fancy_output_prep: Vec<OutputCard> = Vec::new();
+    let elements_of_vector = pre_vector.compact_found;
+    match pre_vector.start_next_unit {
+        Some(start) => {
+            data = data[start..].to_vec();
+            for _i in 0..elements_of_vector {
+                let compact_flag = false;
+                let after_run = decoding_sci_complete(
+                    inner_type,
+                    possible_ext,
+                    compact_flag,
+                    balance_flag,
+                    call_expectation,
+                    data,
+                    meta_v14,
+                    indent,
+                    short_specs,
+                )?;
+                fancy_output_prep.extend_from_slice(&after_run.fancy_out);
+                data = after_run.remaining_vector;
+            }
+            Ok(DecodedOut {
+                remaining_vector: data,
+                fancy_out: fancy_output_prep,
+            })
+        }
+        None => {
+            if elements_of_vector != 0 {
+                Err(Error::Decoding(ParserDecodingError::DataTooShort))
+            } else {
+                Ok(DecodedOut {
+                    remaining_vector: Vec::new(),
+                    fancy_out: vec![OutputCard {
+                        card: ParserCard::Default(String::new()),
+                        indent,
+                    }],
+                })
+            }
+        }
+    }
+}
+
+#[allow(clippy::too_many_arguments)]
+fn decode_type_def_array(
+    inner_type: &Type<PortableForm>,
+    len: u32,
+    possible_ext: &mut Option<&mut Ext>,
+    balance_flag: bool,
+    mut data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let mut fancy_out: Vec<OutputCard> = Vec::new();
+    for _i in 0..len {
+        let compact_flag = false;
+        let after_run = decoding_sci_complete(
+            inner_type,
+            possible_ext,
+            compact_flag,
+            balance_flag,
+            &CallExpectation::None,
+            data,
+            meta_v14,
+            indent,
+            short_specs,
+        )?;
+        fancy_out.extend_from_slice(&after_run.fancy_out);
+        data = after_run.remaining_vector;
+    }
+    Ok(DecodedOut {
+        remaining_vector: data,
+        fancy_out,
+    })
+}
+
+fn decode_type_def_tuple(
+    id_set: Vec<u32>,
+    possible_ext: &mut Option<&mut Ext>,
+    balance_flag: bool,
+    mut data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let mut fancy_out: Vec<OutputCard> = Vec::new();
+    for (i, type_id) in id_set.iter().enumerate() {
+        let (inner_type, path, docs) = type_path_docs(meta_v14, *type_id)?;
+        fancy_out.push(OutputCard {
+            card: ParserCard::FieldNumber {
+                number: i + 1,
+                docs_field_number: String::new(),
+                path_type: path,
+                docs_type: docs,
+            },
+            indent,
+        });
+        let compact_flag = false;
+        let after_run = decoding_sci_complete(
+            &inner_type,
+            possible_ext,
+            compact_flag,
+            balance_flag,
+            &CallExpectation::None,
+            data,
+            meta_v14,
+            indent,
+            short_specs,
+        )?;
+        fancy_out.extend_from_slice(&after_run.fancy_out);
+        data = after_run.remaining_vector;
+    }
+    Ok(DecodedOut {
+        remaining_vector: data,
+        fancy_out,
+    })
+}
+
+struct IsOptionBool {
+    is_option: bool,
+    is_bool: bool,
+}
+
+fn is_option_bool(
+    found_ty: &TypeDefVariant<PortableForm>,
+    meta_v14: &RuntimeMetadataV14,
+) -> IsOptionBool {
+    let mut got_len = false;
+    let mut got_none = false;
+    let mut got_some = false;
+    let mut is_bool = false;
+    if found_ty.variants.len() == 2 {
+        got_len = true;
+        for x in found_ty.variants.iter() {
+            if x.name.as_str() == "None" {
+                got_none = true;
+            }
+            if x.name.as_str() == "Some" {
+                got_some = true;
+                let fields = &x.fields;
+                if fields.len() == 1 {
+                    let option_type_id = fields[0].ty.id;
+                    match meta_v14.types.resolve(option_type_id) {
+                        Some(a) => {
+                            if let TypeDef::Primitive(TypeDefPrimitive::Bool) = a.type_def {
+                                is_bool = true
+                            } else {
+                                break;
+                            }
+                        }
+                        None => break,
+                    }
+                } else {
+                    break;
+                }
+            }
+        }
+    }
+    IsOptionBool {
+        is_option: got_len && got_none && got_some,
+        is_bool,
+    }
+}
+
+fn decode_type_def_variant(
+    found_ty: &TypeDefVariant<PortableForm>,
+    possible_ext: &mut Option<&mut Ext>,
+    call_expectation: &CallExpectation,
+    mut data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let enum_index = *data.first().ok_or(ParserDecodingError::DataTooShort)?;
+
+    let check = is_option_bool(found_ty, meta_v14);
+    if check.is_option {
+        if check.is_bool {
+            let fancy_out = match enum_index {
+                0 => vec![OutputCard {
+                    card: ParserCard::None,
+                    indent,
+                }],
+                1 => vec![OutputCard {
+                    card: ParserCard::Default(String::from("True")),
+                    indent,
+                }],
+                2 => vec![OutputCard {
+                    card: ParserCard::Default(String::from("False")),
+                    indent,
+                }],
+                _ => {
+                    return Err(Error::Decoding(
+                        ParserDecodingError::UnexpectedOptionVariant,
+                    ))
+                }
+            };
+            let remaining_vector = data[1..].to_vec();
+            Ok(DecodedOut {
+                remaining_vector,
+                fancy_out,
+            })
+        } else {
+            match enum_index {
+                0 => {
+                    let fancy_out = vec![OutputCard {
+                        card: ParserCard::None,
+                        indent,
+                    }];
+                    let remaining_vector = data[1..].to_vec();
+                    Ok(DecodedOut {
+                        remaining_vector,
+                        fancy_out,
+                    })
+                }
+                1 => {
+                    if data.len() == 1 {
+                        return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+                    }
+                    data = data[1..].to_vec();
+                    let found_variant = &found_ty.variants[1];
+                    let compact_flag = false;
+                    let balance_flag = false;
+                    process_fields(
+                        &found_variant.fields,
+                        possible_ext,
+                        &CallExpectation::None,
+                        compact_flag,
+                        balance_flag,
+                        data,
+                        meta_v14,
+                        indent,
+                        short_specs,
+                    )
+                }
+                _ => Err(Error::Decoding(
+                    ParserDecodingError::UnexpectedOptionVariant,
+                )),
+            }
+        }
+    } else {
+        let mut found_variant = None;
+        for x in found_ty.variants.iter() {
+            if x.index == enum_index {
+                found_variant = Some(x);
+                break;
+            }
+        }
+        let found_variant = match found_variant {
+            Some(a) => a,
+            None => return Err(Error::Decoding(ParserDecodingError::UnexpectedEnumVariant)),
+        };
+        let mut variant_docs = String::new();
+        for (i, x) in found_variant.docs.iter().enumerate() {
+            if i > 0 {
+                variant_docs.push('\n');
+            }
+            variant_docs.push_str(x);
+        }
+        let mut fancy_out = match call_expectation {
+            CallExpectation::None => vec![OutputCard {
+                card: ParserCard::EnumVariantName {
+                    name: found_variant.name.to_string(),
+                    docs_enum_variant: variant_docs,
+                },
+                indent,
+            }],
+            CallExpectation::Pallet => vec![OutputCard {
+                card: ParserCard::Pallet(found_variant.name.to_string()),
+                indent,
+            }],
+            CallExpectation::Method => vec![OutputCard {
+                card: ParserCard::Method {
+                    method_name: found_variant.name.to_string(),
+                    docs: variant_docs,
+                },
+                indent,
+            }],
+        };
+        data = data[1..].to_vec();
+
+        let compact_flag = false;
+        let balance_flag = false;
+        let fields_processed = process_fields(
+            &found_variant.fields,
+            possible_ext,
+            call_expectation,
+            compact_flag,
+            balance_flag,
+            data,
+            meta_v14,
+            indent + 1,
+            short_specs,
+        )?;
+        fancy_out.extend_from_slice(&fields_processed.fancy_out);
+        data = fields_processed.remaining_vector;
+
+        Ok(DecodedOut {
+            remaining_vector: data,
+            fancy_out,
+        })
+    }
+}
+
+#[allow(clippy::too_many_arguments)]
+fn process_fields(
+    fields: &[Field<PortableForm>],
+    possible_ext: &mut Option<&mut Ext>,
+    call_expectation: &CallExpectation,
+    compact_flag: bool,
+    mut balance_flag: bool,
+    mut data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let mut indent_skipped = false;
+    let mut field_is_str = false;
+    let mut fancy_out: Vec<OutputCard> = Vec::new();
+    for (i, x) in fields.iter().enumerate() {
+        let mut field_docs = String::new();
+        for (j, y) in x.docs.iter().enumerate() {
+            if j > 0 {
+                field_docs.push('\n');
+            }
+            field_docs.push_str(y);
+        }
+        let (inner_type, path_type, docs_type) = type_path_docs(meta_v14, x.ty.id)?;
+        match &x.name {
+            Some(field_name) => {
+                fancy_out.push(OutputCard {
+                    card: ParserCard::FieldName {
+                        name: field_name.to_string(),
+                        docs_field_name: field_docs,
+                        path_type,
+                        docs_type,
+                    },
+                    indent,
+                });
+                if (field_name == "remark") || (field_name == "remark_with_event") {
+                    field_is_str = true;
+                }
+            }
+            None => {
+                if fields.len() > 1 {
+                    fancy_out.push(OutputCard {
+                        card: ParserCard::FieldNumber {
+                            number: i,
+                            docs_field_number: field_docs,
+                            path_type,
+                            docs_type,
+                        },
+                        indent,
+                    });
+                } else {
+                    indent_skipped = true;
+                }
+            }
+        }
+        balance_flag = match &x.type_name {
+            Some(a) => field_type_name_is_balance(a),
+            None => balance_flag,
+        };
+        let indent = {
+            if indent_skipped {
+                indent
+            } else {
+                indent + 1
+            }
+        };
+        let after_run = {
+            if field_is_str {
+                decode_str(&data, indent)?
+            } else {
+                decoding_sci_complete(
+                    &inner_type,
+                    possible_ext,
+                    compact_flag,
+                    balance_flag,
+                    call_expectation,
+                    data,
+                    meta_v14,
+                    indent,
+                    short_specs,
+                )?
+            }
+        };
+        fancy_out.extend_from_slice(&after_run.fancy_out);
+        data = after_run.remaining_vector;
+    }
+    Ok(DecodedOut {
+        remaining_vector: data,
+        fancy_out,
+    })
+}
+
+#[allow(clippy::too_many_arguments)]
+fn decode_type_def_composite(
+    composite_ty: &TypeDefComposite<PortableForm>,
+    possible_ext: &mut Option<&mut Ext>,
+    compact_flag: bool,
+    balance_flag: bool,
+    data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    if compact_flag && (composite_ty.fields.len() > 1) {
+        return Err(Error::Decoding(
+            ParserDecodingError::UnexpectedCompactInsides,
+        ));
+    }
+    process_fields(
+        &composite_ty.fields,
+        possible_ext,
+        &CallExpectation::None,
+        compact_flag,
+        balance_flag,
+        data,
+        meta_v14,
+        indent,
+        short_specs,
+    )
+}
+
+fn decode_type_def_bit_sequence(
+    bit_ty: &TypeDefBitSequence<PortableForm>,
+    data: Vec<u8>,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+) -> Result<DecodedOut> {
+    let pre_bitvec = get_compact::<u32>(&data)?;
+    let actual_length = match pre_bitvec.compact_found % 8 {
+        0 => pre_bitvec.compact_found / 8,
+        _ => (pre_bitvec.compact_found / 8) + 1,
+    };
+    match pre_bitvec.start_next_unit {
+        Some(start) => {
+            let fin = start + (actual_length as usize);
+            let into_bv_decode = match data.get(..fin) {
+                Some(a) => a.to_vec(),
+                None => return Err(Error::Decoding(ParserDecodingError::DataTooShort)),
+            };
+            let bitorder_type_id = bit_ty.bit_order_type.id;
+            let bitorder_type = match meta_v14.types.resolve(bitorder_type_id) {
+                Some(a) => a,
+                None => return Err(Error::Decoding(ParserDecodingError::V14TypeNotResolved)),
+            };
+            let bitorder = match bitorder_type.type_def {
+                TypeDef::Composite(_) => match bitorder_type.path.ident() {
+                    Some(x) => match x.as_str() {
+                        "Lsb0" => FoundBitOrder::Lsb0,
+                        "Msb0" => FoundBitOrder::Msb0,
+                        _ => return Err(Error::Decoding(ParserDecodingError::NotBitOrderType)),
+                    },
+                    None => return Err(Error::Decoding(ParserDecodingError::NotBitOrderType)),
+                },
+                _ => return Err(Error::Decoding(ParserDecodingError::NotBitOrderType)),
+            };
+
+            let bitstore_type_id = bit_ty.bit_store_type.id;
+            let bitstore_type = match meta_v14.types.resolve(bitstore_type_id) {
+                Some(a) => a,
+                None => return Err(Error::Decoding(ParserDecodingError::V14TypeNotResolved)),
+            };
+            let card_prep = match &bitstore_type.type_def {
+                TypeDef::Primitive(a) => {
+                    match a {
+                        TypeDefPrimitive::U8 => process_bitvec::<u8>(bitorder, into_bv_decode)?,
+                        TypeDefPrimitive::U16 => process_bitvec::<u16>(bitorder, into_bv_decode)?,
+                        TypeDefPrimitive::U32 => process_bitvec::<u32>(bitorder, into_bv_decode)?,
+                        // this should not be here, but due to possible architecture limitations u64 will not compile on 32-bit architectures
+                        // ideally, should be patched by `#[repr(C, align(8))]` thing similar to `BitVec` issue 76
+                        // TypeDefPrimitive::U64 => process_bitvec::<u64> (bitorder, into_bv_decode)?,
+                        TypeDefPrimitive::U64 => match bitorder {
+                            FoundBitOrder::Lsb0 => ugly_patch_u64::<Lsb0>(into_bv_decode)?,
+                            FoundBitOrder::Msb0 => ugly_patch_u64::<Msb0>(into_bv_decode)?,
+                        },
+                        _ => return Err(Error::Decoding(ParserDecodingError::NotBitStoreType)),
+                    }
+                }
+                _ => return Err(Error::Decoding(ParserDecodingError::NotBitStoreType)),
+            };
+
+            let fancy_out = vec![OutputCard {
+                card: ParserCard::BitVec(card_prep),
+                indent,
+            }];
+            let remaining_vector = data[fin..].to_vec();
+            Ok(DecodedOut {
+                remaining_vector,
+                fancy_out,
+            })
+        }
+        None => {
+            if actual_length != 0 {
+                return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+            }
+            Ok(DecodedOut {
+                remaining_vector: Vec::new(),
+                fancy_out: vec![OutputCard {
+                    card: ParserCard::Default(String::new()),
+                    indent,
+                }],
+            })
+        }
+    }
+}
+
+fn process_bitvec<T: BitStore + Decode>(
+    bitorder: FoundBitOrder,
+    into_bv_decode: Vec<u8>,
+) -> Result<String> {
+    match bitorder {
+        FoundBitOrder::Lsb0 => match <BitVec<T, Lsb0>>::decode(&mut &into_bv_decode[..]) {
+            Ok(b) => Ok(b.to_string()),
+            Err(_) => Err(Error::Decoding(ParserDecodingError::BitVecFailure)),
+        },
+        FoundBitOrder::Msb0 => match <BitVec<T, Msb0>>::decode(&mut &into_bv_decode[..]) {
+            Ok(b) => Ok(b.to_string()),
+            Err(_) => Err(Error::Decoding(ParserDecodingError::BitVecFailure)),
+        },
+    }
+}
+
+fn ugly_patch_u64<O: BitOrder>(into_bv_decode: Vec<u8>) -> Result<String> {
+    let bitvec_decoded = match <BitVec<u32, O>>::decode(&mut &into_bv_decode[..]) {
+        Ok(b) => b,
+        Err(_) => return Err(Error::Decoding(ParserDecodingError::BitVecFailure)),
+    };
+    let vec = bitvec_decoded.into_vec();
+    let mut out = String::from("[");
+    for i in 0..vec.len() / 2 {
+        if i > 0 {
+            out.push_str(", ");
+        }
+        let print1 = BitVec::<u32, O>::from_vec(vec![vec[2 * i]]).to_string();
+        let print2 = BitVec::<u32, O>::from_vec(vec![vec[2 * i + 1]]).to_string();
+        let _ = write!(
+            &mut out,
+            "{}{}",
+            &print1[1..print1.len() - 1],
+            &print2[1..print2.len() - 1]
+        );
+    }
+    out.push(']');
+    Ok(out)
+}
+
+fn type_path_docs(
+    meta_v14: &RuntimeMetadataV14,
+    type_id: u32,
+) -> Result<(Type<PortableForm>, String, String)> {
+    let current_type = meta_v14
+        .types
+        .resolve(type_id)
+        .ok_or(ParserDecodingError::V14TypeNotResolved)?;
+    let mut docs = String::new();
+    for (i, x) in current_type.docs.iter().enumerate() {
+        if i > 0 {
+            docs.push('\n');
+        }
+        docs.push_str(x);
+    }
+    let mut path = String::new();
+    for (i, x) in current_type.path.segments.iter().enumerate() {
+        if i > 0 {
+            path.push_str(" >> ");
+        }
+        path.push_str(x);
+    }
+    Ok((current_type.to_owned(), path, docs))
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/decoding_sci_ext.rs.html b/rustdocs/src/parser/decoding_sci_ext.rs.html new file mode 100644 index 0000000000..fad9471a67 --- /dev/null +++ b/rustdocs/src/parser/decoding_sci_ext.rs.html @@ -0,0 +1,409 @@ +decoding_sci_ext.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+
use frame_metadata::v14::RuntimeMetadataV14;
+use parity_scale_codec::Decode;
+use scale_info::{form::PortableForm, Type};
+use sp_core::H256;
+use sp_runtime::generic::Era;
+
+use definitions::network_specs::ShortSpecs;
+
+use crate::cards::ParserCard;
+use crate::decoding_commons::{DecodedOut, OutputCard};
+use crate::decoding_sci::{decoding_sci_complete, CallExpectation};
+use crate::error::{Error, ParserDecodingError, Result};
+
+pub(crate) fn decode_ext_attempt(
+    data: &[u8],
+    ext: &mut Ext,
+    meta_v14: &RuntimeMetadataV14,
+    indent: u32,
+    short_specs: &ShortSpecs,
+) -> Result<DecodedOut> {
+    let mut data = data.to_vec();
+    let mut fancy_out: Vec<OutputCard> = Vec::new();
+    for x in meta_v14.extrinsic.signed_extensions.iter() {
+        ext.identifier = x.identifier.to_string();
+        let current_type = match meta_v14.types.resolve(x.ty.id) {
+            Some(a) => a,
+            None => return Err(Error::Decoding(ParserDecodingError::V14TypeNotResolved)),
+        };
+        let decoded_out = decoding_sci_complete(
+            current_type,
+            &mut Some(ext),
+            false,
+            false,
+            &CallExpectation::None,
+            data,
+            meta_v14,
+            indent,
+            short_specs,
+        )?;
+        fancy_out.extend_from_slice(&decoded_out.fancy_out);
+        data = decoded_out.remaining_vector;
+    }
+    for x in meta_v14.extrinsic.signed_extensions.iter() {
+        ext.identifier = x.identifier.to_string();
+        let current_type = match meta_v14.types.resolve(x.additional_signed.id) {
+            Some(a) => a,
+            None => return Err(Error::Decoding(ParserDecodingError::V14TypeNotResolved)),
+        };
+        let decoded_out = decoding_sci_complete(
+            current_type,
+            &mut Some(ext),
+            false,
+            false,
+            &CallExpectation::None,
+            data,
+            meta_v14,
+            indent,
+            short_specs,
+        )?;
+        fancy_out.extend_from_slice(&decoded_out.fancy_out);
+        data = decoded_out.remaining_vector;
+    }
+    Ok(DecodedOut {
+        remaining_vector: data.to_vec(),
+        fancy_out,
+    })
+}
+
+pub(crate) struct Ext {
+    pub(crate) identifier: String,
+    pub(crate) specialty: SpecialExt,
+    pub(crate) found_ext: FoundExt,
+}
+
+impl Ext {
+    pub(crate) fn init() -> Self {
+        Self {
+            identifier: String::new(),
+            specialty: SpecialExt::None,
+            found_ext: FoundExt::init(),
+        }
+    }
+    pub(crate) fn check_special(&mut self, current_type: &Type<PortableForm>) {
+        self.specialty = match current_type.path.ident() {
+            Some(a) => match a.as_str() {
+                "Era" => SpecialExt::Era,
+                "CheckNonce" => SpecialExt::Nonce,
+                "ChargeTransactionPayment" => SpecialExt::Tip,
+                _ => SpecialExt::None,
+            },
+            None => SpecialExt::None,
+        };
+        if let SpecialExt::None = self.specialty {
+            self.specialty = match self.identifier.as_str() {
+                "CheckSpecVersion" => SpecialExt::SpecVersion,
+                "CheckTxVersion" => SpecialExt::TxVersion,
+                "CheckGenesis" => SpecialExt::Hash(Hash::GenesisHash),
+                "CheckMortality" => SpecialExt::Hash(Hash::BlockHash),
+                "CheckNonce" => SpecialExt::Nonce,
+                "ChargeTransactionPayment" => SpecialExt::Tip,
+                _ => SpecialExt::None,
+            };
+        }
+    }
+}
+
+pub(crate) struct FoundExt {
+    pub(crate) era: Option<Era>,
+    pub(crate) genesis_hash: Option<H256>,
+    pub(crate) block_hash: Option<H256>,
+    pub(crate) network_version_printed: Option<String>,
+}
+
+impl FoundExt {
+    pub(crate) fn init() -> Self {
+        Self {
+            era: None,
+            genesis_hash: None,
+            block_hash: None,
+            network_version_printed: None,
+        }
+    }
+}
+
+#[derive(Debug)]
+pub(crate) enum Hash {
+    GenesisHash,
+    BlockHash,
+}
+
+#[derive(Debug)]
+pub(crate) enum SpecialExt {
+    Era,
+    Nonce,
+    Tip,
+    SpecVersion,
+    TxVersion,
+    Hash(Hash),
+    None,
+}
+
+pub(crate) fn special_case_hash(
+    data: Vec<u8>,
+    found_ext: &mut FoundExt,
+    indent: u32,
+    short_specs: &ShortSpecs,
+    hash: &Hash,
+) -> Result<DecodedOut> {
+    match data.get(0..32) {
+        Some(a) => {
+            let decoded_hash = H256::from_slice(a);
+            let remaining_vector = data[32..].to_vec();
+            let fancy_out = match hash {
+                Hash::GenesisHash => {
+                    found_ext.genesis_hash = Some(decoded_hash);
+                    if decoded_hash != short_specs.genesis_hash {
+                        return Err(Error::Decoding(ParserDecodingError::GenesisHashMismatch));
+                    }
+                    Vec::new()
+                }
+                Hash::BlockHash => {
+                    found_ext.block_hash = Some(decoded_hash);
+                    vec![OutputCard {
+                        card: ParserCard::BlockHash(decoded_hash),
+                        indent,
+                    }]
+                }
+            };
+            Ok(DecodedOut {
+                remaining_vector,
+                fancy_out,
+            })
+        }
+        None => Err(Error::Decoding(ParserDecodingError::DataTooShort)),
+    }
+}
+
+pub(crate) fn special_case_era(
+    data: Vec<u8>,
+    found_ext: &mut FoundExt,
+    indent: u32,
+) -> Result<DecodedOut> {
+    let (era_data, remaining_vector) = match data.first() {
+        Some(0) => (data[0..1].to_vec(), data[1..].to_vec()),
+        Some(_) => match data.get(0..2) {
+            Some(a) => (a.to_vec(), data[2..].to_vec()),
+            None => return Err(Error::Decoding(ParserDecodingError::DataTooShort)),
+        },
+        None => return Err(Error::Decoding(ParserDecodingError::DataTooShort)),
+    };
+    match Era::decode(&mut &era_data[..]) {
+        Ok(a) => {
+            found_ext.era = Some(a);
+            Ok(DecodedOut {
+                remaining_vector,
+                fancy_out: vec![OutputCard {
+                    card: ParserCard::Era(a),
+                    indent,
+                }],
+            })
+        }
+        Err(_) => Err(Error::Decoding(ParserDecodingError::Era)),
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/error.rs.html b/rustdocs/src/parser/error.rs.html new file mode 100644 index 0000000000..c7632bda69 --- /dev/null +++ b/rustdocs/src/parser/error.rs.html @@ -0,0 +1,741 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+
use definitions::error::MetadataError;
+
+/// Parse error.
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error(transparent)]
+    Metadata(#[from] MetadataError),
+
+    #[error(transparent)]
+    DefinitionsError(#[from] definitions::error::Error),
+
+    #[error(transparent)]
+    Codec(#[from] parity_scale_codec::Error),
+
+    #[error("Can not separate method from extensions, bad transaction.")]
+    SeparateMethodExtensions,
+
+    /// Errors occurring during the decoding procedure.
+    #[error("Error parsing incoming transaction content. {0}")]
+    Decoding(#[from] ParserDecodingError),
+
+    /// Errors occurring because the metadata
+    /// [`RuntimeMetadataV14`](https://docs.rs/frame-metadata/15.0.0/frame_metadata/v14/struct.RuntimeMetadataV14.html)
+    /// has extensions not acceptable in existing safety paradigm for
+    /// signable transactions.
+    #[error(transparent)]
+    FundamentallyBadV14Metadata(#[from] ParserMetadataError),
+
+    /// While parsing transaction with certain version of network metadata,
+    /// found that the version found in signable extensions does not match
+    /// the version of the metadata used for parsing.
+    ///
+    /// Transaction parsing in Vault is done by consecutively checking all
+    /// available metadata for a given network name, starting with the highest
+    /// available version, and looking for a matching network version in the
+    /// parsed extensions.
+    ///
+    /// For `RuntimeMetadataV12` and `RuntimeMetadataV13` the extensions set
+    /// is a fixed one, whereas for `RuntimeMetadataV14` is may vary and is
+    /// determined by the metadata itself.
+    #[error(
+        "Network spec version decoded from extensions ({as_decoded}) \
+        differs from the version in metadata ({in_metadata})."
+    )]
+    WrongNetworkVersion {
+        /// metadata version from transaction extensions, as found through
+        /// parsing process
+        as_decoded: String,
+
+        /// metadata version actually used for parsing, from the `Version`
+        /// constant in `System` pallet of the metadata
+        in_metadata: u32,
+    },
+
+    //
+    #[error(
+        "Network name mismatch. In metadata: {name_metadata}, \
+        in network specs: {name_network_specs}"
+    )]
+    NetworkNameMismatch {
+        name_metadata: String,
+        name_network_specs: String,
+    },
+
+    #[error(
+        "Decoding transactions with metadata V12 and V13 uses pre-existing \
+        types info. Loaded default types info is empty."
+    )]
+    NoTypes,
+
+    #[error(
+        "Decoding transactions with metadata V12 and V13 uses \
+        pre-existing types info. Error generating default types info."
+    )]
+    DefaultTypes,
+}
+
+/// Parse result.
+pub type Result<T> = std::result::Result<T, Error>;
+
+#[derive(Debug, thiserror::Error)]
+pub enum ParserMetadataError {
+    #[error("metadata extensions have no era")]
+    NoEra,
+
+    #[error("metadata extensions have no block hash")]
+    NoBlockHash,
+
+    #[error("metadata extensions have no network metadata version")]
+    NoVersionExt,
+
+    #[error("metadata extensions have more than one era")]
+    EraTwice,
+
+    #[error("metadata extensions have more than one genesis hash")]
+    GenesisHashTwice,
+
+    #[error("metadata extensions have more than one block hash")]
+    BlockHashTwice,
+
+    #[error("metadata extensions have more than one network metadata version")]
+    SpecVersionTwice,
+}
+
+/// Errors directly related to transaction parsing
+///
+/// Signable transactions are differentiated based on prelude:
+///
+/// - `53xx00` mortal transactions
+/// - `53xx02` immortal transactions
+/// - `53xx03` text message transactions
+///
+/// `53xx00` and `53xx02` transactions contain encoded transaction data, and
+/// are parsed prior to signing using the network metadata. Transaction is
+/// generated in client, for certain address and within certain network.
+/// To parse the transaction and to generate the signature, Vault must
+/// have the network information (network specs and correct network metadata)
+/// and the public address-associated information in its database.
+///
+/// `53xx00` and `53xx02` transcations consist of:
+///
+/// - prelude, `53xx00` or `53xx02`, where `xx` stands for the encryption
+/// algorithm associated with address and network used
+/// - public key corresponding to the address that can sign the transaction
+/// - encoded call data, the body of the transaction
+/// - extensions, as set in the network metadata
+/// - genesis hash of the network in which the transaction was generated
+///
+/// Parsing process first separates the prelude, public key, genesis hash and
+/// the combined call + extensions data.
+///
+/// The call information is SCALE-encoded into `Vec<u8>` bytes and then those
+/// bytes are SCALE-encoded again, so that the call data contained in the
+/// transaction consists of `compact` with encoded call length in bytes
+/// followed by the `Vec<u8>` with the encoded data.
+///
+/// Call and extensions are cut based on the call length declared at the start
+/// of the combined call + extensions data.
+///
+/// Then the extensions are decoded, and it is checked that the metadata version
+/// in extensions coincides with the metadata version used for the decoding.
+///
+/// Decoding the extensions for metadata with `RuntimeMetadataV12` or
+/// `RuntimeMetadataV13` is using a static set of extensions, namely:
+///
+/// - [`Era`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/generic/enum.Era.html)
+/// - nonce, compact `u64`
+/// - transaction tip, compact `u128`
+/// - metadata version, `u32`
+/// - tx version, `u32`
+/// - network genesis hash, `[u8; 32]`
+/// - block hash, `[u8; 32]`
+///
+/// Decoding the extensions for metadata with `RuntimeMetadataV14` uses
+/// dynamically acquired set of extensions from the metadata itself.
+///
+/// After the extensions, the call data itself is decoded using the network
+/// metadata. Each call first byte is the index of the pallet.
+///
+/// Metadata with `RuntimeMetadataV12` or `RuntimeMetadataV13` has only type
+/// names associated with call arguments. Vault finds what the types really
+/// are and how to decode them by using the types information that must be in
+/// Vault database.
+/// For `RuntimeMetadataV12` or `RuntimeMetadataV13` the second byte in call is
+/// the index of the method within the pallet, and thes Vault finds the types
+/// used by the method and proceeds to decode the call data piece by piece.
+///
+/// Metadata with `RuntimeMetadataV14` has types data in-built in the metadata
+/// itself, and the types needed to decode the call are resolved during the
+/// decoding. For `RuntimeMetadataV14` the second byte in call is also
+/// the index of the method within the pallet, but this already goes into the
+/// type resolver.
+///
+/// Calls may contain nested calls, for `RuntimeMetadataV12` or
+/// `RuntimeMetadataV13` metadata the call decoding always starts with pallet
+/// and method combination processing. For `RuntimeMetadataV14` metadata the
+/// nested calls are processed through the type resolver, i.e. the pallet index
+/// is processed independently only on the start of the decoding.
+///
+/// `53xx03` transaction consists of:
+///
+/// - prelude `53xx03`, where `xx` stands for the encryption algorithm
+/// associated with address and network used
+/// - public key corresponding to the address that can sign the transaction
+/// - SCALE-encoded `String` contents of the message
+/// - genesis hash of the network in which the transaction was generated
+///
+/// Vault assumes that every byte of the transaction will be processed, and
+/// shows an error if this is not the case.
+#[derive(Debug, thiserror::Error)]
+pub enum ParserDecodingError {
+    /// Transaction was announced by the prelude to be mortal (`53xx00`),
+    /// but has `Era::Immortal` in extensions
+    #[error("Expected mortal transaction due to prelude format. Found immortal transaction.")]
+    UnexpectedImmortality,
+
+    /// Transaction was announced by the prelude to be immortal (`53xx02`),
+    /// but has `Era::Mortal(_, _)` in extensions
+    #[error("Expected immortal transaction due to prelude format. Found mortal transaction.")]
+    UnexpectedMortality,
+
+    /// Genesis hash cut from the end of the transaction does not match the one
+    /// found in the extensions
+    #[error(
+        "Genesis hash values from decoded extensions and from used network specs do not match."
+    )]
+    GenesisHashMismatch,
+
+    /// In immortal transaction the block hash from the extensions is the
+    /// network genesis hash.
+    ///
+    /// This error happens when block hash is different with the genesis hash
+    /// cut from the end of the transaction.
+    #[error("Block hash for immortal transaction not matching genesis hash for the network.")]
+    ImmortalHashMismatch,
+
+    /// Error decoding the extensions using metadata with `RuntimeMetadataV12`
+    /// or `RuntimeMetadataV13`, with default extensions set.
+    #[error("Unable to decode extensions for V12/V13 metadata using standard extensions set.")]
+    ExtensionsOlder,
+
+    /// Used only for `RuntimeMetadataV12` or `RuntimeMetadataV13`,
+    /// indicates that method index (second byte of the call data) is not valid
+    /// for the pallet with found name.
+    #[error("Method number {method_index} not found in pallet {pallet_name}.")]
+    MethodNotFound {
+        /// index of the method, second byte of the call data
+        method_index: u8,
+
+        /// name of the pallet, found from the first byte of the call data
+        pallet_name: String,
+    },
+
+    /// Used only for all calls in `RuntimeMetadataV12` or `RuntimeMetadataV13`,
+    /// and for entry call in `RuntimeMetadataV14` metadata. First byte of the
+    /// call data is not a valid pallet index.
+    ///
+    /// Associated data is what was thought to be a pallet index.
+    #[error("Pallet with index {0} not found.")]
+    PalletNotFound(u8),
+
+    /// Only for entry call in `RuntimeMetadataV14`. Pallet found via first byte
+    /// of the call has no associated calls.
+    ///
+    /// Associated data is the pallet name.
+    #[error("No calls found in pallet {0}.")]
+    NoCallsInPallet(String),
+
+    /// Only for `RuntimeMetadataV14`. Found type index could not be resolved
+    /// in types registry
+    #[error("Referenced type could not be resolved in v14 metadata.")]
+    V14TypeNotResolved,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`. Argument type
+    /// could not be taken out of `DecodeDifferent` construction.
+    #[error("Argument type error.")]
+    ArgumentTypeError,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`. Argument name
+    /// could not be taken out of `DecodeDifferent` construction.
+    #[error("Argument name error.")]
+    ArgumentNameError,
+
+    /// Parser was trying to find an encoded
+    /// [`compact`](https://docs.rs/parity-scale-codec/latest/parity_scale_codec/struct.Compact.html),
+    /// in the bytes sequence, but was unable to.
+    #[error("Expected compact. Not found it.")]
+    NoCompact,
+
+    /// Parser was expecting more data.
+    #[error("Data too short for expected content.")]
+    DataTooShort,
+
+    /// Parser was unable to decode the data piece into a primitive type.
+    ///
+    /// Associated data is primitive identifier.
+    #[error("Unable to decode part of data as {0}.")]
+    PrimitiveFailure(String),
+
+    /// SCALE-encoded `Option<_>` can have as a first byte:
+    ///
+    /// - `0` if the value is `None`
+    /// - `1` if the value is `Some`
+    /// - `2` if the value is `Some(false)` for `Option<bool>` encoding
+    ///
+    /// This error appears if the parser encounters something unexpected in the
+    /// first byte of encoded `Option<_>` instead.
+    #[error("Encountered unexpected Option<_> variant.")]
+    UnexpectedOptionVariant,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`.
+    /// Decoding
+    /// [`IdentityFields`](https://docs.substrate.io/rustdocs/latest/pallet_identity/struct.IdentityFields.html)
+    /// requires having correct type information for
+    /// [`IdentityField`](https://docs.substrate.io/rustdocs/latest/pallet_identity/enum.IdentityField.html)
+    /// in types information. If types information has no entry for
+    /// `IdentityFields` or it is not an enum, this error appears.
+    #[error("IdentityField description error.")]
+    IdFields,
+
+    /// Parser processes certain types as balance (i.e. transforms the data
+    /// into appropriate float using decimals and units provided).
+    /// For some types the balance representation is not possible, this error
+    /// occurs if the parser tried to process as a balance some type not
+    /// suitable for it.
+    #[error("Unexpected type encountered for Balance.")]
+    BalanceNotDescribed,
+
+    /// SCALE-encoded enum can have as a first byte only correct index of the
+    /// variant used.
+    ///
+    /// This error appears if the first byte is an invalid variant index.
+    #[error("Encountered unexpected enum variant.")]
+    UnexpectedEnumVariant,
+
+    /// Parser found that type declared as a
+    /// [`compact`](https://docs.rs/parity-scale-codec/latest/parity_scale_codec/struct.Compact.html)
+    /// has inner type that could not be encoded as a `compact`
+    #[error("Unexpected type inside comact.")]
+    UnexpectedCompactInsides,
+
+    /// Only for `RuntimeMetadataV12` and `RuntimeMetadataV13`.
+    /// Parser has encountered a type that could not be interpreted using the
+    /// existing types information.
+    ///
+    /// Associated data is the type description as it was received by parser
+    /// from the metadata.
+    #[error("No description found for type {0}.")]
+    UnknownType(String),
+
+    /// Only for `RuntimeMetadataV14`.
+    /// While decoding
+    /// [`BitVec<T,O>`](https://docs.rs/bitvec/1.0.0/bitvec/vec/struct.BitVec.html),
+    /// parser encountered `T` type not implementing
+    /// [`BitStore`](https://docs.rs/bitvec/1.0.0/bitvec/store/trait.BitStore.html).
+    #[error("Declared type is not suitable BitStore type for BitVec.")]
+    NotBitStoreType,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// While decoding
+    /// [`BitVec<T,O>`](https://docs.rs/bitvec/1.0.0/bitvec/vec/struct.BitVec.html),
+    /// parser encountered `O` type not implementing
+    /// [`BitOrder`](https://docs.rs/bitvec/1.0.0/bitvec/order/trait.BitOrder.html).
+    #[error("Declared type is not suitable BitOrder type for BitVec.")]
+    NotBitOrderType,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// Parser failed to decode
+    /// [`BitVec<T,O>`](https://docs.rs/bitvec/1.0.0/bitvec/vec/struct.BitVec.html),
+    /// even though `T` and `O` types were suitable.
+    #[error("Could not decode BitVec.")]
+    BitVecFailure,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// Parser failed to decode data slice as
+    /// [`Era`](https://docs.rs/sp-runtime/6.0.0/sp_runtime/generic/enum.Era.html).
+    #[error("Could not decode Era.")]
+    Era,
+
+    /// Parser expects to use all data in decoding. This error appears if some
+    /// data was not used in parsing of the method.
+    #[error("After decoding the method some data remained unused.")]
+    SomeDataNotUsedMethod,
+
+    /// Only for `RuntimeMetadataV14`.
+    /// Parser expects to use all data in decoding. This error appears if some
+    /// data from extensions is not used in the decoding.
+    #[error("After decoding the extensions some data remained unused.")]
+    SomeDataNotUsedExtensions,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/lib.rs.html b/rustdocs/src/parser/lib.rs.html new file mode 100644 index 0000000000..346465fee7 --- /dev/null +++ b/rustdocs/src/parser/lib.rs.html @@ -0,0 +1,513 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+
#![deny(rustdoc::broken_intra_doc_links)]
+
+use error::{ParserDecodingError, ParserMetadataError};
+use frame_metadata::v14::RuntimeMetadataV14;
+use parity_scale_codec::{Decode, DecodeAll, Encode};
+use printing_balance::convert_balance_pretty;
+use sp_core::H256;
+use sp_runtime::generic::Era;
+
+use definitions::{network_specs::ShortSpecs, types::TypeEntry};
+
+pub mod cards;
+use cards::ParserCard;
+mod decoding_older;
+use decoding_older::process_as_call;
+pub mod decoding_commons;
+use decoding_commons::{get_compact, OutputCard};
+mod decoding_sci;
+use decoding_sci::decoding_sci_entry_point;
+mod decoding_sci_ext;
+use decoding_sci_ext::{decode_ext_attempt, Ext};
+mod error;
+pub mod method;
+use method::OlderMeta;
+
+#[cfg(test)]
+mod tests;
+
+pub use error::{Error, Result};
+
+/// Function intakes SCALE encoded method part of transaction as `Vec<u8>`,
+/// network metadata and network specs.
+///
+pub fn parse_method(
+    method_data: Vec<u8>,
+    metadata_bundle: &MetadataBundle,
+    short_specs: &ShortSpecs,
+) -> Result<Vec<OutputCard>> {
+    let start_indent = 0;
+    let method_decoded = match metadata_bundle {
+        MetadataBundle::Older {
+            older_meta,
+            types,
+            network_version: _,
+        } => process_as_call(method_data, older_meta, types, start_indent, short_specs)?,
+        MetadataBundle::Sci {
+            meta_v14,
+            network_version: _,
+        } => decoding_sci_entry_point(method_data, meta_v14, start_indent, short_specs)?,
+    };
+    if !method_decoded.remaining_vector.is_empty() {
+        return Err(Error::Decoding(ParserDecodingError::SomeDataNotUsedMethod));
+    }
+    Ok(method_decoded.fancy_out)
+}
+
+/// Struct to decode pre-determined extensions for transactions with `V12` and `V13` metadata
+#[derive(Debug, Decode, Encode)]
+struct ExtValues {
+    era: Era,
+    #[codec(compact)]
+    nonce: u64,
+    #[codec(compact)]
+    tip: u128,
+    metadata_version: u32,
+    tx_version: u32,
+    genesis_hash: H256,
+    block_hash: H256,
+}
+
+pub fn parse_extensions(
+    extensions_data: Vec<u8>,
+    metadata_bundle: &MetadataBundle,
+    short_specs: &ShortSpecs,
+    optional_mortal_flag: Option<bool>,
+) -> Result<Vec<OutputCard>> {
+    let indent = 0;
+    let (era, block_hash, cards) = match metadata_bundle {
+        MetadataBundle::Older {
+            older_meta: _,
+            types: _,
+            network_version,
+        } => {
+            let ext = match <ExtValues>::decode_all(&mut &extensions_data[..]) {
+                Ok(a) => a,
+                Err(_) => return Err(Error::Decoding(ParserDecodingError::ExtensionsOlder)),
+            };
+            if ext.genesis_hash != short_specs.genesis_hash {
+                return Err(Error::Decoding(ParserDecodingError::GenesisHashMismatch));
+            }
+            if network_version != &ext.metadata_version {
+                return Err(Error::WrongNetworkVersion {
+                    as_decoded: ext.metadata_version.to_string(),
+                    in_metadata: network_version.to_owned(),
+                });
+            }
+            let tip = convert_balance_pretty(
+                &ext.tip.to_string(),
+                short_specs.decimals,
+                &short_specs.unit,
+            );
+            let cards = vec![
+                OutputCard {
+                    card: ParserCard::Era(ext.era),
+                    indent,
+                },
+                OutputCard {
+                    card: ParserCard::Nonce(ext.nonce.to_string()),
+                    indent,
+                },
+                OutputCard {
+                    card: ParserCard::Tip {
+                        number: tip.number.to_string(),
+                        units: tip.units,
+                    },
+                    indent,
+                },
+                OutputCard {
+                    card: ParserCard::NetworkNameVersion {
+                        name: short_specs.name.to_string(),
+                        version: network_version.to_string(),
+                    },
+                    indent,
+                },
+                OutputCard {
+                    card: ParserCard::TxVersion(ext.tx_version.to_string()),
+                    indent,
+                },
+                OutputCard {
+                    card: ParserCard::BlockHash(ext.block_hash),
+                    indent,
+                },
+            ];
+            (ext.era, ext.block_hash, cards)
+        }
+        MetadataBundle::Sci {
+            meta_v14,
+            network_version,
+        } => {
+            let mut ext = Ext::init();
+            let extensions_decoded =
+                decode_ext_attempt(&extensions_data, &mut ext, meta_v14, indent, short_specs)?;
+            if let Some(genesis_hash) = ext.found_ext.genesis_hash {
+                if genesis_hash != short_specs.genesis_hash {
+                    return Err(Error::Decoding(ParserDecodingError::GenesisHashMismatch));
+                }
+            }
+            let block_hash = match ext.found_ext.block_hash {
+                Some(a) => a,
+                None => {
+                    return Err(Error::FundamentallyBadV14Metadata(
+                        ParserMetadataError::NoBlockHash,
+                    ))
+                }
+            };
+            let era = match ext.found_ext.era {
+                Some(a) => a,
+                None => {
+                    return Err(Error::FundamentallyBadV14Metadata(
+                        ParserMetadataError::NoEra,
+                    ))
+                }
+            };
+            match ext.found_ext.network_version_printed {
+                Some(a) => {
+                    if a != network_version.to_string() {
+                        return Err(Error::WrongNetworkVersion {
+                            as_decoded: a,
+                            in_metadata: network_version.to_owned(),
+                        });
+                    }
+                }
+                None => {
+                    return Err(Error::FundamentallyBadV14Metadata(
+                        ParserMetadataError::NoVersionExt,
+                    ))
+                }
+            }
+            if !extensions_decoded.remaining_vector.is_empty() {
+                return Err(Error::Decoding(
+                    ParserDecodingError::SomeDataNotUsedExtensions,
+                ));
+            }
+            (era, block_hash, extensions_decoded.fancy_out)
+        }
+    };
+    if let Era::Immortal = era {
+        if short_specs.genesis_hash != block_hash {
+            return Err(Error::Decoding(ParserDecodingError::ImmortalHashMismatch));
+        }
+        if let Some(true) = optional_mortal_flag {
+            return Err(Error::Decoding(ParserDecodingError::UnexpectedImmortality));
+        }
+    }
+    if let Era::Mortal(_, _) = era {
+        if let Some(false) = optional_mortal_flag {
+            return Err(Error::Decoding(ParserDecodingError::UnexpectedMortality));
+        }
+    }
+    Ok(cards)
+}
+
+pub fn cut_method_extensions(data: &[u8]) -> Result<(Vec<u8>, Vec<u8>)> {
+    let pre_method = get_compact::<u32>(data).map_err(|_| Error::SeparateMethodExtensions)?;
+    let method_length = pre_method.compact_found as usize;
+    match pre_method.start_next_unit {
+        Some(start) => match data.get(start..start + method_length) {
+            Some(a) => Ok((a.to_vec(), data[start + method_length..].to_vec())),
+            None => Err(Error::SeparateMethodExtensions),
+        },
+        None => {
+            if method_length != 0 {
+                return Err(Error::SeparateMethodExtensions);
+            }
+            Ok((Vec::new(), data.to_vec()))
+        }
+    }
+}
+
+#[allow(clippy::type_complexity)]
+pub fn parse_set(
+    data: &[u8],
+    metadata_bundle: &MetadataBundle,
+    short_specs: &ShortSpecs,
+    optional_mortal_flag: Option<bool>,
+) -> Result<(Result<Vec<OutputCard>>, Vec<OutputCard>, Vec<u8>, Vec<u8>)> {
+    // if unable to separate method date and extensions, then some fundamental flaw is in transaction itself
+    let (method_data, extensions_data) = cut_method_extensions(data)?;
+
+    // try parsing extensions, if is works, the version and extensions are correct
+    let extensions_cards = parse_extensions(
+        extensions_data.to_vec(),
+        metadata_bundle,
+        short_specs,
+        optional_mortal_flag,
+    )?;
+    let method_cards_result = parse_method(method_data.to_vec(), metadata_bundle, short_specs);
+    Ok((
+        method_cards_result,
+        extensions_cards,
+        method_data,
+        extensions_data,
+    ))
+}
+
+pub enum MetadataBundle<'a> {
+    Older {
+        older_meta: OlderMeta<'a>,
+        types: Vec<TypeEntry>,
+        network_version: u32,
+    },
+    Sci {
+        meta_v14: &'a RuntimeMetadataV14,
+        network_version: u32,
+    },
+}
+
\ No newline at end of file diff --git a/rustdocs/src/parser/method.rs.html b/rustdocs/src/parser/method.rs.html new file mode 100644 index 0000000000..b57417411e --- /dev/null +++ b/rustdocs/src/parser/method.rs.html @@ -0,0 +1,497 @@ +method.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+
use frame_metadata::{
+    decode_different::DecodeDifferent, v12::RuntimeMetadataV12, v13::RuntimeMetadataV13,
+};
+
+use crate::error::{Error, ParserDecodingError, Result};
+
+/// Struct to store the method information
+pub(crate) struct MethodOld {
+    pub(crate) pallet_name: String,
+    pub(crate) method_name: String,
+    pub(crate) arguments: Vec<Argument>,
+    pub(crate) docs: String,
+}
+
+/// Struct to store the argument name and type
+pub(crate) struct Argument {
+    pub(crate) name: String,
+    pub(crate) ty: String,
+}
+
+/// Struct to store current method and remaining data
+pub(crate) struct NextDecodeOld {
+    pub(crate) method: MethodOld,
+    pub(crate) data: Vec<u8>,
+}
+
+/// Enum to transfer around older metadata (`V12` and `V13`)
+pub enum OlderMeta<'a> {
+    V12(&'a RuntimeMetadataV12),
+    V13(&'a RuntimeMetadataV13),
+}
+
+/// Function to search through metadata version `V12` for method with given pallet index and method index,
+/// in case of success outputs Method value.
+/// Pallet index is explicitly recorded in network metadata as a number.
+/// Method index is ordinal number in vector of calls within pallet.
+
+fn find_method_v12(
+    pallet_index: u8,
+    method_index: u8,
+    meta: &RuntimeMetadataV12,
+) -> Result<MethodOld> {
+    let mut found_pallet_name = None;
+    let mut found_method_name = None;
+    let mut docs = String::new();
+    let mut arguments: Vec<Argument> = Vec::new();
+
+    if let DecodeDifferent::Decoded(meta_vector) = &meta.modules {
+        for y in meta_vector.iter() {
+            if y.index == pallet_index {
+                if let DecodeDifferent::Decoded(name) = &y.name {
+                    found_pallet_name = Some(name.to_string());
+                    if let Some(DecodeDifferent::Decoded(calls)) = &y.calls {
+                        if calls.len() <= method_index.into() {
+                            return Err(Error::Decoding(ParserDecodingError::MethodNotFound {
+                                method_index,
+                                pallet_name: name.to_string(),
+                            }));
+                        }
+                        if let DecodeDifferent::Decoded(nm) = &calls[method_index as usize].name {
+                            found_method_name = Some(nm.to_string());
+                        }
+                        if let DecodeDifferent::Decoded(docs_found) =
+                            &calls[method_index as usize].documentation
+                        {
+                            for (i, a) in docs_found.iter().enumerate() {
+                                if i > 0 {
+                                    docs.push('\n');
+                                }
+                                docs.push_str(a);
+                            }
+                        }
+                        if let DecodeDifferent::Decoded(args) =
+                            &calls[method_index as usize].arguments
+                        {
+                            for a in args.iter() {
+                                let mut name_a = None;
+                                let mut ty_a = None;
+                                if let DecodeDifferent::Decoded(b) = &a.name {
+                                    name_a = Some(b.to_string())
+                                }
+                                if let DecodeDifferent::Decoded(c) = &a.ty {
+                                    ty_a = Some(c.to_string())
+                                }
+                                match name_a {
+                                    Some(x) => match ty_a {
+                                        Some(y) => {
+                                            arguments.push(Argument { name: x, ty: y });
+                                        }
+                                        None => {
+                                            return Err(Error::Decoding(
+                                                ParserDecodingError::ArgumentTypeError,
+                                            ))
+                                        }
+                                    },
+                                    None => {
+                                        return Err(Error::Decoding(
+                                            ParserDecodingError::ArgumentNameError,
+                                        ))
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                break;
+            }
+        }
+    }
+    match found_pallet_name {
+        Some(x) => match found_method_name {
+            Some(y) => {
+                let out = MethodOld {
+                    pallet_name: x,
+                    method_name: y,
+                    arguments,
+                    docs,
+                };
+                Ok(out)
+            }
+            None => Err(Error::Decoding(ParserDecodingError::MethodNotFound {
+                method_index,
+                pallet_name: x,
+            })),
+        },
+        None => Err(Error::Decoding(ParserDecodingError::PalletNotFound(
+            pallet_index,
+        ))),
+    }
+}
+
+/// Function to search through metadata version `V13` for method with given pallet index and method index,
+/// in case of success outputs Method value.
+/// Pallet index is explicitly recorded in network metadata as a number.
+/// Method index is ordinal number in vector of calls within pallet.
+
+fn find_method_v13(
+    pallet_index: u8,
+    method_index: u8,
+    meta: &RuntimeMetadataV13,
+) -> Result<MethodOld> {
+    let mut found_pallet_name = None;
+    let mut found_method_name = None;
+    let mut docs = String::new();
+    let mut arguments: Vec<Argument> = Vec::new();
+
+    if let DecodeDifferent::Decoded(meta_vector) = &meta.modules {
+        for y in meta_vector.iter() {
+            if y.index == pallet_index {
+                if let DecodeDifferent::Decoded(name) = &y.name {
+                    found_pallet_name = Some(name.to_string());
+                    if let Some(DecodeDifferent::Decoded(calls)) = &y.calls {
+                        if calls.len() <= method_index.into() {
+                            return Err(Error::Decoding(ParserDecodingError::MethodNotFound {
+                                method_index,
+                                pallet_name: name.to_string(),
+                            }));
+                        }
+                        if let DecodeDifferent::Decoded(nm) = &calls[method_index as usize].name {
+                            found_method_name = Some(nm.to_string());
+                        }
+                        if let DecodeDifferent::Decoded(docs_found) =
+                            &calls[method_index as usize].documentation
+                        {
+                            for (i, a) in docs_found.iter().enumerate() {
+                                if i > 0 {
+                                    docs.push('\n');
+                                }
+                                docs.push_str(a);
+                            }
+                        }
+                        if let DecodeDifferent::Decoded(args) =
+                            &calls[method_index as usize].arguments
+                        {
+                            for a in args.iter() {
+                                let mut name_a = None;
+                                let mut ty_a = None;
+                                if let DecodeDifferent::Decoded(b) = &a.name {
+                                    name_a = Some(b.to_string())
+                                }
+                                if let DecodeDifferent::Decoded(c) = &a.ty {
+                                    ty_a = Some(c.to_string())
+                                }
+                                match name_a {
+                                    Some(x) => match ty_a {
+                                        Some(y) => {
+                                            arguments.push(Argument { name: x, ty: y });
+                                        }
+                                        None => {
+                                            return Err(Error::Decoding(
+                                                ParserDecodingError::ArgumentTypeError,
+                                            ))
+                                        }
+                                    },
+                                    None => {
+                                        return Err(Error::Decoding(
+                                            ParserDecodingError::ArgumentNameError,
+                                        ))
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                break;
+            }
+        }
+    }
+    match found_pallet_name {
+        Some(x) => match found_method_name {
+            Some(y) => {
+                let out = MethodOld {
+                    pallet_name: x,
+                    method_name: y,
+                    arguments,
+                    docs,
+                };
+                Ok(out)
+            }
+            None => Err(Error::Decoding(ParserDecodingError::MethodNotFound {
+                method_index,
+                pallet_name: x,
+            })),
+        },
+        None => Err(Error::Decoding(ParserDecodingError::PalletNotFound(
+            pallet_index,
+        ))),
+    }
+}
+
+/// Function to find method for current call for metadata in `V12` or `V13`
+/// Outputs `NextDecode` value.
+
+pub(crate) fn what_next_old(data: Vec<u8>, meta: &OlderMeta) -> Result<NextDecodeOld> {
+    if data.len() < 2 {
+        return Err(Error::Decoding(ParserDecodingError::DataTooShort));
+    }
+    let pallet_index = data[0];
+    let method_index = data[1];
+    let method = match meta {
+        OlderMeta::V12(meta_v12) => find_method_v12(pallet_index, method_index, meta_v12)?,
+        OlderMeta::V13(meta_v13) => find_method_v13(pallet_index, method_index, meta_v13)?,
+    };
+    Ok(NextDecodeOld {
+        method,
+        data: data[2..].to_vec(),
+    })
+}
+
\ No newline at end of file diff --git a/rustdocs/src/printing_balance/lib.rs.html b/rustdocs/src/printing_balance/lib.rs.html new file mode 100644 index 0000000000..396892b75a --- /dev/null +++ b/rustdocs/src/printing_balance/lib.rs.html @@ -0,0 +1,933 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+
#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+struct CutNumber {
+    before_point: String,
+    after_point: Option<String>,
+    mag: i8,
+}
+
+pub struct PrettyOutput {
+    pub number: String,
+    pub units: String,
+}
+
+const MINUS_MIN: u8 = 6;
+const PLUS_MAX: u8 = 4;
+
+fn assist(a: String, decimals: u8, order: u8) -> (String, Option<String>, i8) {
+    let t = decimals - order - MINUS_MIN * 3 - 1;
+    let mut out = String::new();
+    for _i in 0..t {
+        out.push('0');
+    }
+    out.push_str(&a);
+    (String::from("0"), Some(out), MINUS_MIN as i8)
+}
+
+/// Input `balance` has to be a printed number. Likely `u128` or `u64`.
+/// Validity of input is checked elsewhere.
+
+pub fn convert_balance_pretty(balance: &str, decimals: u8, units: &str) -> PrettyOutput {
+    let order = (balance.len() as u8) - 1;
+
+    let transformed_number = match order {
+        0 => {
+            if balance == "0" {
+                let (before_point, after_point, mag) = {
+                    if decimals <= MINUS_MIN * 3 {
+                        match decimals % 3 {
+                            0 => (balance.to_string(), None, (decimals / 3) as i8),
+                            1 => (
+                                balance.to_string(),
+                                Some(String::from("0")),
+                                (decimals / 3) as i8,
+                            ),
+                            2 => (
+                                balance.to_string(),
+                                Some(String::from("00")),
+                                (decimals / 3) as i8,
+                            ),
+                            _ => unreachable!(),
+                        }
+                    } else {
+                        assist(balance.to_string(), decimals, order)
+                    }
+                };
+                CutNumber {
+                    before_point,
+                    after_point,
+                    mag,
+                }
+            } else {
+                let (before_point, after_point, mag) = {
+                    if decimals <= MINUS_MIN * 3 {
+                        match decimals % 3 {
+                            0 => (balance.to_string(), None, (decimals / 3) as i8),
+                            1 => (format!("{balance}00"), None, (decimals / 3) as i8 + 1),
+                            2 => (format!("{balance}0"), None, (decimals / 3) as i8 + 1),
+                            _ => unreachable!(),
+                        }
+                    } else {
+                        assist(balance.to_string(), decimals, order)
+                    }
+                };
+                CutNumber {
+                    before_point,
+                    after_point,
+                    mag,
+                }
+            }
+        }
+        1 => {
+            let (before_point, after_point, mag) = {
+                if order <= decimals {
+                    if (decimals - order) <= MINUS_MIN * 3 {
+                        match (decimals + 2) % 3 {
+                            0 => (
+                                balance[..1].to_string(),
+                                Some(balance[1..].to_string()),
+                                (decimals / 3) as i8,
+                            ),
+                            1 => (format!("{balance}0"), None, (decimals / 3) as i8 + 1),
+                            2 => (balance.to_string(), None, (decimals / 3) as i8),
+                            _ => unreachable!(),
+                        }
+                    } else {
+                        assist(balance.to_string(), decimals, order)
+                    }
+                } else {
+                    (balance.to_string(), None, 0)
+                }
+            };
+            CutNumber {
+                before_point,
+                after_point,
+                mag,
+            }
+        }
+        2 => {
+            let (before_point, after_point, mag) = {
+                if order <= decimals {
+                    if (decimals - order) <= MINUS_MIN * 3 {
+                        match (decimals + 1) % 3 {
+                            0 => (
+                                balance[..1].to_string(),
+                                Some(balance[1..].to_string()),
+                                (decimals / 3) as i8,
+                            ),
+                            1 => (balance.to_string(), None, (decimals / 3) as i8),
+                            2 => (
+                                balance[..2].to_string(),
+                                Some(balance[2..].to_string()),
+                                (decimals / 3) as i8,
+                            ),
+                            _ => unreachable!(),
+                        }
+                    } else {
+                        assist(balance.to_string(), decimals, order)
+                    }
+                } else if decimals == 0 {
+                    (balance.to_string(), None, 0)
+                } else {
+                    (balance[..2].to_string(), Some(balance[2..].to_string()), 0)
+                }
+            };
+            CutNumber {
+                before_point,
+                after_point,
+                mag,
+            }
+        }
+        _ => {
+            if order <= decimals {
+                let length = {
+                    if (decimals - order) <= MINUS_MIN * 3 {
+                        match (decimals - order) % 3 {
+                            0 => order as usize,
+                            1 => (order - 2) as usize,
+                            _ => (order - 1) as usize,
+                        }
+                    } else {
+                        (decimals - MINUS_MIN * 3) as usize
+                    }
+                };
+                let before_point = balance[..balance.len() - length].to_string();
+                let after_point = Some(balance[balance.len() - length..].to_string());
+                let mag = {
+                    if (decimals - order) <= MINUS_MIN * 3 {
+                        match (decimals - order) % 3 {
+                            0 => ((decimals - order) / 3) as i8,
+                            _ => ((decimals - order) / 3) as i8 + 1,
+                        }
+                    } else {
+                        MINUS_MIN as i8
+                    }
+                };
+                CutNumber {
+                    before_point,
+                    after_point,
+                    mag,
+                }
+            } else {
+                let num = (order - decimals) % 3;
+                let length = {
+                    if (order - decimals) <= (PLUS_MAX * 3) {
+                        (order - num) as usize
+                    } else {
+                        (PLUS_MAX * 3 - decimals) as usize
+                    }
+                };
+                let before_point = balance[..balance.len() - length].to_string();
+                let after_point = Some(balance[balance.len() - length..].to_string());
+                let mag = {
+                    if (order - decimals) <= (PLUS_MAX * 3) {
+                        -(((order - decimals) as i8) / 3)
+                    } else {
+                        -(PLUS_MAX as i8)
+                    }
+                };
+                CutNumber {
+                    before_point,
+                    after_point,
+                    mag,
+                }
+            }
+        }
+    };
+    let unit_prefix = match transformed_number.mag {
+        -4 => "T",
+        -3 => "G",
+        -2 => "M",
+        -1 => "k",
+        0 => "",
+        1 => "m",
+        2 => "u",
+        3 => "n",
+        4 => "p",
+        5 => "f",
+        6 => "a",
+        _ => unreachable!(),
+    };
+
+    let number = match transformed_number.after_point {
+        Some(x) => format!("{}.{}", transformed_number.before_point, x),
+        None => transformed_number.before_point.to_string(),
+    };
+
+    PrettyOutput {
+        number,
+        units: format!("{unit_prefix}{units}"),
+    }
+}
+
+pub fn print_pretty_test(balance: u128, decimals: u8, units: &str) -> String {
+    let out = convert_balance_pretty(&balance.to_string(), decimals, units);
+    format!("{} {}", out.number, out.units)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test01() {
+        let try_me = print_pretty_test(0, 0, "X");
+        assert_eq!(try_me, "0 X");
+    }
+
+    #[test]
+    fn test02() {
+        let try_me = print_pretty_test(0, 1, "X");
+        assert_eq!(try_me, "0.0 X");
+    }
+
+    #[test]
+    fn test03() {
+        let try_me = print_pretty_test(0, 2, "X");
+        assert_eq!(try_me, "0.00 X");
+    }
+
+    #[test]
+    fn test04() {
+        let try_me = print_pretty_test(0xffffffffffffffffffffffffffffffff, 0, "X");
+        assert_eq!(try_me, "340282366920938463463374607.431768211455 TX");
+    }
+
+    #[test]
+    fn test05() {
+        let try_me = print_pretty_test(0, 20, "X");
+        assert_eq!(try_me, "0.00 aX");
+    }
+
+    #[test]
+    fn test06() {
+        let try_me = print_pretty_test(0, 24, "X");
+        assert_eq!(try_me, "0.000000 aX");
+    }
+
+    #[test]
+    fn test07() {
+        let try_me = print_pretty_test(0, 3, "X");
+        assert_eq!(try_me, "0 mX");
+    }
+
+    #[test]
+    fn test08() {
+        let try_me = print_pretty_test(0, 4, "X");
+        assert_eq!(try_me, "0.0 mX");
+    }
+
+    #[test]
+    fn test09() {
+        let try_me = print_pretty_test(1, 0, "X");
+        assert_eq!(try_me, "1 X");
+    }
+
+    #[test]
+    fn test10() {
+        let try_me = print_pretty_test(12, 0, "X");
+        assert_eq!(try_me, "12 X");
+    }
+
+    #[test]
+    fn test11() {
+        let try_me = print_pretty_test(123, 0, "X");
+        assert_eq!(try_me, "123 X");
+    }
+
+    #[test]
+    fn test12() {
+        let try_me = print_pretty_test(123, 1, "X");
+        assert_eq!(try_me, "12.3 X");
+    }
+
+    #[test]
+    fn test13() {
+        let try_me = print_pretty_test(123, 2, "X");
+        assert_eq!(try_me, "1.23 X");
+    }
+
+    #[test]
+    fn test14() {
+        let try_me = print_pretty_test(1, 1, "X");
+        assert_eq!(try_me, "100 mX");
+    }
+
+    #[test]
+    fn test15() {
+        let try_me = print_pretty_test(1, 2, "X");
+        assert_eq!(try_me, "10 mX");
+    }
+
+    #[test]
+    fn test16() {
+        let try_me = print_pretty_test(1, 3, "X");
+        assert_eq!(try_me, "1 mX");
+    }
+
+    #[test]
+    fn test17() {
+        let try_me = print_pretty_test(1, 4, "X");
+        assert_eq!(try_me, "100 uX");
+    }
+
+    #[test]
+    fn test18() {
+        let try_me = print_pretty_test(12, 1, "X");
+        assert_eq!(try_me, "1.2 X");
+    }
+
+    #[test]
+    fn test19() {
+        let try_me = print_pretty_test(12, 2, "X");
+        assert_eq!(try_me, "120 mX");
+    }
+
+    #[test]
+    fn test20() {
+        let try_me = print_pretty_test(12, 3, "X");
+        assert_eq!(try_me, "12 mX");
+    }
+
+    #[test]
+    fn test21() {
+        let try_me = print_pretty_test(12, 4, "X");
+        assert_eq!(try_me, "1.2 mX");
+    }
+
+    #[test]
+    fn test22() {
+        let try_me = print_pretty_test(123, 1, "X");
+        assert_eq!(try_me, "12.3 X");
+    }
+
+    #[test]
+    fn test23() {
+        let try_me = print_pretty_test(123, 2, "X");
+        assert_eq!(try_me, "1.23 X");
+    }
+
+    #[test]
+    fn test24() {
+        let try_me = print_pretty_test(123, 3, "X");
+        assert_eq!(try_me, "123 mX");
+    }
+
+    #[test]
+    fn test25() {
+        let try_me = print_pretty_test(123, 4, "X");
+        assert_eq!(try_me, "12.3 mX");
+    }
+
+    #[test]
+    fn test26() {
+        let try_me = print_pretty_test(1, 40, "X");
+        assert_eq!(try_me, "0.0000000000000000000001 aX");
+    }
+
+    #[test]
+    fn test27() {
+        let try_me = print_pretty_test(12345, 21, "X");
+        assert_eq!(try_me, "12.345 aX");
+    }
+
+    #[test]
+    fn test28() {
+        let try_me = print_pretty_test(12345, 18, "X");
+        assert_eq!(try_me, "12.345 fX");
+    }
+
+    #[test]
+    fn test29() {
+        let try_me = print_pretty_test(12345, 15, "X");
+        assert_eq!(try_me, "12.345 pX");
+    }
+
+    #[test]
+    fn test30() {
+        let try_me = print_pretty_test(12345, 12, "X");
+        assert_eq!(try_me, "12.345 nX");
+    }
+
+    #[test]
+    fn test31() {
+        let try_me = print_pretty_test(12345, 9, "X");
+        assert_eq!(try_me, "12.345 uX");
+    }
+
+    #[test]
+    fn test32() {
+        let try_me = print_pretty_test(12345, 6, "X");
+        assert_eq!(try_me, "12.345 mX");
+    }
+
+    #[test]
+    fn test33() {
+        let try_me = print_pretty_test(12345, 10, "X");
+        assert_eq!(try_me, "1.2345 uX");
+    }
+
+    #[test]
+    fn test34() {
+        let try_me = print_pretty_test(12345, 3, "X");
+        assert_eq!(try_me, "12.345 X");
+    }
+
+    #[test]
+    fn test35() {
+        let try_me = print_pretty_test(12345, 0, "X");
+        assert_eq!(try_me, "12.345 kX");
+    }
+
+    #[test]
+    fn test36() {
+        let try_me = print_pretty_test(123450000, 0, "X");
+        assert_eq!(try_me, "123.450000 MX");
+    }
+
+    #[test]
+    fn test37() {
+        let try_me = print_pretty_test(1234500000, 0, "X");
+        assert_eq!(try_me, "1.234500000 GX");
+    }
+
+    #[test]
+    fn test38() {
+        let try_me = print_pretty_test(1234500000000, 0, "X");
+        assert_eq!(try_me, "1.234500000000 TX");
+    }
+
+    #[test]
+    fn test39() {
+        let try_me = print_pretty_test(10000000000000001, 0, "X");
+        assert_eq!(try_me, "10000.000000000001 TX");
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/qr_reader_pc/lib.rs.html b/rustdocs/src/qr_reader_pc/lib.rs.html new file mode 100644 index 0000000000..68f9943d13 --- /dev/null +++ b/rustdocs/src/qr_reader_pc/lib.rs.html @@ -0,0 +1,459 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+
#![deny(unused_crate_dependencies)]
+#![deny(missing_docs)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+//! # QR reader crate for PC
+//!
+//! `qr_reader_pc` is a utility to capture (via webcam) QR codes from Vault
+//! and extracting data from it.
+
+use anyhow::anyhow;
+use image::{GrayImage, ImageBuffer, Luma};
+use indicatif::ProgressBar;
+use qr_reader_phone::process_payload::{process_decoded_payload, InProgress, Ready};
+
+use opencv::{
+    highgui,
+    imgproc::{cvt_color, COLOR_BGR2GRAY},
+    prelude::*,
+    videoio,
+    videoio::{CAP_PROP_FRAME_HEIGHT, CAP_PROP_FRAME_WIDTH},
+    Result,
+};
+
+// Default camera settings
+const DEFAULT_WIDTH: u32 = 640;
+const DEFAULT_HEIGHT: u32 = 480;
+const MAX_CAMERA_INDEX: i32 = 6;
+const SKIPPED_FRAMES_QTY: u32 = 10;
+
+/// Structure for storing camera settings.
+#[derive(Debug)]
+pub struct CameraSettings {
+    /// Camera index
+    pub index: Option<i32>,
+}
+
+/// Main cycle of video capture.
+/// Returns a string with decoded QR message in HEX format or error.
+///
+/// # Arguments
+///
+/// * `camera_settings` - `CameraSettings` struct that holds the camera parameters
+pub fn run_with_camera(camera_settings: CameraSettings) -> anyhow::Result<String> {
+    let camera_index = match camera_settings.index {
+        Some(index) => index,
+        None => return Err(anyhow!("There is no camera index.")),
+    };
+
+    let window = "video capture";
+    highgui::named_window(window, 1)?;
+
+    let mut camera = create_camera(camera_index, DEFAULT_WIDTH, DEFAULT_HEIGHT)?;
+    skip_frames(&mut camera); // clearing old frames if they are in the camera buffer
+
+    let mut out = Ready::NotYet(InProgress::None);
+    let mut line = String::new();
+
+    let pb = ProgressBar::new(1);
+    loop {
+        match out {
+            Ready::NotYet(decoding) => {
+                if let InProgress::Fountain(f) = &decoding {
+                    pb.set_length(f.total as u64);
+                    pb.set_position(f.collected() as u64)
+                }
+                out = match camera_capture(&mut camera, window) {
+                    Ok(img) => process_qr_image(&img, decoding)?,
+                    Err(_) => Ready::NotYet(decoding),
+                };
+            }
+            Ready::Yes(a) => {
+                line.push_str(&hex::encode(a));
+                break;
+            }
+            _ => todo!(),
+        }
+
+        if highgui::wait_key(10)? > 0 {
+            println!("Exit");
+            break;
+        };
+    }
+    highgui::destroy_window(window)?;
+    Ok(line)
+}
+
+fn create_camera(
+    camera_index: i32,
+    width: u32,
+    height: u32,
+) -> anyhow::Result<videoio::VideoCapture> {
+    #[cfg(ocvrs_opencv_branch_32)]
+    let mut camera = videoio::VideoCapture::new_default(camera_index)?;
+    #[cfg(not(ocvrs_opencv_branch_32))]
+    let mut camera = videoio::VideoCapture::new(camera_index, videoio::CAP_ANY)?;
+
+    match videoio::VideoCapture::is_opened(&camera) {
+        Ok(opened) if opened => {
+            camera.set(CAP_PROP_FRAME_WIDTH, width.into())?;
+            camera.set(CAP_PROP_FRAME_HEIGHT, height.into())?;
+        }
+        Ok(_) => return Err(anyhow!("Camera already opened.")),
+        Err(e) => return Err(anyhow!("Can`t open camera. {}", e)),
+    };
+
+    let mut frame = Mat::default();
+
+    match camera.read(&mut frame) {
+        Ok(_) if frame.size()?.width > 0 => Ok(camera),
+        Ok(_) => Err(anyhow!("Zero frame size.")),
+        Err(e) => Err(anyhow!("Can`t read camera. {}", e)),
+    }
+}
+
+fn camera_capture(camera: &mut videoio::VideoCapture, window: &str) -> Result<GrayImage> {
+    let mut frame = Mat::default();
+    camera.read(&mut frame)?;
+
+    if frame.size()?.width > 0 {
+        highgui::imshow(window, &frame)?;
+    };
+
+    let mut image: GrayImage = ImageBuffer::new(DEFAULT_WIDTH, DEFAULT_HEIGHT);
+    let mut ocv_gray_image = Mat::default();
+
+    cvt_color(&frame, &mut ocv_gray_image, COLOR_BGR2GRAY, 0)?;
+
+    for y in 0..ocv_gray_image.rows() {
+        for x in 0..ocv_gray_image.cols() {
+            let pixel: Luma<u8> = Luma([*ocv_gray_image.at_2d(y, x)?]);
+            image.put_pixel(x as u32, y as u32, pixel);
+        }
+    }
+
+    Ok(image)
+}
+
+/// Function for decoding QR grayscale image.
+/// Returns a string with decoded QR message in HEX format or error.
+///
+/// # Arguments
+///
+/// * `image` - Grayscale image containing QR and background
+/// * `decoding` - Stores accumulated payload data for animated QR.
+pub fn process_qr_image(image: &GrayImage, decoding: InProgress) -> anyhow::Result<Ready> {
+    let mut qr_decoder = quircs::Quirc::new();
+    let codes = qr_decoder.identify(image.width() as usize, image.height() as usize, image);
+
+    match codes.last() {
+        Some(Ok(code)) => match code.decode() {
+            Ok(decoded) => process_decoded_payload(decoded.payload, &None, decoding)
+                .map_err(|e| anyhow!(e.to_string())),
+            Err(_) => Ok(Ready::NotYet(decoding)),
+        },
+        Some(_) => Ok(Ready::NotYet(decoding)),
+        None => Ok(Ready::NotYet(decoding)),
+    }
+}
+
+fn print_list_of_cameras() {
+    let mut indexes: Vec<i32> = vec![];
+    for dev_port in 0..=MAX_CAMERA_INDEX {
+        if create_camera(dev_port, DEFAULT_WIDTH, DEFAULT_HEIGHT).is_ok() {
+            indexes.push(dev_port);
+        };
+    }
+    println!("\nList of available devices:");
+    for index in indexes {
+        println!("Camera index: {index}");
+    }
+}
+
+fn skip_frames(camera: &mut videoio::VideoCapture) {
+    for _x in 0..SKIPPED_FRAMES_QTY {
+        if let Ok(false) | Err(_) = camera.grab() {
+            break;
+        }
+    }
+}
+
+/// The program's argument parser.
+/// The parser initializes the `CameraSettings` structure with program's arguments
+/// (described in the `readme.md` file).
+pub fn arg_parser(arguments: Vec<String>) -> anyhow::Result<CameraSettings> {
+    let mut args = arguments.into_iter();
+    args.next(); // skip program name
+
+    let mut settings = CameraSettings { index: None };
+
+    while let Some(arg) = args.next() {
+        let par = match args.next() {
+            Some(x) => x,
+            None => String::from(""),
+        };
+
+        match &arg[..] {
+            "d" | "-d" | "--device" => match par.trim().parse() {
+                Ok(index) => settings.index = Some(index),
+                Err(e) => return Err(anyhow!("Camera index parsing error: {}", e)),
+            },
+            "h" | "-h" | "--help" => println!("Please read readme.md file."),
+            "l" | "-l" | "--list" => print_list_of_cameras(),
+            _ => return Err(anyhow!("Argument parsing error.")),
+        };
+    }
+
+    match settings.index {
+        Some(_) => Ok(settings),
+        None => Err(anyhow!(
+            "Need to provide camera index. Please read readme.md file."
+        )),
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn get_camera_index() {
+        let arguments: Vec<String> = vec![
+            String::from("program_name"),
+            String::from("d"),
+            String::from("0"),
+        ];
+        let result = arg_parser(arguments).unwrap();
+        assert_eq!(result.index, Some(0));
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/qr_reader_phone/error.rs.html b/rustdocs/src/qr_reader_phone/error.rs.html new file mode 100644 index 0000000000..7f9014cf25 --- /dev/null +++ b/rustdocs/src/qr_reader_phone/error.rs.html @@ -0,0 +1,113 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+
/// Qr code handling parsing result.
+pub type Result<T> = std::result::Result<T, Error>;
+
+/// QR code handling error type.
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error("Error parsing RaptorqFrame: {0}")]
+    RaptorqFrame(String),
+
+    #[error("Error parsing LegacyFrame: {0}")]
+    LegacyFrame(String),
+
+    #[error("Unexpected QR content: {0}")]
+    UnexpectedData(String),
+
+    #[error(transparent)]
+    HexDecoding(#[from] hex::FromHexError),
+
+    #[error("Banana Split password is wrong")]
+    BananaSplitWrongPassword,
+
+    #[error(transparent)]
+    BananaSplitError(#[from] banana_recovery::Error),
+
+    #[error(transparent)]
+    TransactionParsingError(#[from] transaction_parsing::Error),
+
+    #[error("Unable to decode on given dataset")]
+    UnableToDecode,
+
+    #[error("Was decoding fountain qr code with message length {0}, got interrupted by fountain qr code with message length {1}")]
+    ConflictingPayloads(u32, u32),
+
+    #[error("Was decoding legacy multi-element qr, and got interrupted by a fountain one.")]
+    LegacyInterruptedByFountain,
+
+    #[error("Was decoding legacy multi-element qr, and got interrupted by a banana recovery one.")]
+    LegacyInterruptedByBanana,
+
+    #[error(
+        "Number of element in legacy multi-element qr sequence exceeds expected sequence length."
+    )]
+    LengthExceeded,
+
+    #[error("Was decoding fountain qr code, and got interrupted by a legacy multi-element one.")]
+    FountainInterruptedByLegacy,
+
+    #[error("Was decoding legacy multi-element qr code with {0} elements, got interrupted by legacy multi-element qr code with {0} elements")]
+    ConflictingLegacyLengths(u16, u16),
+
+    #[error("Encountered two legacy multi-element qr code fragments with same number.")]
+    SameNumber,
+
+    #[error("Was reading dynamic qr, and got interrupted by a static one.")]
+    DynamicInterruptedByStatic,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/qr_reader_phone/lib.rs.html b/rustdocs/src/qr_reader_phone/lib.rs.html new file mode 100644 index 0000000000..c1514f8af9 --- /dev/null +++ b/rustdocs/src/qr_reader_phone/lib.rs.html @@ -0,0 +1,273 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+
#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+use std::convert::TryFrom;
+
+use banana_recovery::Share;
+use constants::ENABLE_DYNAMIC_DERIVATIONS;
+
+use definitions::navigation::{BananaSplitRecoveryResult, DecodeSequenceResult};
+
+mod error;
+mod parser;
+pub mod process_payload;
+
+use crate::parser::{parse_qr_payload, LegacyFrame, RaptorqFrame};
+pub use error::{Error, Result};
+use process_payload::{process_decoded_payload, InProgress, Ready};
+use transaction_parsing::decode_payload;
+
+pub fn get_payload(line: &str, cleaned: bool) -> Result<Vec<u8>> {
+    let payload = match cleaned {
+        true => line,
+        false => parse_qr_payload(line)?,
+    };
+    Ok(hex::decode(payload)?)
+}
+
+pub fn get_length(line: &str, cleaned: bool) -> Result<u32> {
+    let payload = get_payload(line, cleaned)?;
+    if let Ok(frame) = RaptorqFrame::try_from(payload.as_ref()) {
+        Ok(frame.total())
+    } else if let Ok(frame) = LegacyFrame::try_from(payload.as_ref()) {
+        Ok(frame.total as u32)
+    } else if let Ok(banana_spilt_qr) = Share::new(payload) {
+        Ok(banana_spilt_qr.required_shards() as u32)
+    } else {
+        Ok(1)
+    }
+}
+
+pub fn decode_sequence(
+    set: &[String],
+    password: &Option<String>,
+    cleaned: bool,
+) -> Result<DecodeSequenceResult> {
+    let mut out = Ready::NotYet(InProgress::None);
+    let mut final_result: Option<String> = None;
+    for x in set {
+        let payload = get_payload(x, cleaned)?;
+        if let Ready::NotYet(decoding) = out {
+            out = process_decoded_payload(payload, password, decoding)?;
+            match out {
+                Ready::Yes(v) => {
+                    final_result = Some(hex::encode(v));
+                    break;
+                }
+                Ready::BananaSplitPasswordRequest => {
+                    return Ok(DecodeSequenceResult::BBananaSplitRecoveryResult {
+                        b: BananaSplitRecoveryResult::RequestPassword,
+                    });
+                }
+                Ready::BananaSplitReady(s) => {
+                    return Ok(DecodeSequenceResult::BBananaSplitRecoveryResult {
+                        b: BananaSplitRecoveryResult::RecoveredSeed { s },
+                    })
+                }
+                _ => (),
+            }
+        }
+    }
+    match final_result {
+        Some(s) => Ok(decode_payload(&s, ENABLE_DYNAMIC_DERIVATIONS)?),
+        None => Err(Error::UnableToDecode),
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn number_of_frames_fountain() {
+        let line = "40438800040a400000007184c696d697473022401306576656e745f746f706963730c7533320130737461636b5f6865696768740c753332011c676c6f62616c730c7533320128706172616d65746572730c75333201306d656d6f72795f70616765730c75333201287461626c655f73697a650c753332013462725f7461626c655f73697a650c753332012c7375626a6563745f6c656e0c7533320124636f64655f73697a650c75333254496e737472756374696f6e576569676874733c543e02cc0120693634636f6e73740c753332011c6936346c6f61640c753332012069363473746f72650c753332011873656c6563740c753332010869660c753332010862720c753332011462725f69660c753332012062725f7461626c650c753332014862725f7461626c655f7065725f656e7472790c753332011063616c6c0c753332013463616c6c5f696e6469726563740c753332015c63616c6c5f696e6469726563745f7065725f706172616d0c75333201246c6f63616c5f6765740c75333201246c6f63616c5f7365740c75333201246c6f63616c5f7465650c7533320128676c6f62616c5f6765740c7533320128676c6f62616c5f7365740c75333201386d656d6f72795f63757272656e740c753332012c6d656d6f72795f67726f770c7533320118693634636c7a0c753332011869363463747a0c7533320124693634706f70636e740c753332011869363465717a0c7533320134693634657874656e64736933320c7533320134693634657874656e64756933320c7533320128693332777261706936340c753332011469363465710c75333201146936346e650c75333201186936346c74730c75333201186936346c74750c75333201186936346774730c75333201186936346774750c75333201186936346c65730c75333201186936346c65750c75333201186936346765730c75333201186936346765750c75333201186936346164640c75333201186936347375620c75333201186936346d756c0c753332011c693634646976730c753332011c693634646976750c753332011c69363472656d730c753332011c69363472656d750c7533320118693634616e640c75333201146936346f720c7533320118693634786f720c753332011869363473686c0c753332011c693634736872730c753332011c693634736872750c753332011c693634726f746c0c753332011c693634726f74720c75333240486f7374466e576569676874733c543e02b8011863616c6c657218576569676874011c616464726573731857656967687401206761735f6c65667418576569676874011c62616c616e636518576569676874014476616c75655f7472616e7366657272656418576569676874013c6d696e696d756d5f62616c616e6365185765696768740144746f6d6273746f6e655f6465706f73697418576569676874013872656e745f616c6c6f77616e6365185765696768740130626c6f636b0ec11ec11ec11ec11ec11ec";
+        let length = get_length(line, false).unwrap();
+        assert_eq!(length, 16, "Expected 16, decoded {length}");
+    }
+
+    #[test]
+    fn get_length_raptorq() {
+        let line = "40088800000820000000190c30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ec11ec11ec11ec11ec11ec11ec11ec";
+        let res = get_length(line, false);
+        assert!(res.is_ok(), "{}", "Expected ok, {res:?}");
+        assert_eq!(res.unwrap(), 2); // 1 + 1 extra packet
+    }
+
+    #[test]
+    fn get_length_legacy_format() {
+        let line = format!("40005{}{}{}{}", "00", "0009", "ff", "ff");
+        let res = get_length(&line, false);
+        assert!(res.is_ok(), "{}", "Expected ok, {res:?}");
+        assert_eq!(res.unwrap(), 9);
+    }
+
+    #[test]
+    fn get_length_static_qr() {
+        let line = format!("40001{}", "01");
+        let res = get_length(&line, false);
+        assert!(res.is_ok(), "{}", "Expected ok, {res:?}");
+        assert_eq!(res.unwrap(), 1);
+    }
+
+    #[test]
+    fn bad_sequence() {
+        let jsonline = vec![
+            "40003533412".to_string(),
+            "400021456".to_string(),
+            "400021578".to_string(),
+        ];
+        let result = decode_sequence(&jsonline, &None, false);
+        assert!(result.is_ok(), "{}", "Expected ok, {result:?}");
+    }
+
+    #[test]
+    fn legacy_multiframe_one_frame() {
+        let jsonline = vec!["400be00000100005301025a4a03f84a19cf8ebda40e62358c592870691a9cf456138bb4829969d10fe969a40403005a4a03f84a19cf8ebda40e62358c592870691a9cf456138bb4829969d10fe9690700e40b5402c5005c00ec07000004000000b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafebcd1b489599db4424ed928804ddad3a4689fb8c835151ef34bc250bb845cdc1eb0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe0ec11ec11ec11ec11ec11ec11ec11ec11ec11ec11ec11ec".to_string()];
+        let result = decode_sequence(&jsonline, &None, false);
+        assert!(result.is_ok(), "{}", "Expected ok, {result:?}");
+    }
+
+    #[test]
+    fn get_cleaned_payload() {
+        let res = get_payload("ab", true);
+        assert!(res.is_ok(), "{}", "Expected ok, {res:?}");
+        assert_eq!(res.unwrap(), vec![171]);
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/qr_reader_phone/parser.rs.html b/rustdocs/src/qr_reader_phone/parser.rs.html new file mode 100644 index 0000000000..411ceb39c6 --- /dev/null +++ b/rustdocs/src/qr_reader_phone/parser.rs.html @@ -0,0 +1,315 @@ +parser.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+
use nom::bits::complete::take as bit_take;
+use nom::branch::alt;
+use nom::bytes::complete::{tag, take};
+use std::convert::TryFrom;
+
+use nom::combinator::{rest, verify};
+use nom::complete::tag as bit_tag;
+use nom::error::ErrorKind;
+use nom::number::complete::be_u16;
+use nom::sequence::{preceded, tuple};
+use nom::{bits, IResult};
+
+use crate::{Error, Result};
+
+pub(crate) struct RaptorqFrame {
+    // size of the original message in bytes
+    pub(crate) size: u32,
+
+    // current frame payload
+    pub(crate) payload: Vec<u8>,
+}
+
+impl RaptorqFrame {
+    // https://github.com/cberner/raptorq/blob/afe2e83206efdc90c3da614e381bf2884994d844/src/base.rs#L77
+    const HEADER_SIZE: u32 = 4;
+
+    // total number of frames needed to reconstruct the original message
+    pub(crate) fn total(&self) -> u32 {
+        // Decoding algorithm is probabilistic, see documentation of the `raptorq` crate
+        // Rephrasing from there, the probability to decode message with h
+        // additional packets is 1 - 1/256^(h+1).
+        //
+        // Thus, if there are no additional packets, probability is ~ 0.99609.
+        // If one additional packet is added, it is ~ 0.99998.
+        // It was decided to add one additional packet in the printed estimate, so that
+        // the user expectations are lower.
+        self.size
+            .checked_div(self.payload.len() as u32 - Self::HEADER_SIZE)
+            .unwrap_or_default()
+            + 1
+    }
+}
+
+impl TryFrom<&[u8]> for RaptorqFrame {
+    type Error = Error;
+
+    fn try_from(i: &[u8]) -> Result<Self> {
+        let (_, (size, payload)) =
+            parse_raptor_frame(i).map_err(|e| Error::RaptorqFrame(e.to_string()))?;
+        Ok(Self {
+            size,
+            payload: payload.to_vec(),
+        })
+    }
+}
+
+pub(crate) struct LegacyFrame {
+    pub(crate) total: u16,
+    pub(crate) index: u16,
+    pub(crate) data: Vec<u8>,
+}
+
+impl TryFrom<&[u8]> for LegacyFrame {
+    type Error = Error;
+
+    fn try_from(i: &[u8]) -> Result<Self> {
+        let (_, (total, index, data)) =
+            parse_legacy_frame(i).map_err(|e| Error::LegacyFrame(e.to_string()))?;
+        Ok(Self {
+            total,
+            index,
+            data: data.to_vec(),
+        })
+    }
+}
+
+/// QR code prefix always starts with `0x4` symbol indicating "raw" encoding.
+fn qr_prefix(i: &str) -> IResult<&str, &str> {
+    tag("4")(i)
+}
+
+/// Subsequent N bytes encode content length. Normally N=2 but can it be 1 for old QRs.
+fn length_prefixed(prefix_bytes: u8) -> impl Fn(&str) -> IResult<&str, &str> {
+    move |i: &str| {
+        let (i, prefix) = take(prefix_bytes * 2)(i)?; // *2 because each byte is represented as two hex digits.
+        let len_bytes = usize::from_str_radix(prefix, 16).map_err(|_| {
+            nom::Err::Error(nom::error::Error {
+                input: "Not hex",
+                code: ErrorKind::HexDigit,
+            })
+        })?;
+        let (_, payload) = take(len_bytes * 2)(i)?;
+        Ok((i, payload))
+    }
+}
+
+/// Parse QR code envelope and return payload.
+pub(crate) fn parse_qr_payload(i: &str) -> Result<&str> {
+    let (_, payload) = preceded(qr_prefix, alt((length_prefixed(2), length_prefixed(1))))(i)
+        .map_err(|e| Error::UnexpectedData(e.to_string()))?;
+    Ok(payload)
+}
+
+fn raptorq_tag(i: (&[u8], usize)) -> IResult<(&[u8], usize), u8> {
+    bit_tag(0x1, 1usize)(i)
+}
+
+fn raptor_payload_size(i: (&[u8], usize)) -> IResult<(&[u8], usize), u32> {
+    bit_take(31usize)(i)
+}
+
+fn parse_raptor_frame(i: &[u8]) -> IResult<&[u8], (u32, &[u8])> {
+    tuple((
+        bits(preceded(raptorq_tag, raptor_payload_size)),
+        verify(rest, |a: &[u8]| !a.is_empty()),
+    ))(i)
+}
+
+fn legacy_tag(i: &[u8]) -> IResult<&[u8], &[u8]> {
+    tag(&[0])(i)
+}
+
+fn parse_legacy_frame(i: &[u8]) -> IResult<&[u8], (u16, u16, &[u8])> {
+    tuple((preceded(legacy_tag, be_u16), be_u16, rest))(i)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn get_payload_wrong_prefix() {
+        let res = parse_qr_payload("30001ab");
+        assert!(res.is_err(), "{}", "Expected err, {res:?}");
+    }
+
+    #[test]
+    fn get_valid_payload() {
+        let res = parse_qr_payload("40001ab");
+        assert!(res.is_ok(), "{}", "Expected ok, {res:?}");
+        assert_eq!(res.unwrap(), "ab");
+    }
+
+    #[test]
+    fn get_old_version_payload() {
+        let res = parse_qr_payload("401ab");
+        assert!(res.is_ok(), "{}", "Expected ok, {res:?}");
+        assert_eq!(res.unwrap(), "ab");
+    }
+
+    #[test]
+    fn ignore_remaining() {
+        let res = parse_qr_payload("40001abf");
+        assert!(res.is_ok(), "{}", "Expected ok, {res:?}");
+        assert_eq!(res.unwrap(), "ab");
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/qr_reader_phone/process_payload.rs.html b/rustdocs/src/qr_reader_phone/process_payload.rs.html new file mode 100644 index 0000000000..1164ef759a --- /dev/null +++ b/rustdocs/src/qr_reader_phone/process_payload.rs.html @@ -0,0 +1,397 @@ +process_payload.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+
use crate::{Error, LegacyFrame, RaptorqFrame, Result};
+use banana_recovery::{NextAction, Share, ShareSet};
+use raptorq::{self, EncodingPacket};
+use std::{collections::HashSet, convert::TryFrom};
+
+#[derive(PartialEq, Eq)]
+pub struct Fountain {
+    decoder: raptorq::Decoder,
+    length: u32,
+    pub total: u32,
+    collected: HashSet<usize>,
+}
+
+impl Fountain {
+    /// Return the number of packets collected.
+    pub fn collected(&self) -> usize {
+        self.collected.len()
+    }
+
+    /// Called to inform that the packet with the id has been collected.
+    pub fn collect(&mut self, frame_index: usize) {
+        self.collected.insert(frame_index);
+    }
+}
+
+#[derive(PartialEq, Eq)]
+pub struct LegacyMulti {
+    length: u16,
+    elements: Vec<Element>,
+}
+
+pub struct BananaRecovery {
+    share_set: ShareSet,
+}
+
+#[derive(PartialEq, Eq)]
+pub struct Element {
+    number: u16,
+    contents: Vec<u8>,
+}
+
+pub enum InProgress {
+    None,
+    Fountain(Fountain),
+    LegacyMulti(LegacyMulti),
+    BananaRecovery(BananaRecovery),
+}
+
+pub enum Ready {
+    NotYet(InProgress),
+    Yes(Vec<u8>),
+    BananaSplitPasswordRequest,
+    BananaSplitReady(String),
+}
+
+pub fn process_decoded_payload(
+    payload: Vec<u8>,
+    password: &Option<String>,
+    mut decoding: InProgress,
+) -> Result<Ready> {
+    if let Ok(share) = Share::new(payload.clone()) {
+        match decoding {
+            InProgress::None => {
+                let share_set = ShareSet::init(share);
+                decoding = InProgress::BananaRecovery(BananaRecovery { share_set });
+                Ok(Ready::NotYet(decoding))
+            }
+            InProgress::BananaRecovery(ref mut recovery) => {
+                recovery.share_set.try_add_share(share)?;
+                let next = recovery.share_set.next_action();
+                match next {
+                    NextAction::MoreShares { .. } => Ok(Ready::NotYet(decoding)),
+                    NextAction::AskUserForPassword => {
+                        if let Some(password) = password {
+                            let result = match recovery.share_set.recover_with_passphrase(password)
+                            {
+                                Ok(seed) => seed,
+                                Err(banana_recovery::Error::DecodingFailed) => {
+                                    return Err(Error::BananaSplitWrongPassword);
+                                }
+                                Err(e) => return Err(e.into()),
+                            };
+                            Ok(Ready::BananaSplitReady(result))
+                        } else {
+                            Ok(Ready::BananaSplitPasswordRequest)
+                        }
+                    }
+                }
+            }
+            _ => Err(Error::DynamicInterruptedByStatic),
+        }
+    } else if let Ok(frame) = RaptorqFrame::try_from(payload.as_ref()) {
+        let length = frame.size;
+        let total = frame.total();
+        let new_packet = frame.payload;
+        let decoded_packet = EncodingPacket::deserialize(&new_packet);
+        let block_number = decoded_packet.payload_id().encoding_symbol_id() as usize;
+        match decoding {
+            InProgress::None => {
+                let config = raptorq::ObjectTransmissionInformation::with_defaults(
+                    length as u64,
+                    decoded_packet.data().len() as u16,
+                );
+                let mut decoder = raptorq::Decoder::new(config);
+                match try_fountain(decoded_packet, &mut decoder) {
+                    Some(v) => Ok(Ready::Yes(v)),
+                    None => {
+                        let mut in_progress = Fountain {
+                            decoder,
+                            length,
+                            total,
+                            collected: HashSet::new(),
+                        };
+                        in_progress.collect(block_number);
+                        decoding = InProgress::Fountain(in_progress);
+                        Ok(Ready::NotYet(decoding))
+                    }
+                }
+            }
+            InProgress::Fountain(mut in_progress) => {
+                if in_progress.length != length {
+                    return Err(Error::ConflictingPayloads(in_progress.length, length));
+                }
+
+                in_progress.collect(block_number);
+                match try_fountain(decoded_packet, &mut in_progress.decoder) {
+                    Some(v) => Ok(Ready::Yes(v)),
+                    None => Ok(Ready::NotYet(InProgress::Fountain(in_progress))),
+                }
+            }
+            InProgress::LegacyMulti(_) => Err(Error::LegacyInterruptedByFountain),
+            InProgress::BananaRecovery(_) => Err(Error::LegacyInterruptedByBanana),
+        }
+    } else if let Ok(frame) = LegacyFrame::try_from(payload.as_ref()) {
+        let length = frame.total;
+        let number = frame.index;
+        if number >= length {
+            return Err(Error::LengthExceeded);
+        }
+        let contents = frame.data;
+        let new_element = Element { number, contents };
+        match decoding {
+            InProgress::None => {
+                let mut collected = LegacyMulti {
+                    length,
+                    elements: vec![new_element],
+                };
+                match try_legacy(&mut collected) {
+                    Some(v) => Ok(Ready::Yes(v)),
+                    None => Ok(Ready::NotYet(InProgress::LegacyMulti(collected))),
+                }
+            }
+            InProgress::Fountain(_) => Err(Error::FountainInterruptedByLegacy),
+            InProgress::BananaRecovery(_) => Err(Error::LegacyInterruptedByFountain),
+            InProgress::LegacyMulti(mut collected) => {
+                if collected.length != length {
+                    return Err(Error::ConflictingLegacyLengths(collected.length, length));
+                }
+                if !collected.elements.contains(&new_element) {
+                    for x in collected.elements.iter() {
+                        if x.number == number {
+                            return Err(Error::SameNumber);
+                        }
+                    }
+                    collected.elements.push(new_element);
+                    match try_legacy(&mut collected) {
+                        Some(v) => Ok(Ready::Yes(v)),
+                        None => Ok(Ready::NotYet(InProgress::LegacyMulti(collected))),
+                    }
+                } else {
+                    Ok(Ready::NotYet(InProgress::LegacyMulti(collected)))
+                }
+            }
+        }
+    } else if let InProgress::None = decoding {
+        Ok(Ready::Yes(payload))
+    } else {
+        Err(Error::DynamicInterruptedByStatic)
+    }
+}
+
+fn try_fountain(packet: EncodingPacket, decoder: &mut raptorq::Decoder) -> Option<Vec<u8>> {
+    decoder.add_new_packet(packet);
+    decoder.get_result()
+}
+
+fn try_legacy(collected: &mut LegacyMulti) -> Option<Vec<u8>> {
+    if collected.length > collected.elements.len() as u16 {
+        None
+    } else {
+        collected.elements.sort_by_key(|element| element.number);
+        let mut out: Vec<u8> = Vec::new();
+        for x in collected.elements.iter() {
+            out.extend_from_slice(&x.contents);
+        }
+        Some(out)
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/qrcode_rtx/lib.rs.html b/rustdocs/src/qrcode_rtx/lib.rs.html new file mode 100644 index 0000000000..513b28d2ea --- /dev/null +++ b/rustdocs/src/qrcode_rtx/lib.rs.html @@ -0,0 +1,273 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+
#![deny(rustdoc::broken_intra_doc_links)]
+
+use std::fs;
+use std::path::Path;
+
+use bitvec::prelude::{BitVec, Msb0};
+
+use constants::{qr_palette, BORDER, CHUNK_SIZE, FPS_DEN, FPS_NOM, SCALING};
+use definitions::navigation::QrData;
+use qrcode_static::{png_qr, DataType};
+use qrcodegen::{QrCode, QrCodeEcc};
+
+/// function to take data as `Vec<u8>`, apply `raptorq` to get `Vec<EncodingPacket>`
+/// and serialize it to get `Vec<u8>` output
+pub fn make_data_packs(input: &[u8], chunk_size: u16) -> Result<Vec<QrData>, &'static str> {
+    // checking that data is not too long, set limit for now at 2^31 bit
+    if input.len() >= 0x80000000 {
+        return Err("Input data is too long, processing not possible");
+    }
+    // added at the beginning to each vector before transforming into qr code: contains input length info, also has first bit always 1 indicating it is new fountain qr - possibly need to change this later
+    let data_size_info = (input.len() as u32 + 0x80000000).to_be_bytes();
+
+    // number of additional packets; currently roughly equal to number of core packets
+    let repair_packets_per_block: u32 = {
+        if input.len() as u32 <= chunk_size as u32 {
+            0
+        } else {
+            input.len() as u32 / chunk_size as u32
+        }
+    };
+    // making `raptorq` Encoder, with defaults
+    let raptor_encoder = raptorq::Encoder::with_defaults(input, chunk_size);
+    // making EncodingPacket and deserializing each into `Vec<u8>`
+    let out: Vec<QrData> = raptor_encoder
+        .get_encoded_packets(repair_packets_per_block)
+        .iter()
+        .map(|x| QrData::Regular {
+            data: [data_size_info.to_vec(), x.serialize()].concat(),
+        })
+        .collect();
+    let len_check = out[0].len();
+    for x in out.iter() {
+        if x.len() != len_check {
+            return Err("Encoded chunks have different length");
+        }
+    }
+    if len_check > 2953 {
+        // 2953 is bytes limit for qr codes having 8-bit binary data
+        return Err("Encoded chunks too large to be turned into QR codes");
+    }
+    Ok(out)
+}
+
+/// function to take data as `Vec<Vec<u8>>` with all stuff added and make `Vec<QrCode>`
+fn make_qr_codes(data: Vec<QrData>) -> Result<Vec<QrCode>, Box<dyn std::error::Error>> {
+    let mut out: Vec<QrCode> = Vec::new();
+    for x in data.iter() {
+        let new = QrCode::encode_binary(x.data(), QrCodeEcc::Low)?;
+        out.push(new);
+    }
+    Ok(out)
+}
+
+fn make_apng<P>(
+    data: Vec<QrCode>,
+    output_name: P,
+    fps: u16,
+) -> Result<(), Box<dyn std::error::Error>>
+where
+    P: AsRef<Path>,
+{
+    let mut output_file = fs::File::create(output_name)?;
+    let frames_count: u32 = data.len() as u32;
+    let border_size = BORDER * SCALING;
+
+    // size is always positive and small
+    let size: u32 = (data[0].size() as u32) * (SCALING as u32) + 2 * border_size as u32;
+    let mut encoder = png::Encoder::new(&mut output_file, size, size);
+
+    encoder.set_color(png::ColorType::Indexed);
+    encoder.set_palette(qr_palette());
+    encoder.set_animated(frames_count, 0)?;
+    encoder.set_frame_delay(FPS_NOM, fps)?;
+    encoder.set_depth(png::BitDepth::One);
+
+    let mut writer = encoder.write_header()?;
+    // making actual apng
+    // qr.get_module(x,y) = false corresponds to back color (white by default)
+    // qr.get_module(x,y) = true corresponds to main color (black by default)
+    for qr in data.iter() {
+        let mut buffer: Vec<u8> = Vec::new();
+        for y in 0..size {
+            let mut pixels: BitVec<u8, Msb0> = BitVec::with_capacity(size as usize);
+            for x in 0..size {
+                pixels
+                    .push(!qr.get_module(x as i32 / SCALING - BORDER, y as i32 / SCALING - BORDER))
+            }
+            buffer.extend_from_slice(&pixels.into_vec());
+        }
+        writer.write_image_data(&buffer)?;
+    }
+    writer.finish()?;
+
+    Ok(())
+}
+
+/// Function to transform input `Vec<u8>` into fountain qr-code
+pub fn transform_into_qr_apng<P>(
+    input: &[u8],
+    chunk_size: u16,
+    fps: u16,
+    output_name: P,
+) -> Result<(), Box<dyn std::error::Error>>
+where
+    P: AsRef<Path>,
+{
+    let data_packs = make_data_packs(input, chunk_size)?;
+    make_apng(make_qr_codes(data_packs)?, output_name, fps)?;
+    Ok(())
+}
+
+/// Function to make appropriately sized qr code, apng or static
+pub fn make_pretty_qr<P>(input: &[u8], output_name: P) -> Result<(), Box<dyn std::error::Error>>
+where
+    P: AsRef<Path>,
+{
+    if input.len() <= 2953 {
+        let qr = png_qr(input, DataType::Regular)?;
+        match std::fs::write(output_name, qr) {
+            Ok(_) => Ok(()),
+            Err(e) => Err(Box::from(format!("Output error {e}"))),
+        }
+    } else {
+        transform_into_qr_apng(input, CHUNK_SIZE, FPS_DEN, output_name)
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/qrcode_static/lib.rs.html b/rustdocs/src/qrcode_static/lib.rs.html new file mode 100644 index 0000000000..044dace2a8 --- /dev/null +++ b/rustdocs/src/qrcode_static/lib.rs.html @@ -0,0 +1,197 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+
#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+use anyhow::anyhow;
+use bitvec::prelude::{BitVec, Msb0};
+use constants::{qr_palette, qr_palette_danger, BORDER, SCALING};
+use qrcodegen::{QrCode, QrCodeEcc};
+
+struct QrContent {
+    content: Vec<u8>,
+    size: u32,
+}
+
+/// Transform data slice `&[u8]` into qr data with indexed colors
+fn prepare_qr_png_data(input: &[u8]) -> anyhow::Result<QrContent> {
+    if input.len() > 2953 {
+        return Err(anyhow!("Data too large to make static qr code."));
+    } // 2953 is bytes limit for qr codes having 8-bit binary data
+    let qr_code = match QrCode::encode_binary(input, QrCodeEcc::Low) {
+        Ok(x) => x,
+        Err(e) => return Err(anyhow!("Error making qr code. {}", e)),
+    };
+    let border_size = BORDER * SCALING;
+    let size: u32 = (qr_code.size() as u32) * (SCALING as u32) + 2 * border_size as u32;
+    let mut out: Vec<u8> = Vec::new();
+    for y in 0..size {
+        let mut pixels: BitVec<u8, Msb0> = BitVec::with_capacity(size as usize);
+        for x in 0..size {
+            pixels
+                .push(!qr_code.get_module(x as i32 / SCALING - BORDER, y as i32 / SCALING - BORDER))
+        }
+        out.extend_from_slice(&pixels.into_vec());
+    }
+    Ok(QrContent { content: out, size })
+}
+
+/// Generate static qr code from slice `&[u8]`
+pub fn png_qr(input: &[u8], data_type: DataType) -> anyhow::Result<Vec<u8>> {
+    let qr_content = prepare_qr_png_data(input)?;
+
+    let mut out: Vec<u8> = Vec::new();
+
+    let mut encoder = png::Encoder::new(&mut out, qr_content.size, qr_content.size);
+    encoder.set_color(png::ColorType::Indexed);
+    let qr_palette = match data_type {
+        DataType::Regular => qr_palette(),
+        DataType::Sensitive => qr_palette_danger(),
+    };
+    encoder.set_palette(qr_palette);
+    encoder.set_depth(png::BitDepth::One);
+
+    let mut writer = match encoder.write_header() {
+        Ok(x) => x,
+        Err(e) => return Err(anyhow!("Error writing header. {}", e)),
+    };
+
+    match writer.write_image_data(&qr_content.content) {
+        Ok(()) => (),
+        Err(e) => return Err(anyhow!("Error writing image data. {}", e)),
+    };
+    drop(writer);
+    Ok(out)
+}
+
+/// Generate static qr code from a string.
+///
+/// For keys export and for signature generation.
+pub fn png_qr_from_string(string_input: &str, data_type: DataType) -> anyhow::Result<Vec<u8>> {
+    png_qr(string_input.as_bytes(), data_type)
+}
+
+/// What kind of data goes into QR, to additionally distinguish sensitive QRs
+/// with color
+pub enum DataType {
+    /// signatures for transactions and public keys export
+    Regular,
+
+    /// secret keys export
+    Sensitive,
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn qr_regular() {
+        let data = hex::decode("530100d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27da40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e")
+            .unwrap();
+        assert!(png_qr(&data, DataType::Regular).is_ok());
+    }
+
+    #[test]
+    fn qr_sensitive() {
+        let data = "secret:0xe5be9a5092b81bca64be81d212e7f2f9eba183bb7a90954f7b76361f6edb5c0a:e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e";
+        assert!(png_qr_from_string(data, DataType::Sensitive).is_ok());
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/signer/ffi_types.rs.html b/rustdocs/src/signer/ffi_types.rs.html new file mode 100644 index 0000000000..b8e8e80545 --- /dev/null +++ b/rustdocs/src/signer/ffi_types.rs.html @@ -0,0 +1,251 @@ +ffi_types.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+
use crate::UniffiCustomTypeConverter;
+use definitions::helpers::{get_multisigner, multisigner_to_encryption, multisigner_to_public};
+pub use definitions::{
+    crypto::Encryption,
+    derivations::{DerivedKeyError, DerivedKeyPreview, DerivedKeyStatus, SeedKeysPreview},
+    history::{
+        Event, IdentityHistory, MetaValuesDisplay, MetaValuesExport, NetworkSpecsDisplay,
+        NetworkSpecsExport, NetworkVerifierDisplay, SignDisplay, SignMessageDisplay, TypesDisplay,
+        TypesExport,
+    },
+    metadata::MetaValues,
+    navigation::*,
+    network_specs::{
+        NetworkSpecs, OrderedNetworkSpecs, ValidCurrentVerifier, Verifier, VerifierValue,
+    },
+};
+pub use navigator::Action;
+
+use std::convert::{TryFrom, TryInto};
+
+pub type NetworkSpecsKey = definitions::keyring::NetworkSpecsKey;
+
+impl UniffiCustomTypeConverter for NetworkSpecsKey {
+    type Builtin = String;
+
+    fn into_custom(hex_line: Self::Builtin) -> uniffi::Result<Self> {
+        Self::from_hex(&hex_line).map_err(|_| anyhow::Error::msg("network specks key"))
+    }
+
+    fn from_custom(obj: Self) -> Self::Builtin {
+        hex::encode(obj.key())
+    }
+}
+
+pub type Ed25519Public = sp_core::ed25519::Public;
+pub type Sr25519Public = sp_core::sr25519::Public;
+pub type EcdsaPublic = sp_core::ecdsa::Public;
+pub type MultiSigner = sp_runtime::MultiSigner;
+pub type H256 = sp_core::H256;
+
+impl UniffiCustomTypeConverter for sp_runtime::MultiSigner {
+    type Builtin = Vec<String>;
+
+    fn into_custom(tuple: Self::Builtin) -> uniffi::Result<Self> {
+        match tuple.as_slice() {
+            [public, encryption] => {
+                let encryption = Encryption::try_from(encryption.to_string())
+                    .map_err(|_| anyhow::Error::msg("unable to parse encryption".to_string()))?;
+                let public = hex::decode(public)
+                    .map_err(|_| anyhow::Error::msg("pubkey error".to_string()))?;
+                Ok(get_multisigner(&public, &encryption)
+                    .map_err(|_| anyhow::Error::msg("invalid multisigner".to_string()))?)
+            }
+            _ => Err(anyhow::Error::msg("invalid multisigner")),
+        }
+    }
+
+    fn from_custom(obj: Self) -> Self::Builtin {
+        vec![
+            hex::encode(multisigner_to_public(&obj)),
+            multisigner_to_encryption(&obj).show(),
+        ]
+    }
+}
+
+impl UniffiCustomTypeConverter for Ed25519Public {
+    type Builtin = Vec<u8>;
+
+    fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> {
+        let public = Ed25519Public::try_from(val.as_ref())
+            .map_err(|_| anyhow::Error::msg("ed25519".to_string()))?;
+
+        Ok(public)
+    }
+
+    // Convert our custom type to Builtin
+    fn from_custom(obj: Self) -> Self::Builtin {
+        obj.0.to_vec()
+    }
+}
+
+impl UniffiCustomTypeConverter for Sr25519Public {
+    type Builtin = Vec<u8>;
+
+    fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> {
+        let public = Sr25519Public::try_from(val.as_ref())
+            .map_err(|_| anyhow::Error::msg("sr25519".to_string()))?;
+
+        Ok(public)
+    }
+
+    fn from_custom(obj: Self) -> Self::Builtin {
+        obj.0.to_vec()
+    }
+}
+
+impl UniffiCustomTypeConverter for EcdsaPublic {
+    type Builtin = Vec<u8>;
+
+    fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> {
+        let public = EcdsaPublic::try_from(val.as_ref())
+            .map_err(|_| anyhow::Error::msg("ecdsa".to_string()))?;
+
+        Ok(public)
+    }
+
+    fn from_custom(obj: Self) -> Self::Builtin {
+        obj.0.to_vec()
+    }
+}
+
+impl UniffiCustomTypeConverter for H256 {
+    type Builtin = Vec<u8>;
+
+    fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> {
+        let hash: [u8; 32] = val
+            .try_into()
+            .map_err(|_| anyhow::Error::msg("H265".to_string()))?;
+        Ok(hash.into())
+    }
+
+    fn from_custom(obj: Self) -> Self::Builtin {
+        obj.0.to_vec()
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/signer/home/runner/work/parity-signer/parity-signer/rust/target/debug/build/signer-15d07f15bf64ea13/out/signer.uniffi.rs.html b/rustdocs/src/signer/home/runner/work/parity-signer/parity-signer/rust/target/debug/build/signer-15d07f15bf64ea13/out/signer.uniffi.rs.html new file mode 100644 index 0000000000..208cddd107 --- /dev/null +++ b/rustdocs/src/signer/home/runner/work/parity-signer/parity-signer/rust/target/debug/build/signer-15d07f15bf64ea13/out/signer.uniffi.rs.html @@ -0,0 +1,11650 @@ +signer.uniffi.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3746
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4043
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4116
+4117
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4138
+4139
+4140
+4141
+4142
+4143
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4194
+4195
+4196
+4197
+4198
+4199
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4278
+4279
+4280
+4281
+4282
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4335
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4388
+4389
+4390
+4391
+4392
+4393
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4410
+4411
+4412
+4413
+4414
+4415
+4416
+4417
+4418
+4419
+4420
+4421
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4451
+4452
+4453
+4454
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4462
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4489
+4490
+4491
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4510
+4511
+4512
+4513
+4514
+4515
+4516
+4517
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4595
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4633
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4669
+4670
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4701
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4733
+4734
+4735
+4736
+4737
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4773
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4799
+4800
+4801
+4802
+4803
+4804
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4819
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4835
+4836
+4837
+4838
+4839
+4840
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4898
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4943
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4981
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+5000
+5001
+5002
+5003
+5004
+5005
+5006
+5007
+5008
+5009
+5010
+5011
+5012
+5013
+5014
+5015
+5016
+5017
+5018
+5019
+5020
+5021
+5022
+5023
+5024
+5025
+5026
+5027
+5028
+5029
+5030
+5031
+5032
+5033
+5034
+5035
+5036
+5037
+5038
+5039
+5040
+5041
+5042
+5043
+5044
+5045
+5046
+5047
+5048
+5049
+5050
+5051
+5052
+5053
+5054
+5055
+5056
+5057
+5058
+5059
+5060
+5061
+5062
+5063
+5064
+5065
+5066
+5067
+5068
+5069
+5070
+5071
+5072
+5073
+5074
+5075
+5076
+5077
+5078
+5079
+5080
+5081
+5082
+5083
+5084
+5085
+5086
+5087
+5088
+5089
+5090
+5091
+5092
+5093
+5094
+5095
+5096
+5097
+5098
+5099
+5100
+5101
+5102
+5103
+5104
+5105
+5106
+5107
+5108
+5109
+5110
+5111
+5112
+5113
+5114
+5115
+5116
+5117
+5118
+5119
+5120
+5121
+5122
+5123
+5124
+5125
+5126
+5127
+5128
+5129
+5130
+5131
+5132
+5133
+5134
+5135
+5136
+5137
+5138
+5139
+5140
+5141
+5142
+5143
+5144
+5145
+5146
+5147
+5148
+5149
+5150
+5151
+5152
+5153
+5154
+5155
+5156
+5157
+5158
+5159
+5160
+5161
+5162
+5163
+5164
+5165
+5166
+5167
+5168
+5169
+5170
+5171
+5172
+5173
+5174
+5175
+5176
+5177
+5178
+5179
+5180
+5181
+5182
+5183
+5184
+5185
+5186
+5187
+5188
+5189
+5190
+5191
+5192
+5193
+5194
+5195
+5196
+5197
+5198
+5199
+5200
+5201
+5202
+5203
+5204
+5205
+5206
+5207
+5208
+5209
+5210
+5211
+5212
+5213
+5214
+5215
+5216
+5217
+5218
+5219
+5220
+5221
+5222
+5223
+5224
+5225
+5226
+5227
+5228
+5229
+5230
+5231
+5232
+5233
+5234
+5235
+5236
+5237
+5238
+5239
+5240
+5241
+5242
+5243
+5244
+5245
+5246
+5247
+5248
+5249
+5250
+5251
+5252
+5253
+5254
+5255
+5256
+5257
+5258
+5259
+5260
+5261
+5262
+5263
+5264
+5265
+5266
+5267
+5268
+5269
+5270
+5271
+5272
+5273
+5274
+5275
+5276
+5277
+5278
+5279
+5280
+5281
+5282
+5283
+5284
+5285
+5286
+5287
+5288
+5289
+5290
+5291
+5292
+5293
+5294
+5295
+5296
+5297
+5298
+5299
+5300
+5301
+5302
+5303
+5304
+5305
+5306
+5307
+5308
+5309
+5310
+5311
+5312
+5313
+5314
+5315
+5316
+5317
+5318
+5319
+5320
+5321
+5322
+5323
+5324
+5325
+5326
+5327
+5328
+5329
+5330
+5331
+5332
+5333
+5334
+5335
+5336
+5337
+5338
+5339
+5340
+5341
+5342
+5343
+5344
+5345
+5346
+5347
+5348
+5349
+5350
+5351
+5352
+5353
+5354
+5355
+5356
+5357
+5358
+5359
+5360
+5361
+5362
+5363
+5364
+5365
+5366
+5367
+5368
+5369
+5370
+5371
+5372
+5373
+5374
+5375
+5376
+5377
+5378
+5379
+5380
+5381
+5382
+5383
+5384
+5385
+5386
+5387
+5388
+5389
+5390
+5391
+5392
+5393
+5394
+5395
+5396
+5397
+5398
+5399
+5400
+5401
+5402
+5403
+5404
+5405
+5406
+5407
+5408
+5409
+5410
+5411
+5412
+5413
+5414
+5415
+5416
+5417
+5418
+5419
+5420
+5421
+5422
+5423
+5424
+5425
+5426
+5427
+5428
+5429
+5430
+5431
+5432
+5433
+5434
+5435
+5436
+5437
+5438
+5439
+5440
+5441
+5442
+5443
+5444
+5445
+5446
+5447
+5448
+5449
+5450
+5451
+5452
+5453
+5454
+5455
+5456
+5457
+5458
+5459
+5460
+5461
+5462
+5463
+5464
+5465
+5466
+5467
+5468
+5469
+5470
+5471
+5472
+5473
+5474
+5475
+5476
+5477
+5478
+5479
+5480
+5481
+5482
+5483
+5484
+5485
+5486
+5487
+5488
+5489
+5490
+5491
+5492
+5493
+5494
+5495
+5496
+5497
+5498
+5499
+5500
+5501
+5502
+5503
+5504
+5505
+5506
+5507
+5508
+5509
+5510
+5511
+5512
+5513
+5514
+5515
+5516
+5517
+5518
+5519
+5520
+5521
+5522
+5523
+5524
+5525
+5526
+5527
+5528
+5529
+5530
+5531
+5532
+5533
+5534
+5535
+5536
+5537
+5538
+5539
+5540
+5541
+5542
+5543
+5544
+5545
+5546
+5547
+5548
+5549
+5550
+5551
+5552
+5553
+5554
+5555
+5556
+5557
+5558
+5559
+5560
+5561
+5562
+5563
+5564
+5565
+5566
+5567
+5568
+5569
+5570
+5571
+5572
+5573
+5574
+5575
+5576
+5577
+5578
+5579
+5580
+5581
+5582
+5583
+5584
+5585
+5586
+5587
+5588
+5589
+5590
+5591
+5592
+5593
+5594
+5595
+5596
+5597
+5598
+5599
+5600
+5601
+5602
+5603
+5604
+5605
+5606
+5607
+5608
+5609
+5610
+5611
+5612
+5613
+5614
+5615
+5616
+5617
+5618
+5619
+5620
+5621
+5622
+5623
+5624
+5625
+5626
+5627
+5628
+5629
+5630
+5631
+5632
+5633
+5634
+5635
+5636
+5637
+5638
+5639
+5640
+5641
+5642
+5643
+5644
+5645
+5646
+5647
+5648
+5649
+5650
+5651
+5652
+5653
+5654
+5655
+5656
+5657
+5658
+5659
+5660
+5661
+5662
+5663
+5664
+5665
+5666
+5667
+5668
+5669
+5670
+5671
+5672
+5673
+5674
+5675
+5676
+5677
+5678
+5679
+5680
+5681
+5682
+5683
+5684
+5685
+5686
+5687
+5688
+5689
+5690
+5691
+5692
+5693
+5694
+5695
+5696
+5697
+5698
+5699
+5700
+5701
+5702
+5703
+5704
+5705
+5706
+5707
+5708
+5709
+5710
+5711
+5712
+5713
+5714
+5715
+5716
+5717
+5718
+5719
+5720
+5721
+5722
+5723
+5724
+5725
+5726
+5727
+5728
+5729
+5730
+5731
+5732
+5733
+5734
+5735
+5736
+5737
+5738
+5739
+5740
+5741
+5742
+5743
+5744
+5745
+5746
+5747
+5748
+5749
+5750
+5751
+5752
+5753
+5754
+5755
+5756
+5757
+5758
+5759
+5760
+5761
+5762
+5763
+5764
+5765
+5766
+5767
+5768
+5769
+5770
+5771
+5772
+5773
+5774
+5775
+5776
+5777
+5778
+5779
+5780
+5781
+5782
+5783
+5784
+5785
+5786
+5787
+5788
+5789
+5790
+5791
+5792
+5793
+5794
+5795
+5796
+5797
+5798
+5799
+5800
+5801
+5802
+5803
+5804
+5805
+5806
+5807
+5808
+5809
+5810
+5811
+5812
+5813
+5814
+5815
+5816
+5817
+5818
+5819
+5820
+5821
+5822
+5823
+5824
+5825
+
// This file was autogenerated by some hot garbage in the `uniffi` crate.
+// Trust me, you don't want to mess with it!
+
+
+// Check for compatibility between `uniffi` and `uniffi_bindgen` versions.
+// Note that we have an error message on the same line as the assertion.
+// This is important, because if the assertion fails, the compiler only
+// seems to show that single line as context for the user.
+uniffi::assert_compatible_version!("0.22.0"); // Please check that you depend on version 0.22.0 of the `uniffi` crate.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+uniffi::deps::static_assertions::assert_impl_all!(String: ::std::cmp::Eq, ::std::hash::Hash); // record<String, String>
+
+
+
+
+
+
+
+// Everybody gets basic buffer support, since it's needed for passing complex types over the FFI.
+//
+// See `uniffi/src/ffi/rustbuffer.rs` for documentation on these functions
+
+#[allow(clippy::missing_safety_doc)]
+#[no_mangle]
+pub extern "C" fn ffi_signer_efd6_rustbuffer_alloc(size: i32, call_status: &mut uniffi::RustCallStatus) -> uniffi::RustBuffer {
+    uniffi::ffi::uniffi_rustbuffer_alloc(size, call_status)
+}
+
+#[allow(clippy::missing_safety_doc)]
+#[no_mangle]
+pub unsafe extern "C" fn ffi_signer_efd6_rustbuffer_from_bytes(bytes: uniffi::ForeignBytes, call_status: &mut uniffi::RustCallStatus) -> uniffi::RustBuffer {
+    uniffi::ffi::uniffi_rustbuffer_from_bytes(bytes, call_status)
+}
+
+#[allow(clippy::missing_safety_doc)]
+#[no_mangle]
+pub unsafe extern "C" fn ffi_signer_efd6_rustbuffer_free(buf: uniffi::RustBuffer, call_status: &mut uniffi::RustCallStatus) {
+    uniffi::ffi::uniffi_rustbuffer_free(buf, call_status)
+}
+
+#[allow(clippy::missing_safety_doc)]
+#[no_mangle]
+pub unsafe extern "C" fn ffi_signer_efd6_rustbuffer_reserve(buf: uniffi::RustBuffer, additional: i32, call_status: &mut uniffi::RustCallStatus) -> uniffi::RustBuffer {
+    uniffi::ffi::uniffi_rustbuffer_reserve(buf, additional, call_status)
+}
+
+// Error definitions, corresponding to `error` in the UDL.
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeErrorDisplayed;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeErrorDisplayed {
+    type RustType = r#ErrorDisplayed;
+
+    
+
+    // For rich structured enums, we map individual fields on the Rust side over to
+    // corresponding fields on the foreign-language side.
+    //
+    // If a variant doesn't have fields defined in the UDL, it's currently still possible that
+    // the Rust enum has fields and they're just not listed. In that case we use the `Variant{..}`
+    // syntax to match the variant while ignoring its fields.
+
+    fn write(obj: r#ErrorDisplayed, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#ErrorDisplayed::r#Str { r#s, } => {
+                buf.put_i32(1);
+                <String as uniffi::FfiConverter>::write(r#s, buf);
+            },
+            r#ErrorDisplayed::r#MutexPoisoned{..} => {
+                buf.put_i32(2);
+                
+            },
+            r#ErrorDisplayed::r#DbNotInitialized{..} => {
+                buf.put_i32(3);
+                
+            },
+            r#ErrorDisplayed::r#LoadMetaUnknownNetwork { r#name, } => {
+                buf.put_i32(4);
+                <String as uniffi::FfiConverter>::write(r#name, buf);
+            },
+            r#ErrorDisplayed::r#SpecsKnown { r#name,r#encryption, } => {
+                buf.put_i32(5);
+                <String as uniffi::FfiConverter>::write(r#name, buf);<FfiConverterTypeEncryption as uniffi::FfiConverter>::write(r#encryption, buf);
+            },
+            r#ErrorDisplayed::r#MetadataKnown { r#name,r#version, } => {
+                buf.put_i32(6);
+                <String as uniffi::FfiConverter>::write(r#name, buf);<u32 as uniffi::FfiConverter>::write(r#version, buf);
+            },
+            r#ErrorDisplayed::r#MetadataOutdated { r#name,r#have,r#want, } => {
+                buf.put_i32(7);
+                <String as uniffi::FfiConverter>::write(r#name, buf);<u32 as uniffi::FfiConverter>::write(r#have, buf);<u32 as uniffi::FfiConverter>::write(r#want, buf);
+            },
+            r#ErrorDisplayed::r#UnknownNetwork { r#genesis_hash,r#encryption, } => {
+                buf.put_i32(8);
+                <FfiConverterTypeH256 as uniffi::FfiConverter>::write(r#genesis_hash, buf);<FfiConverterTypeEncryption as uniffi::FfiConverter>::write(r#encryption, buf);
+            },
+            r#ErrorDisplayed::r#NoMetadata { r#name, } => {
+                buf.put_i32(9);
+                <String as uniffi::FfiConverter>::write(r#name, buf);
+            },
+            r#ErrorDisplayed::r#WrongPassword{..} => {
+                buf.put_i32(10);
+                
+            },
+            r#ErrorDisplayed::r#DbSchemaMismatch{..} => {
+                buf.put_i32(11);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ErrorDisplayed> {
+        // Note: no need to call should_generate_error_read here, since it is always true for
+        // non-flat errors
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#ErrorDisplayed::r#Str {
+                
+                r#s: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#ErrorDisplayed::r#MutexPoisoned,
+            3 => r#ErrorDisplayed::r#DbNotInitialized,
+            4 => r#ErrorDisplayed::r#LoadMetaUnknownNetwork {
+                
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            5 => r#ErrorDisplayed::r#SpecsKnown {
+                
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <FfiConverterTypeEncryption as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            6 => r#ErrorDisplayed::r#MetadataKnown {
+                
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            7 => r#ErrorDisplayed::r#MetadataOutdated {
+                
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#have: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#want: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            8 => r#ErrorDisplayed::r#UnknownNetwork {
+                
+                r#genesis_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <FfiConverterTypeEncryption as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            9 => r#ErrorDisplayed::r#NoMetadata {
+                
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            10 => r#ErrorDisplayed::r#WrongPassword,
+            11 => r#ErrorDisplayed::r#DbSchemaMismatch,
+            v => uniffi::deps::anyhow::bail!("Invalid ErrorDisplayed enum value: {}", v),
+        })
+    }
+    
+}
+
+impl uniffi::FfiError for FfiConverterTypeErrorDisplayed { }
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeQrSequenceDecodeError;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeQrSequenceDecodeError {
+    type RustType = r#QrSequenceDecodeError;
+
+    
+
+    // For rich structured enums, we map individual fields on the Rust side over to
+    // corresponding fields on the foreign-language side.
+    //
+    // If a variant doesn't have fields defined in the UDL, it's currently still possible that
+    // the Rust enum has fields and they're just not listed. In that case we use the `Variant{..}`
+    // syntax to match the variant while ignoring its fields.
+
+    fn write(obj: r#QrSequenceDecodeError, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#QrSequenceDecodeError::r#BananaSplitWrongPassword{..} => {
+                buf.put_i32(1);
+                
+            },
+            r#QrSequenceDecodeError::r#BananaSplit { r#s, } => {
+                buf.put_i32(2);
+                <String as uniffi::FfiConverter>::write(r#s, buf);
+            },
+            r#QrSequenceDecodeError::r#GenericError { r#s, } => {
+                buf.put_i32(3);
+                <String as uniffi::FfiConverter>::write(r#s, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#QrSequenceDecodeError> {
+        // Note: no need to call should_generate_error_read here, since it is always true for
+        // non-flat errors
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#QrSequenceDecodeError::r#BananaSplitWrongPassword,
+            2 => r#QrSequenceDecodeError::r#BananaSplit {
+                
+                r#s: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#QrSequenceDecodeError::r#GenericError {
+                
+                r#s: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid QrSequenceDecodeError enum value: {}", v),
+        })
+    }
+    
+}
+
+impl uniffi::FfiError for FfiConverterTypeQrSequenceDecodeError { }
+
+
+// Enum defitions, corresponding to `enum` in UDL.
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeAction;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeAction {
+    type RustType = r#Action;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#Action::r#Start {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#Action::r#NavbarLog {  } => {
+                buf.put_i32(2);
+                
+            },
+            r#Action::r#NavbarScan {  } => {
+                buf.put_i32(3);
+                
+            },
+            r#Action::r#NavbarKeys {  } => {
+                buf.put_i32(4);
+                
+            },
+            r#Action::r#NavbarSettings {  } => {
+                buf.put_i32(5);
+                
+            },
+            r#Action::r#GoBack {  } => {
+                buf.put_i32(6);
+                
+            },
+            r#Action::r#GoForward {  } => {
+                buf.put_i32(7);
+                
+            },
+            r#Action::r#SelectSeed {  } => {
+                buf.put_i32(8);
+                
+            },
+            r#Action::r#SelectKey {  } => {
+                buf.put_i32(9);
+                
+            },
+            r#Action::r#NewKey {  } => {
+                buf.put_i32(10);
+                
+            },
+            r#Action::r#RightButtonAction {  } => {
+                buf.put_i32(11);
+                
+            },
+            r#Action::r#Shield {  } => {
+                buf.put_i32(12);
+                
+            },
+            r#Action::r#NewSeed {  } => {
+                buf.put_i32(13);
+                
+            },
+            r#Action::r#RecoverSeed {  } => {
+                buf.put_i32(14);
+                
+            },
+            r#Action::r#BackupSeed {  } => {
+                buf.put_i32(15);
+                
+            },
+            r#Action::r#NetworkSelector {  } => {
+                buf.put_i32(16);
+                
+            },
+            r#Action::r#CheckPassword {  } => {
+                buf.put_i32(17);
+                
+            },
+            r#Action::r#TransactionFetched {  } => {
+                buf.put_i32(18);
+                
+            },
+            r#Action::r#RemoveNetwork {  } => {
+                buf.put_i32(19);
+                
+            },
+            r#Action::r#RemoveMetadata {  } => {
+                buf.put_i32(20);
+                
+            },
+            r#Action::r#RemoveTypes {  } => {
+                buf.put_i32(21);
+                
+            },
+            r#Action::r#SignNetworkSpecs {  } => {
+                buf.put_i32(22);
+                
+            },
+            r#Action::r#SignMetadata {  } => {
+                buf.put_i32(23);
+                
+            },
+            r#Action::r#SignTypes {  } => {
+                buf.put_i32(24);
+                
+            },
+            r#Action::r#ManageNetworks {  } => {
+                buf.put_i32(25);
+                
+            },
+            r#Action::r#ViewGeneralVerifier {  } => {
+                buf.put_i32(26);
+                
+            },
+            r#Action::r#ManageMetadata {  } => {
+                buf.put_i32(27);
+                
+            },
+            r#Action::r#RemoveKey {  } => {
+                buf.put_i32(28);
+                
+            },
+            r#Action::r#RemoveSeed {  } => {
+                buf.put_i32(29);
+                
+            },
+            r#Action::r#ClearLog {  } => {
+                buf.put_i32(30);
+                
+            },
+            r#Action::r#CreateLogComment {  } => {
+                buf.put_i32(31);
+                
+            },
+            r#Action::r#ShowLogDetails {  } => {
+                buf.put_i32(32);
+                
+            },
+            r#Action::r#Increment {  } => {
+                buf.put_i32(33);
+                
+            },
+            r#Action::r#ShowDocuments {  } => {
+                buf.put_i32(34);
+                
+            },
+            r#Action::r#TextEntry {  } => {
+                buf.put_i32(35);
+                
+            },
+            r#Action::r#PushWord {  } => {
+                buf.put_i32(36);
+                
+            },
+            r#Action::r#Nothing {  } => {
+                buf.put_i32(37);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Action> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#Action::r#Start,
+            2 => r#Action::r#NavbarLog,
+            3 => r#Action::r#NavbarScan,
+            4 => r#Action::r#NavbarKeys,
+            5 => r#Action::r#NavbarSettings,
+            6 => r#Action::r#GoBack,
+            7 => r#Action::r#GoForward,
+            8 => r#Action::r#SelectSeed,
+            9 => r#Action::r#SelectKey,
+            10 => r#Action::r#NewKey,
+            11 => r#Action::r#RightButtonAction,
+            12 => r#Action::r#Shield,
+            13 => r#Action::r#NewSeed,
+            14 => r#Action::r#RecoverSeed,
+            15 => r#Action::r#BackupSeed,
+            16 => r#Action::r#NetworkSelector,
+            17 => r#Action::r#CheckPassword,
+            18 => r#Action::r#TransactionFetched,
+            19 => r#Action::r#RemoveNetwork,
+            20 => r#Action::r#RemoveMetadata,
+            21 => r#Action::r#RemoveTypes,
+            22 => r#Action::r#SignNetworkSpecs,
+            23 => r#Action::r#SignMetadata,
+            24 => r#Action::r#SignTypes,
+            25 => r#Action::r#ManageNetworks,
+            26 => r#Action::r#ViewGeneralVerifier,
+            27 => r#Action::r#ManageMetadata,
+            28 => r#Action::r#RemoveKey,
+            29 => r#Action::r#RemoveSeed,
+            30 => r#Action::r#ClearLog,
+            31 => r#Action::r#CreateLogComment,
+            32 => r#Action::r#ShowLogDetails,
+            33 => r#Action::r#Increment,
+            34 => r#Action::r#ShowDocuments,
+            35 => r#Action::r#TextEntry,
+            36 => r#Action::r#PushWord,
+            37 => r#Action::r#Nothing,
+            v => uniffi::deps::anyhow::bail!("Invalid Action enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeAlertData;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeAlertData {
+    type RustType = r#AlertData;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#AlertData::r#Shield { r#f, } => {
+                buf.put_i32(1);
+                <std::option::Option<FfiConverterTypeShieldAlert> as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#AlertData::r#ErrorData { r#f, } => {
+                buf.put_i32(2);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#AlertData::r#Confirm {  } => {
+                buf.put_i32(3);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#AlertData> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#AlertData::r#Shield {
+                
+                r#f: <std::option::Option<FfiConverterTypeShieldAlert> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#AlertData::r#ErrorData {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#AlertData::r#Confirm,
+            v => uniffi::deps::anyhow::bail!("Invalid AlertData enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeBananaSplitRecoveryResult;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeBananaSplitRecoveryResult {
+    type RustType = r#BananaSplitRecoveryResult;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#BananaSplitRecoveryResult::r#RequestPassword {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#BananaSplitRecoveryResult::r#RecoveredSeed { r#s, } => {
+                buf.put_i32(2);
+                <String as uniffi::FfiConverter>::write(r#s, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#BananaSplitRecoveryResult> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#BananaSplitRecoveryResult::r#RequestPassword,
+            2 => r#BananaSplitRecoveryResult::r#RecoveredSeed {
+                
+                r#s: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid BananaSplitRecoveryResult enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeCard;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeCard {
+    type RustType = r#Card;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#Card::r#AuthorCard { r#f, } => {
+                buf.put_i32(1);
+                <FfiConverterTypeMAddressCard as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#AuthorPlainCard { r#f, } => {
+                buf.put_i32(2);
+                <FfiConverterTypeMSCId as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#AuthorPublicKeyCard { r#f, } => {
+                buf.put_i32(3);
+                <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#BalanceCard { r#f, } => {
+                buf.put_i32(4);
+                <FfiConverterTypeMSCCurrency as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#BitVecCard { r#f, } => {
+                buf.put_i32(5);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#BlockHashCard { r#f, } => {
+                buf.put_i32(6);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#CallCard { r#f, } => {
+                buf.put_i32(7);
+                <FfiConverterTypeMSCCall as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#DefaultCard { r#f, } => {
+                buf.put_i32(8);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#DerivationsCard { r#f, } => {
+                buf.put_i32(9);
+                <std::vec::Vec<FfiConverterTypeSeedKeysPreview> as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#EnumVariantNameCard { r#f, } => {
+                buf.put_i32(10);
+                <FfiConverterTypeMSCEnumVariantName as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#EraImmortalCard {  } => {
+                buf.put_i32(11);
+                
+            },
+            r#Card::r#EraMortalCard { r#f, } => {
+                buf.put_i32(12);
+                <FfiConverterTypeMSCEraMortal as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#ErrorCard { r#f, } => {
+                buf.put_i32(13);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#FieldNameCard { r#f, } => {
+                buf.put_i32(14);
+                <FfiConverterTypeMSCFieldName as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#FieldNumberCard { r#f, } => {
+                buf.put_i32(15);
+                <FfiConverterTypeMSCFieldNumber as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#IdCard { r#f, } => {
+                buf.put_i32(16);
+                <FfiConverterTypeMSCId as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#IdentityFieldCard { r#f, } => {
+                buf.put_i32(17);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#MetaCard { r#f, } => {
+                buf.put_i32(18);
+                <FfiConverterTypeMMetadataRecord as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#NameVersionCard { r#f, } => {
+                buf.put_i32(19);
+                <FfiConverterTypeMSCNameVersion as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#NetworkGenesisHashCard { r#f, } => {
+                buf.put_i32(20);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#NetworkNameCard { r#f, } => {
+                buf.put_i32(21);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#NetworkInfoCard { r#f, } => {
+                buf.put_i32(22);
+                <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#NewSpecsCard { r#f, } => {
+                buf.put_i32(23);
+                <FfiConverterTypeNetworkSpecs as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#NonceCard { r#f, } => {
+                buf.put_i32(24);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#NoneCard {  } => {
+                buf.put_i32(25);
+                
+            },
+            r#Card::r#PalletCard { r#f, } => {
+                buf.put_i32(26);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#TextCard { r#f, } => {
+                buf.put_i32(27);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#TipCard { r#f, } => {
+                buf.put_i32(28);
+                <FfiConverterTypeMSCCurrency as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#TipPlainCard { r#f, } => {
+                buf.put_i32(29);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#TxSpecCard { r#f, } => {
+                buf.put_i32(30);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#TxSpecPlainCard { r#f, } => {
+                buf.put_i32(31);
+                <FfiConverterTypeMSCTxSpecPlain as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#TypesInfoCard { r#f, } => {
+                buf.put_i32(32);
+                <FfiConverterTypeMTypesInfo as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#VarNameCard { r#f, } => {
+                buf.put_i32(33);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#VerifierCard { r#f, } => {
+                buf.put_i32(34);
+                <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#Card::r#WarningCard { r#f, } => {
+                buf.put_i32(35);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Card> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#Card::r#AuthorCard {
+                
+                r#f: <FfiConverterTypeMAddressCard as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#Card::r#AuthorPlainCard {
+                
+                r#f: <FfiConverterTypeMSCId as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#Card::r#AuthorPublicKeyCard {
+                
+                r#f: <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            4 => r#Card::r#BalanceCard {
+                
+                r#f: <FfiConverterTypeMSCCurrency as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            5 => r#Card::r#BitVecCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            6 => r#Card::r#BlockHashCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            7 => r#Card::r#CallCard {
+                
+                r#f: <FfiConverterTypeMSCCall as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            8 => r#Card::r#DefaultCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            9 => r#Card::r#DerivationsCard {
+                
+                r#f: <std::vec::Vec<FfiConverterTypeSeedKeysPreview> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            10 => r#Card::r#EnumVariantNameCard {
+                
+                r#f: <FfiConverterTypeMSCEnumVariantName as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            11 => r#Card::r#EraImmortalCard,
+            12 => r#Card::r#EraMortalCard {
+                
+                r#f: <FfiConverterTypeMSCEraMortal as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            13 => r#Card::r#ErrorCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            14 => r#Card::r#FieldNameCard {
+                
+                r#f: <FfiConverterTypeMSCFieldName as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            15 => r#Card::r#FieldNumberCard {
+                
+                r#f: <FfiConverterTypeMSCFieldNumber as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            16 => r#Card::r#IdCard {
+                
+                r#f: <FfiConverterTypeMSCId as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            17 => r#Card::r#IdentityFieldCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            18 => r#Card::r#MetaCard {
+                
+                r#f: <FfiConverterTypeMMetadataRecord as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            19 => r#Card::r#NameVersionCard {
+                
+                r#f: <FfiConverterTypeMSCNameVersion as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            20 => r#Card::r#NetworkGenesisHashCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            21 => r#Card::r#NetworkNameCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            22 => r#Card::r#NetworkInfoCard {
+                
+                r#f: <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            23 => r#Card::r#NewSpecsCard {
+                
+                r#f: <FfiConverterTypeNetworkSpecs as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            24 => r#Card::r#NonceCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            25 => r#Card::r#NoneCard,
+            26 => r#Card::r#PalletCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            27 => r#Card::r#TextCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            28 => r#Card::r#TipCard {
+                
+                r#f: <FfiConverterTypeMSCCurrency as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            29 => r#Card::r#TipPlainCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            30 => r#Card::r#TxSpecCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            31 => r#Card::r#TxSpecPlainCard {
+                
+                r#f: <FfiConverterTypeMSCTxSpecPlain as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            32 => r#Card::r#TypesInfoCard {
+                
+                r#f: <FfiConverterTypeMTypesInfo as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            33 => r#Card::r#VarNameCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            34 => r#Card::r#VerifierCard {
+                
+                r#f: <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            35 => r#Card::r#WarningCard {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid Card enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDecodeSequenceResult;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDecodeSequenceResult {
+    type RustType = r#DecodeSequenceResult;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#DecodeSequenceResult::r#BBananaSplitRecoveryResult { r#b, } => {
+                buf.put_i32(1);
+                <FfiConverterTypeBananaSplitRecoveryResult as uniffi::FfiConverter>::write(r#b, buf);
+            },
+            r#DecodeSequenceResult::r#DynamicDerivations { r#s, } => {
+                buf.put_i32(2);
+                <String as uniffi::FfiConverter>::write(r#s, buf);
+            },
+            r#DecodeSequenceResult::r#DynamicDerivationTransaction { r#s, } => {
+                buf.put_i32(3);
+                <std::vec::Vec<String> as uniffi::FfiConverter>::write(r#s, buf);
+            },
+            r#DecodeSequenceResult::r#Other { r#s, } => {
+                buf.put_i32(4);
+                <String as uniffi::FfiConverter>::write(r#s, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DecodeSequenceResult> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#DecodeSequenceResult::r#BBananaSplitRecoveryResult {
+                
+                r#b: <FfiConverterTypeBananaSplitRecoveryResult as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#DecodeSequenceResult::r#DynamicDerivations {
+                
+                r#s: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#DecodeSequenceResult::r#DynamicDerivationTransaction {
+                
+                r#s: <std::vec::Vec<String> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            4 => r#DecodeSequenceResult::r#Other {
+                
+                r#s: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid DecodeSequenceResult enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDerivationDestination;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDerivationDestination {
+    type RustType = r#DerivationDestination;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#DerivationDestination::r#Pwd {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#DerivationDestination::r#Pin {  } => {
+                buf.put_i32(2);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DerivationDestination> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#DerivationDestination::r#Pwd,
+            2 => r#DerivationDestination::r#Pin,
+            v => uniffi::deps::anyhow::bail!("Invalid DerivationDestination enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDerivedKeyError;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDerivedKeyError {
+    type RustType = r#DerivedKeyError;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#DerivedKeyError::r#NetworkMissing {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#DerivedKeyError::r#KeySetMissing {  } => {
+                buf.put_i32(2);
+                
+            },
+            r#DerivedKeyError::r#BadFormat {  } => {
+                buf.put_i32(3);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DerivedKeyError> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#DerivedKeyError::r#NetworkMissing,
+            2 => r#DerivedKeyError::r#KeySetMissing,
+            3 => r#DerivedKeyError::r#BadFormat,
+            v => uniffi::deps::anyhow::bail!("Invalid DerivedKeyError enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDerivedKeyStatus;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDerivedKeyStatus {
+    type RustType = r#DerivedKeyStatus;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#DerivedKeyStatus::r#Importable {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#DerivedKeyStatus::r#AlreadyExists {  } => {
+                buf.put_i32(2);
+                
+            },
+            r#DerivedKeyStatus::r#Invalid { r#errors, } => {
+                buf.put_i32(3);
+                <std::vec::Vec<FfiConverterTypeDerivedKeyError> as uniffi::FfiConverter>::write(r#errors, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DerivedKeyStatus> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#DerivedKeyStatus::r#Importable,
+            2 => r#DerivedKeyStatus::r#AlreadyExists,
+            3 => r#DerivedKeyStatus::r#Invalid {
+                
+                r#errors: <std::vec::Vec<FfiConverterTypeDerivedKeyError> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid DerivedKeyStatus enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeEncryption;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeEncryption {
+    type RustType = r#Encryption;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#Encryption::r#Ed25519 {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#Encryption::r#Sr25519 {  } => {
+                buf.put_i32(2);
+                
+            },
+            r#Encryption::r#Ecdsa {  } => {
+                buf.put_i32(3);
+                
+            },
+            r#Encryption::r#Ethereum {  } => {
+                buf.put_i32(4);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Encryption> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#Encryption::r#Ed25519,
+            2 => r#Encryption::r#Sr25519,
+            3 => r#Encryption::r#Ecdsa,
+            4 => r#Encryption::r#Ethereum,
+            v => uniffi::deps::anyhow::bail!("Invalid Encryption enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeEvent;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeEvent {
+    type RustType = r#Event;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#Event::r#MetadataAdded { r#meta_values_display, } => {
+                buf.put_i32(1);
+                <FfiConverterTypeMetaValuesDisplay as uniffi::FfiConverter>::write(r#meta_values_display, buf);
+            },
+            r#Event::r#MetadataRemoved { r#meta_values_display, } => {
+                buf.put_i32(2);
+                <FfiConverterTypeMetaValuesDisplay as uniffi::FfiConverter>::write(r#meta_values_display, buf);
+            },
+            r#Event::r#MetadataSigned { r#meta_values_export, } => {
+                buf.put_i32(3);
+                <FfiConverterTypeMetaValuesExport as uniffi::FfiConverter>::write(r#meta_values_export, buf);
+            },
+            r#Event::r#NetworkSpecsAdded { r#network_specs_display, } => {
+                buf.put_i32(4);
+                <FfiConverterTypeNetworkSpecsDisplay as uniffi::FfiConverter>::write(r#network_specs_display, buf);
+            },
+            r#Event::r#NetworkSpecsRemoved { r#network_specs_display, } => {
+                buf.put_i32(5);
+                <FfiConverterTypeNetworkSpecsDisplay as uniffi::FfiConverter>::write(r#network_specs_display, buf);
+            },
+            r#Event::r#NetworkSpecsSigned { r#network_specs_export, } => {
+                buf.put_i32(6);
+                <FfiConverterTypeNetworkSpecsExport as uniffi::FfiConverter>::write(r#network_specs_export, buf);
+            },
+            r#Event::r#NetworkVerifierSet { r#network_verifier_display, } => {
+                buf.put_i32(7);
+                <FfiConverterTypeNetworkVerifierDisplay as uniffi::FfiConverter>::write(r#network_verifier_display, buf);
+            },
+            r#Event::r#GeneralVerifierSet { r#verifier, } => {
+                buf.put_i32(8);
+                <FfiConverterTypeVerifier as uniffi::FfiConverter>::write(r#verifier, buf);
+            },
+            r#Event::r#TypesAdded { r#types_display, } => {
+                buf.put_i32(9);
+                <FfiConverterTypeTypesDisplay as uniffi::FfiConverter>::write(r#types_display, buf);
+            },
+            r#Event::r#TypesRemoved { r#types_display, } => {
+                buf.put_i32(10);
+                <FfiConverterTypeTypesDisplay as uniffi::FfiConverter>::write(r#types_display, buf);
+            },
+            r#Event::r#TypesSigned { r#types_export, } => {
+                buf.put_i32(11);
+                <FfiConverterTypeTypesExport as uniffi::FfiConverter>::write(r#types_export, buf);
+            },
+            r#Event::r#TransactionSigned { r#sign_display, } => {
+                buf.put_i32(12);
+                <FfiConverterTypeSignDisplay as uniffi::FfiConverter>::write(r#sign_display, buf);
+            },
+            r#Event::r#TransactionSignError { r#sign_display, } => {
+                buf.put_i32(13);
+                <FfiConverterTypeSignDisplay as uniffi::FfiConverter>::write(r#sign_display, buf);
+            },
+            r#Event::r#MessageSigned { r#sign_message_display, } => {
+                buf.put_i32(14);
+                <FfiConverterTypeSignMessageDisplay as uniffi::FfiConverter>::write(r#sign_message_display, buf);
+            },
+            r#Event::r#MessageSignError { r#sign_message_display, } => {
+                buf.put_i32(15);
+                <FfiConverterTypeSignMessageDisplay as uniffi::FfiConverter>::write(r#sign_message_display, buf);
+            },
+            r#Event::r#IdentityAdded { r#identity_history, } => {
+                buf.put_i32(16);
+                <FfiConverterTypeIdentityHistory as uniffi::FfiConverter>::write(r#identity_history, buf);
+            },
+            r#Event::r#IdentityRemoved { r#identity_history, } => {
+                buf.put_i32(17);
+                <FfiConverterTypeIdentityHistory as uniffi::FfiConverter>::write(r#identity_history, buf);
+            },
+            r#Event::r#IdentitiesWiped {  } => {
+                buf.put_i32(18);
+                
+            },
+            r#Event::r#DeviceWasOnline {  } => {
+                buf.put_i32(19);
+                
+            },
+            r#Event::r#ResetDangerRecord {  } => {
+                buf.put_i32(20);
+                
+            },
+            r#Event::r#SeedCreated { r#seed_created, } => {
+                buf.put_i32(21);
+                <String as uniffi::FfiConverter>::write(r#seed_created, buf);
+            },
+            r#Event::r#SeedNameWasShown { r#seed_name_was_shown, } => {
+                buf.put_i32(22);
+                <String as uniffi::FfiConverter>::write(r#seed_name_was_shown, buf);
+            },
+            r#Event::r#Warning { r#warning, } => {
+                buf.put_i32(23);
+                <String as uniffi::FfiConverter>::write(r#warning, buf);
+            },
+            r#Event::r#WrongPassword {  } => {
+                buf.put_i32(24);
+                
+            },
+            r#Event::r#UserEntry { r#user_entry, } => {
+                buf.put_i32(25);
+                <String as uniffi::FfiConverter>::write(r#user_entry, buf);
+            },
+            r#Event::r#SystemEntry { r#system_entry, } => {
+                buf.put_i32(26);
+                <String as uniffi::FfiConverter>::write(r#system_entry, buf);
+            },
+            r#Event::r#HistoryCleared {  } => {
+                buf.put_i32(27);
+                
+            },
+            r#Event::r#DatabaseInitiated {  } => {
+                buf.put_i32(28);
+                
+            },
+            r#Event::r#SeedRemoved { r#seed_name, } => {
+                buf.put_i32(29);
+                <String as uniffi::FfiConverter>::write(r#seed_name, buf);
+            },
+            r#Event::r#SecretWasExported { r#identity_history, } => {
+                buf.put_i32(30);
+                <FfiConverterTypeIdentityHistory as uniffi::FfiConverter>::write(r#identity_history, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Event> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#Event::r#MetadataAdded {
+                
+                r#meta_values_display: <FfiConverterTypeMetaValuesDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#Event::r#MetadataRemoved {
+                
+                r#meta_values_display: <FfiConverterTypeMetaValuesDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#Event::r#MetadataSigned {
+                
+                r#meta_values_export: <FfiConverterTypeMetaValuesExport as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            4 => r#Event::r#NetworkSpecsAdded {
+                
+                r#network_specs_display: <FfiConverterTypeNetworkSpecsDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            5 => r#Event::r#NetworkSpecsRemoved {
+                
+                r#network_specs_display: <FfiConverterTypeNetworkSpecsDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            6 => r#Event::r#NetworkSpecsSigned {
+                
+                r#network_specs_export: <FfiConverterTypeNetworkSpecsExport as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            7 => r#Event::r#NetworkVerifierSet {
+                
+                r#network_verifier_display: <FfiConverterTypeNetworkVerifierDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            8 => r#Event::r#GeneralVerifierSet {
+                
+                r#verifier: <FfiConverterTypeVerifier as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            9 => r#Event::r#TypesAdded {
+                
+                r#types_display: <FfiConverterTypeTypesDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            10 => r#Event::r#TypesRemoved {
+                
+                r#types_display: <FfiConverterTypeTypesDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            11 => r#Event::r#TypesSigned {
+                
+                r#types_export: <FfiConverterTypeTypesExport as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            12 => r#Event::r#TransactionSigned {
+                
+                r#sign_display: <FfiConverterTypeSignDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            13 => r#Event::r#TransactionSignError {
+                
+                r#sign_display: <FfiConverterTypeSignDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            14 => r#Event::r#MessageSigned {
+                
+                r#sign_message_display: <FfiConverterTypeSignMessageDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            15 => r#Event::r#MessageSignError {
+                
+                r#sign_message_display: <FfiConverterTypeSignMessageDisplay as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            16 => r#Event::r#IdentityAdded {
+                
+                r#identity_history: <FfiConverterTypeIdentityHistory as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            17 => r#Event::r#IdentityRemoved {
+                
+                r#identity_history: <FfiConverterTypeIdentityHistory as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            18 => r#Event::r#IdentitiesWiped,
+            19 => r#Event::r#DeviceWasOnline,
+            20 => r#Event::r#ResetDangerRecord,
+            21 => r#Event::r#SeedCreated {
+                
+                r#seed_created: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            22 => r#Event::r#SeedNameWasShown {
+                
+                r#seed_name_was_shown: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            23 => r#Event::r#Warning {
+                
+                r#warning: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            24 => r#Event::r#WrongPassword,
+            25 => r#Event::r#UserEntry {
+                
+                r#user_entry: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            26 => r#Event::r#SystemEntry {
+                
+                r#system_entry: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            27 => r#Event::r#HistoryCleared,
+            28 => r#Event::r#DatabaseInitiated,
+            29 => r#Event::r#SeedRemoved {
+                
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            30 => r#Event::r#SecretWasExported {
+                
+                r#identity_history: <FfiConverterTypeIdentityHistory as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid Event enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeExportedSet;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeExportedSet {
+    type RustType = r#ExportedSet;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#ExportedSet::r#All {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#ExportedSet::r#Selected { r#s, } => {
+                buf.put_i32(2);
+                <std::vec::Vec<FfiConverterTypePathAndNetwork> as uniffi::FfiConverter>::write(r#s, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ExportedSet> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#ExportedSet::r#All,
+            2 => r#ExportedSet::r#Selected {
+                
+                r#s: <std::vec::Vec<FfiConverterTypePathAndNetwork> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid ExportedSet enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeFooterButton;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeFooterButton {
+    type RustType = r#FooterButton;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#FooterButton::r#Log {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#FooterButton::r#Scan {  } => {
+                buf.put_i32(2);
+                
+            },
+            r#FooterButton::r#Keys {  } => {
+                buf.put_i32(3);
+                
+            },
+            r#FooterButton::r#Settings {  } => {
+                buf.put_i32(4);
+                
+            },
+            r#FooterButton::r#Back {  } => {
+                buf.put_i32(5);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#FooterButton> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#FooterButton::r#Log,
+            2 => r#FooterButton::r#Scan,
+            3 => r#FooterButton::r#Keys,
+            4 => r#FooterButton::r#Settings,
+            5 => r#FooterButton::r#Back,
+            v => uniffi::deps::anyhow::bail!("Invalid FooterButton enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeIdenticon;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeIdenticon {
+    type RustType = r#Identicon;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#Identicon::r#Dots { r#identity, } => {
+                buf.put_i32(1);
+                <std::vec::Vec<u8> as uniffi::FfiConverter>::write(r#identity, buf);
+            },
+            r#Identicon::r#Blockies { r#identity, } => {
+                buf.put_i32(2);
+                <String as uniffi::FfiConverter>::write(r#identity, buf);
+            },
+            r#Identicon::r#Jdenticon { r#identity, } => {
+                buf.put_i32(3);
+                <String as uniffi::FfiConverter>::write(r#identity, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Identicon> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#Identicon::r#Dots {
+                
+                r#identity: <std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#Identicon::r#Blockies {
+                
+                r#identity: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#Identicon::r#Jdenticon {
+                
+                r#identity: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid Identicon enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCContent;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCContent {
+    type RustType = r#MSCContent;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#MSCContent::r#LoadTypes { r#types,r#pic, } => {
+                buf.put_i32(1);
+                <String as uniffi::FfiConverter>::write(r#types, buf);<FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(r#pic, buf);
+            },
+            r#MSCContent::r#LoadMetadata { r#name,r#version, } => {
+                buf.put_i32(2);
+                <String as uniffi::FfiConverter>::write(r#name, buf);<u32 as uniffi::FfiConverter>::write(r#version, buf);
+            },
+            r#MSCContent::r#AddSpecs { r#f, } => {
+                buf.put_i32(3);
+                <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::write(r#f, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCContent> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#MSCContent::r#LoadTypes {
+                
+                r#types: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#pic: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#MSCContent::r#LoadMetadata {
+                
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#MSCContent::r#AddSpecs {
+                
+                r#f: <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid MSCContent enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeModalData;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeModalData {
+    type RustType = r#ModalData;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#ModalData::r#SufficientCryptoReady { r#f, } => {
+                buf.put_i32(1);
+                <FfiConverterTypeMSufficientCryptoReady as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#Backup { r#f, } => {
+                buf.put_i32(2);
+                <FfiConverterTypeMBackup as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#SeedMenu { r#f, } => {
+                buf.put_i32(3);
+                <FfiConverterTypeMSeedMenu as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#NewSeedBackup { r#f, } => {
+                buf.put_i32(4);
+                <FfiConverterTypeMNewSeedBackup as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#NetworkSelector { r#f, } => {
+                buf.put_i32(5);
+                <FfiConverterTypeMNetworkMenu as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#PasswordConfirm { r#f, } => {
+                buf.put_i32(6);
+                <FfiConverterTypeMPasswordConfirm as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#SignatureReady { r#f, } => {
+                buf.put_i32(7);
+                <FfiConverterTypeMSignatureReady as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#EnterPassword { r#f, } => {
+                buf.put_i32(8);
+                <FfiConverterTypeMEnterPassword as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#LogRight { r#f, } => {
+                buf.put_i32(9);
+                <FfiConverterTypeMLogRight as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#TypesInfo { r#f, } => {
+                buf.put_i32(10);
+                <FfiConverterTypeMTypesInfo as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#NewSeedMenu {  } => {
+                buf.put_i32(11);
+                
+            },
+            r#ModalData::r#NetworkDetailsMenu {  } => {
+                buf.put_i32(12);
+                
+            },
+            r#ModalData::r#ManageMetadata { r#f, } => {
+                buf.put_i32(13);
+                <FfiConverterTypeMManageMetadata as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ModalData::r#KeyDetailsAction {  } => {
+                buf.put_i32(14);
+                
+            },
+            r#ModalData::r#LogComment {  } => {
+                buf.put_i32(15);
+                
+            },
+            r#ModalData::r#SelectSeed { r#f, } => {
+                buf.put_i32(16);
+                <FfiConverterTypeMSeeds as uniffi::FfiConverter>::write(r#f, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ModalData> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#ModalData::r#SufficientCryptoReady {
+                
+                r#f: <FfiConverterTypeMSufficientCryptoReady as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#ModalData::r#Backup {
+                
+                r#f: <FfiConverterTypeMBackup as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#ModalData::r#SeedMenu {
+                
+                r#f: <FfiConverterTypeMSeedMenu as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            4 => r#ModalData::r#NewSeedBackup {
+                
+                r#f: <FfiConverterTypeMNewSeedBackup as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            5 => r#ModalData::r#NetworkSelector {
+                
+                r#f: <FfiConverterTypeMNetworkMenu as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            6 => r#ModalData::r#PasswordConfirm {
+                
+                r#f: <FfiConverterTypeMPasswordConfirm as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            7 => r#ModalData::r#SignatureReady {
+                
+                r#f: <FfiConverterTypeMSignatureReady as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            8 => r#ModalData::r#EnterPassword {
+                
+                r#f: <FfiConverterTypeMEnterPassword as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            9 => r#ModalData::r#LogRight {
+                
+                r#f: <FfiConverterTypeMLogRight as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            10 => r#ModalData::r#TypesInfo {
+                
+                r#f: <FfiConverterTypeMTypesInfo as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            11 => r#ModalData::r#NewSeedMenu,
+            12 => r#ModalData::r#NetworkDetailsMenu,
+            13 => r#ModalData::r#ManageMetadata {
+                
+                r#f: <FfiConverterTypeMManageMetadata as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            14 => r#ModalData::r#KeyDetailsAction,
+            15 => r#ModalData::r#LogComment,
+            16 => r#ModalData::r#SelectSeed {
+                
+                r#f: <FfiConverterTypeMSeeds as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid ModalData enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeQrData;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeQrData {
+    type RustType = r#QrData;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#QrData::r#Regular { r#data, } => {
+                buf.put_i32(1);
+                <std::vec::Vec<u8> as uniffi::FfiConverter>::write(r#data, buf);
+            },
+            r#QrData::r#Sensitive { r#data, } => {
+                buf.put_i32(2);
+                <std::vec::Vec<u8> as uniffi::FfiConverter>::write(r#data, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#QrData> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#QrData::r#Regular {
+                
+                r#data: <std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            2 => r#QrData::r#Sensitive {
+                
+                r#data: <std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid QrData enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeRightButton;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeRightButton {
+    type RustType = r#RightButton;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#RightButton::r#LogRight {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#RightButton::r#NewSeed {  } => {
+                buf.put_i32(2);
+                
+            },
+            r#RightButton::r#Backup {  } => {
+                buf.put_i32(3);
+                
+            },
+            r#RightButton::r#MultiSelect {  } => {
+                buf.put_i32(4);
+                
+            },
+            r#RightButton::r#NDMenu {  } => {
+                buf.put_i32(5);
+                
+            },
+            r#RightButton::r#TypesInfo {  } => {
+                buf.put_i32(6);
+                
+            },
+            r#RightButton::r#KeyMenu {  } => {
+                buf.put_i32(7);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#RightButton> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#RightButton::r#LogRight,
+            2 => r#RightButton::r#NewSeed,
+            3 => r#RightButton::r#Backup,
+            4 => r#RightButton::r#MultiSelect,
+            5 => r#RightButton::r#NDMenu,
+            6 => r#RightButton::r#TypesInfo,
+            7 => r#RightButton::r#KeyMenu,
+            v => uniffi::deps::anyhow::bail!("Invalid RightButton enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeScreenData;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeScreenData {
+    type RustType = r#ScreenData;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#ScreenData::r#Scan {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#ScreenData::r#Keys { r#f, } => {
+                buf.put_i32(2);
+                <String as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#Settings { r#f, } => {
+                buf.put_i32(3);
+                <FfiConverterTypeMSettings as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#Log { r#f, } => {
+                buf.put_i32(4);
+                <FfiConverterTypeMLog as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#LogDetails { r#f, } => {
+                buf.put_i32(5);
+                <FfiConverterTypeMLogDetails as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#Transaction { r#f, } => {
+                buf.put_i32(6);
+                <std::vec::Vec<FfiConverterTypeMTransaction> as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#SeedSelector { r#f, } => {
+                buf.put_i32(7);
+                <FfiConverterTypeMSeeds as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#KeyDetails { r#f, } => {
+                buf.put_i32(8);
+                <std::option::Option<FfiConverterTypeMKeyDetails> as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#NewSeed { r#f, } => {
+                buf.put_i32(9);
+                <FfiConverterTypeMNewSeed as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#RecoverSeedName { r#f, } => {
+                buf.put_i32(10);
+                <FfiConverterTypeMRecoverSeedName as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#RecoverSeedPhrase { r#f, } => {
+                buf.put_i32(11);
+                <FfiConverterTypeMRecoverSeedPhrase as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#DeriveKey { r#f, } => {
+                buf.put_i32(12);
+                <FfiConverterTypeMDeriveKey as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#VVerifier { r#f, } => {
+                buf.put_i32(13);
+                <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#ManageNetworks { r#f, } => {
+                buf.put_i32(14);
+                <FfiConverterTypeMManageNetworks as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#NNetworkDetails { r#f, } => {
+                buf.put_i32(15);
+                <FfiConverterTypeMNetworkDetails as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#SignSufficientCrypto { r#f, } => {
+                buf.put_i32(16);
+                <FfiConverterTypeMSignSufficientCrypto as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#SelectSeedForBackup { r#f, } => {
+                buf.put_i32(17);
+                <FfiConverterTypeMSeeds as uniffi::FfiConverter>::write(r#f, buf);
+            },
+            r#ScreenData::r#Documents {  } => {
+                buf.put_i32(18);
+                
+            },
+            r#ScreenData::r#KeyDetailsMulti { r#f, } => {
+                buf.put_i32(19);
+                <FfiConverterTypeMKeyDetailsMulti as uniffi::FfiConverter>::write(r#f, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ScreenData> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#ScreenData::r#Scan,
+            2 => r#ScreenData::r#Keys {
+                
+                r#f: <String as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            3 => r#ScreenData::r#Settings {
+                
+                r#f: <FfiConverterTypeMSettings as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            4 => r#ScreenData::r#Log {
+                
+                r#f: <FfiConverterTypeMLog as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            5 => r#ScreenData::r#LogDetails {
+                
+                r#f: <FfiConverterTypeMLogDetails as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            6 => r#ScreenData::r#Transaction {
+                
+                r#f: <std::vec::Vec<FfiConverterTypeMTransaction> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            7 => r#ScreenData::r#SeedSelector {
+                
+                r#f: <FfiConverterTypeMSeeds as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            8 => r#ScreenData::r#KeyDetails {
+                
+                r#f: <std::option::Option<FfiConverterTypeMKeyDetails> as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            9 => r#ScreenData::r#NewSeed {
+                
+                r#f: <FfiConverterTypeMNewSeed as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            10 => r#ScreenData::r#RecoverSeedName {
+                
+                r#f: <FfiConverterTypeMRecoverSeedName as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            11 => r#ScreenData::r#RecoverSeedPhrase {
+                
+                r#f: <FfiConverterTypeMRecoverSeedPhrase as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            12 => r#ScreenData::r#DeriveKey {
+                
+                r#f: <FfiConverterTypeMDeriveKey as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            13 => r#ScreenData::r#VVerifier {
+                
+                r#f: <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            14 => r#ScreenData::r#ManageNetworks {
+                
+                r#f: <FfiConverterTypeMManageNetworks as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            15 => r#ScreenData::r#NNetworkDetails {
+                
+                r#f: <FfiConverterTypeMNetworkDetails as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            16 => r#ScreenData::r#SignSufficientCrypto {
+                
+                r#f: <FfiConverterTypeMSignSufficientCrypto as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            17 => r#ScreenData::r#SelectSeedForBackup {
+                
+                r#f: <FfiConverterTypeMSeeds as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            18 => r#ScreenData::r#Documents,
+            19 => r#ScreenData::r#KeyDetailsMulti {
+                
+                r#f: <FfiConverterTypeMKeyDetailsMulti as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid ScreenData enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeScreenNameType;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeScreenNameType {
+    type RustType = r#ScreenNameType;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#ScreenNameType::r#H1 {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#ScreenNameType::r#H4 {  } => {
+                buf.put_i32(2);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ScreenNameType> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#ScreenNameType::r#H1,
+            2 => r#ScreenNameType::r#H4,
+            v => uniffi::deps::anyhow::bail!("Invalid ScreenNameType enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeShieldAlert;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeShieldAlert {
+    type RustType = r#ShieldAlert;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#ShieldAlert::r#Past {  } => {
+                buf.put_i32(1);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ShieldAlert> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#ShieldAlert::r#Past,
+            v => uniffi::deps::anyhow::bail!("Invalid ShieldAlert enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeTransactionType;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeTransactionType {
+    type RustType = r#TransactionType;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#TransactionType::r#Sign {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#TransactionType::r#Stub {  } => {
+                buf.put_i32(2);
+                
+            },
+            r#TransactionType::r#Read {  } => {
+                buf.put_i32(3);
+                
+            },
+            r#TransactionType::r#ImportDerivations {  } => {
+                buf.put_i32(4);
+                
+            },
+            r#TransactionType::r#Done {  } => {
+                buf.put_i32(5);
+                
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#TransactionType> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#TransactionType::r#Sign,
+            2 => r#TransactionType::r#Stub,
+            3 => r#TransactionType::r#Read,
+            4 => r#TransactionType::r#ImportDerivations,
+            5 => r#TransactionType::r#Done,
+            v => uniffi::deps::anyhow::bail!("Invalid TransactionType enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeValidCurrentVerifier;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeValidCurrentVerifier {
+    type RustType = r#ValidCurrentVerifier;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#ValidCurrentVerifier::r#General {  } => {
+                buf.put_i32(1);
+                
+            },
+            r#ValidCurrentVerifier::r#Custom { r#v, } => {
+                buf.put_i32(2);
+                <FfiConverterTypeVerifier as uniffi::FfiConverter>::write(r#v, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ValidCurrentVerifier> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#ValidCurrentVerifier::r#General,
+            2 => r#ValidCurrentVerifier::r#Custom {
+                
+                r#v: <FfiConverterTypeVerifier as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid ValidCurrentVerifier enum value: {}", v),
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeVerifierValue;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeVerifierValue {
+    type RustType = r#VerifierValue;
+
+    fn write(obj: Self::RustType, buf: &mut std::vec::Vec<u8>) {
+        use uniffi::deps::bytes::BufMut;
+        match obj {
+            r#VerifierValue::r#Standard { r#m, } => {
+                buf.put_i32(1);
+                <FfiConverterTypeMultiSigner as uniffi::FfiConverter>::write(r#m, buf);
+            },
+        };
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#VerifierValue> {
+        use uniffi::deps::bytes::Buf;
+        uniffi::check_remaining(buf, 4)?;
+        Ok(match buf.get_i32() {
+            1 => r#VerifierValue::r#Standard {
+                
+                r#m: <FfiConverterTypeMultiSigner as uniffi::FfiConverter>::try_read(buf)?,
+            },
+            v => uniffi::deps::anyhow::bail!("Invalid VerifierValue enum value: {}", v),
+        })
+    }
+}
+
+
+// Record definitions, implemented as method-less structs, corresponding to `dictionary` objects.
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeActionResult;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeActionResult {
+    type RustType = r#ActionResult;
+
+    fn write(obj: r#ActionResult, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#screen_label, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#back, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#footer, buf);
+        <std::option::Option<FfiConverterTypeFooterButton> as uniffi::FfiConverter>::write(obj.r#footer_button, buf);
+        <std::option::Option<FfiConverterTypeRightButton> as uniffi::FfiConverter>::write(obj.r#right_button, buf);
+        <FfiConverterTypeScreenNameType as uniffi::FfiConverter>::write(obj.r#screen_name_type, buf);
+        <FfiConverterTypeScreenData as uniffi::FfiConverter>::write(obj.r#screen_data, buf);
+        <std::option::Option<FfiConverterTypeModalData> as uniffi::FfiConverter>::write(obj.r#modal_data, buf);
+        <std::option::Option<FfiConverterTypeAlertData> as uniffi::FfiConverter>::write(obj.r#alert_data, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#ActionResult> {
+        Ok(r#ActionResult {
+                r#screen_label: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#back: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#footer: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#footer_button: <std::option::Option<FfiConverterTypeFooterButton> as uniffi::FfiConverter>::try_read(buf)?,
+                r#right_button: <std::option::Option<FfiConverterTypeRightButton> as uniffi::FfiConverter>::try_read(buf)?,
+                r#screen_name_type: <FfiConverterTypeScreenNameType as uniffi::FfiConverter>::try_read(buf)?,
+                r#screen_data: <FfiConverterTypeScreenData as uniffi::FfiConverter>::try_read(buf)?,
+                r#modal_data: <std::option::Option<FfiConverterTypeModalData> as uniffi::FfiConverter>::try_read(buf)?,
+                r#alert_data: <std::option::Option<FfiConverterTypeAlertData> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeAddress;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeAddress {
+    type RustType = r#Address;
+
+    fn write(obj: r#Address, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#path, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#has_pwd, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#secret_exposed, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Address> {
+        Ok(r#Address {
+                r#path: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#has_pwd: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#secret_exposed: <bool as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDDDetail;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDDDetail {
+    type RustType = r#DDDetail;
+
+    fn write(obj: r#DDDetail, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#base58, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#path, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_logo, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_specs_key, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DDDetail> {
+        Ok(r#DDDetail {
+                r#base58: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#path: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_specs_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDDKeySet;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDDKeySet {
+    type RustType = r#DDKeySet;
+
+    fn write(obj: r#DDKeySet, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+        <std::vec::Vec<FfiConverterTypeDDDetail> as uniffi::FfiConverter>::write(obj.r#derivations, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DDKeySet> {
+        Ok(r#DDKeySet {
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#derivations: <std::vec::Vec<FfiConverterTypeDDDetail> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDDPreview;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDDPreview {
+    type RustType = r#DDPreview;
+
+    fn write(obj: r#DDPreview, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeQrData> as uniffi::FfiConverter>::write(obj.r#qr, buf);
+        <FfiConverterTypeDDKeySet as uniffi::FfiConverter>::write(obj.r#key_set, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#is_some_already_imported, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#is_some_network_missing, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DDPreview> {
+        Ok(r#DDPreview {
+                r#qr: <std::vec::Vec<FfiConverterTypeQrData> as uniffi::FfiConverter>::try_read(buf)?,
+                r#key_set: <FfiConverterTypeDDKeySet as uniffi::FfiConverter>::try_read(buf)?,
+                r#is_some_already_imported: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#is_some_network_missing: <bool as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDerivationCheck;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDerivationCheck {
+    type RustType = r#DerivationCheck;
+
+    fn write(obj: r#DerivationCheck, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <bool as uniffi::FfiConverter>::write(obj.r#button_good, buf);
+        <std::option::Option<FfiConverterTypeDerivationDestination> as uniffi::FfiConverter>::write(obj.r#where_to, buf);
+        <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::write(obj.r#collision, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#error, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DerivationCheck> {
+        Ok(r#DerivationCheck {
+                r#button_good: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#where_to: <std::option::Option<FfiConverterTypeDerivationDestination> as uniffi::FfiConverter>::try_read(buf)?,
+                r#collision: <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::try_read(buf)?,
+                r#error: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDerivationEntry;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDerivationEntry {
+    type RustType = r#DerivationEntry;
+
+    fn write(obj: r#DerivationEntry, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#path, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#has_pwd, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DerivationEntry> {
+        Ok(r#DerivationEntry {
+                r#path: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#has_pwd: <bool as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDerivationPack;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDerivationPack {
+    type RustType = r#DerivationPack;
+
+    fn write(obj: r#DerivationPack, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#network_title, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_logo, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_order, buf);
+        <std::vec::Vec<FfiConverterTypeDerivationEntry> as uniffi::FfiConverter>::write(obj.r#id_set, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DerivationPack> {
+        Ok(r#DerivationPack {
+                r#network_title: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_order: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#id_set: <std::vec::Vec<FfiConverterTypeDerivationEntry> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeDerivedKeyPreview;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeDerivedKeyPreview {
+    type RustType = r#DerivedKeyPreview;
+
+    fn write(obj: r#DerivedKeyPreview, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#address, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#derivation_path, buf);
+        <FfiConverterTypeEncryption as uniffi::FfiConverter>::write(obj.r#encryption, buf);
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#genesis_hash, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+        <std::option::Option<bool> as uniffi::FfiConverter>::write(obj.r#has_pwd, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#network_title, buf);
+        <FfiConverterTypeDerivedKeyStatus as uniffi::FfiConverter>::write(obj.r#status, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#DerivedKeyPreview> {
+        Ok(r#DerivedKeyPreview {
+                r#address: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#derivation_path: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <FfiConverterTypeEncryption as uniffi::FfiConverter>::try_read(buf)?,
+                r#genesis_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+                r#has_pwd: <std::option::Option<bool> as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_title: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#status: <FfiConverterTypeDerivedKeyStatus as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeHistory;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeHistory {
+    type RustType = r#History;
+
+    fn write(obj: r#History, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <u32 as uniffi::FfiConverter>::write(obj.r#order, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#timestamp, buf);
+        <std::vec::Vec<FfiConverterTypeEvent> as uniffi::FfiConverter>::write(obj.r#events, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#History> {
+        Ok(r#History {
+                r#order: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#timestamp: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#events: <std::vec::Vec<FfiConverterTypeEvent> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeIdentityHistory;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeIdentityHistory {
+    type RustType = r#IdentityHistory;
+
+    fn write(obj: r#IdentityHistory, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+        <FfiConverterTypeEncryption as uniffi::FfiConverter>::write(obj.r#encryption, buf);
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(obj.r#public_key, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#path, buf);
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#network_genesis_hash, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#IdentityHistory> {
+        Ok(r#IdentityHistory {
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <FfiConverterTypeEncryption as uniffi::FfiConverter>::try_read(buf)?,
+                r#public_key: <std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?,
+                r#path: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_genesis_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMAddressCard;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMAddressCard {
+    type RustType = r#MAddressCard;
+
+    fn write(obj: r#MAddressCard, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#base58, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#address_key, buf);
+        <FfiConverterTypeAddress as uniffi::FfiConverter>::write(obj.r#address, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MAddressCard> {
+        Ok(r#MAddressCard {
+                r#base58: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#address_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#address: <FfiConverterTypeAddress as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMBackup;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMBackup {
+    type RustType = r#MBackup;
+
+    fn write(obj: r#MBackup, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+        <std::vec::Vec<FfiConverterTypeDerivationPack> as uniffi::FfiConverter>::write(obj.r#derivations, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MBackup> {
+        Ok(r#MBackup {
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#derivations: <std::vec::Vec<FfiConverterTypeDerivationPack> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMDeriveKey;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMDeriveKey {
+    type RustType = r#MDeriveKey;
+
+    fn write(obj: r#MDeriveKey, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MDeriveKey> {
+        Ok(r#MDeriveKey {
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMEnterPassword;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMEnterPassword {
+    type RustType = r#MEnterPassword;
+
+    fn write(obj: r#MEnterPassword, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeMAddressCard as uniffi::FfiConverter>::write(obj.r#author_info, buf);
+        <std::option::Option<FfiConverterTypeMSCNetworkInfo> as uniffi::FfiConverter>::write(obj.r#network_info, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#counter, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MEnterPassword> {
+        Ok(r#MEnterPassword {
+                r#author_info: <FfiConverterTypeMAddressCard as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_info: <std::option::Option<FfiConverterTypeMSCNetworkInfo> as uniffi::FfiConverter>::try_read(buf)?,
+                r#counter: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMEventMaybeDecoded;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMEventMaybeDecoded {
+    type RustType = r#MEventMaybeDecoded;
+
+    fn write(obj: r#MEventMaybeDecoded, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeEvent as uniffi::FfiConverter>::write(obj.r#event, buf);
+        <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::write(obj.r#signed_by, buf);
+        <std::option::Option<FfiConverterTypeTransactionCardSet> as uniffi::FfiConverter>::write(obj.r#decoded, buf);
+        <std::option::Option<FfiConverterTypeMVerifierDetails> as uniffi::FfiConverter>::write(obj.r#verifier_details, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MEventMaybeDecoded> {
+        Ok(r#MEventMaybeDecoded {
+                r#event: <FfiConverterTypeEvent as uniffi::FfiConverter>::try_read(buf)?,
+                r#signed_by: <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::try_read(buf)?,
+                r#decoded: <std::option::Option<FfiConverterTypeTransactionCardSet> as uniffi::FfiConverter>::try_read(buf)?,
+                r#verifier_details: <std::option::Option<FfiConverterTypeMVerifierDetails> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMKeyAndNetworkCard;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMKeyAndNetworkCard {
+    type RustType = r#MKeyAndNetworkCard;
+
+    fn write(obj: r#MKeyAndNetworkCard, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeMKeysCard as uniffi::FfiConverter>::write(obj.r#key, buf);
+        <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::write(obj.r#network, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MKeyAndNetworkCard> {
+        Ok(r#MKeyAndNetworkCard {
+                r#key: <FfiConverterTypeMKeysCard as uniffi::FfiConverter>::try_read(buf)?,
+                r#network: <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMKeyDetails;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMKeyDetails {
+    type RustType = r#MKeyDetails;
+
+    fn write(obj: r#MKeyDetails, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeQrData as uniffi::FfiConverter>::write(obj.r#qr, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#pubkey, buf);
+        <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::write(obj.r#network_info, buf);
+        <FfiConverterTypeAddress as uniffi::FfiConverter>::write(obj.r#address, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#base58, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MKeyDetails> {
+        Ok(r#MKeyDetails {
+                r#qr: <FfiConverterTypeQrData as uniffi::FfiConverter>::try_read(buf)?,
+                r#pubkey: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_info: <FfiConverterTypeMSCNetworkInfo as uniffi::FfiConverter>::try_read(buf)?,
+                r#address: <FfiConverterTypeAddress as uniffi::FfiConverter>::try_read(buf)?,
+                r#base58: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMKeyDetailsMulti;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMKeyDetailsMulti {
+    type RustType = r#MKeyDetailsMulti;
+
+    fn write(obj: r#MKeyDetailsMulti, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeMKeyDetails as uniffi::FfiConverter>::write(obj.r#key_details, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#current_number, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#out_of, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MKeyDetailsMulti> {
+        Ok(r#MKeyDetailsMulti {
+                r#key_details: <FfiConverterTypeMKeyDetails as uniffi::FfiConverter>::try_read(buf)?,
+                r#current_number: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#out_of: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMKeysCard;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMKeysCard {
+    type RustType = r#MKeysCard;
+
+    fn write(obj: r#MKeysCard, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeAddress as uniffi::FfiConverter>::write(obj.r#address, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#address_key, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#base58, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#swiped, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MKeysCard> {
+        Ok(r#MKeysCard {
+                r#address: <FfiConverterTypeAddress as uniffi::FfiConverter>::try_read(buf)?,
+                r#address_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#base58: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#swiped: <bool as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMKeysInfoExport;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMKeysInfoExport {
+    type RustType = r#MKeysInfoExport;
+
+    fn write(obj: r#MKeysInfoExport, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeQrData> as uniffi::FfiConverter>::write(obj.r#frames, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MKeysInfoExport> {
+        Ok(r#MKeysInfoExport {
+                r#frames: <std::vec::Vec<FfiConverterTypeQrData> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMKeysNew;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMKeysNew {
+    type RustType = r#MKeysNew;
+
+    fn write(obj: r#MKeysNew, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::write(obj.r#root, buf);
+        <std::vec::Vec<FfiConverterTypeMKeyAndNetworkCard> as uniffi::FfiConverter>::write(obj.r#set, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MKeysNew> {
+        Ok(r#MKeysNew {
+                r#root: <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::try_read(buf)?,
+                r#set: <std::vec::Vec<FfiConverterTypeMKeyAndNetworkCard> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMLog;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMLog {
+    type RustType = r#MLog;
+
+    fn write(obj: r#MLog, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeHistory> as uniffi::FfiConverter>::write(obj.r#log, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MLog> {
+        Ok(r#MLog {
+                r#log: <std::vec::Vec<FfiConverterTypeHistory> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMLogDetails;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMLogDetails {
+    type RustType = r#MLogDetails;
+
+    fn write(obj: r#MLogDetails, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#timestamp, buf);
+        <std::vec::Vec<FfiConverterTypeMEventMaybeDecoded> as uniffi::FfiConverter>::write(obj.r#events, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MLogDetails> {
+        Ok(r#MLogDetails {
+                r#timestamp: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#events: <std::vec::Vec<FfiConverterTypeMEventMaybeDecoded> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMLogRight;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMLogRight {
+    type RustType = r#MLogRight;
+
+    fn write(obj: r#MLogRight, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#checksum, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MLogRight> {
+        Ok(r#MLogRight {
+                r#checksum: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMMMNetwork;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMMMNetwork {
+    type RustType = r#MMMNetwork;
+
+    fn write(obj: r#MMMNetwork, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#title, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#logo, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#order, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#current_on_screen, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MMMNetwork> {
+        Ok(r#MMMNetwork {
+                r#title: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#order: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#current_on_screen: <bool as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMMNetwork;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMMNetwork {
+    type RustType = r#MMNetwork;
+
+    fn write(obj: r#MMNetwork, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#key, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#title, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#logo, buf);
+        <u8 as uniffi::FfiConverter>::write(obj.r#order, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#path_id, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MMNetwork> {
+        Ok(r#MMNetwork {
+                r#key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#title: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#order: <u8 as uniffi::FfiConverter>::try_read(buf)?,
+                r#path_id: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMManageMetadata;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMManageMetadata {
+    type RustType = r#MManageMetadata;
+
+    fn write(obj: r#MManageMetadata, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#version, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#meta_hash, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#meta_id_pic, buf);
+        <std::vec::Vec<FfiConverterTypeMMMNetwork> as uniffi::FfiConverter>::write(obj.r#networks, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MManageMetadata> {
+        Ok(r#MManageMetadata {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta_hash: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta_id_pic: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+                r#networks: <std::vec::Vec<FfiConverterTypeMMMNetwork> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMManageNetworks;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMManageNetworks {
+    type RustType = r#MManageNetworks;
+
+    fn write(obj: r#MManageNetworks, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeMMNetwork> as uniffi::FfiConverter>::write(obj.r#networks, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MManageNetworks> {
+        Ok(r#MManageNetworks {
+                r#networks: <std::vec::Vec<FfiConverterTypeMMNetwork> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMMetadataRecord;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMMetadataRecord {
+    type RustType = r#MMetadataRecord;
+
+    fn write(obj: r#MMetadataRecord, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#specname, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#specs_version, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#meta_hash, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#meta_id_pic, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MMetadataRecord> {
+        Ok(r#MMetadataRecord {
+                r#specname: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#specs_version: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta_hash: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta_id_pic: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMNetworkCard;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMNetworkCard {
+    type RustType = r#MNetworkCard;
+
+    fn write(obj: r#MNetworkCard, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#title, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#logo, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MNetworkCard> {
+        Ok(r#MNetworkCard {
+                r#title: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMNetworkDetails;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMNetworkDetails {
+    type RustType = r#MNetworkDetails;
+
+    fn write(obj: r#MNetworkDetails, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <u16 as uniffi::FfiConverter>::write(obj.r#base58prefix, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#color, buf);
+        <u8 as uniffi::FfiConverter>::write(obj.r#decimals, buf);
+        <FfiConverterTypeEncryption as uniffi::FfiConverter>::write(obj.r#encryption, buf);
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#genesis_hash, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#logo, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#order, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#path_id, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#secondary_color, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#title, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#unit, buf);
+        <FfiConverterTypeMVerifier as uniffi::FfiConverter>::write(obj.r#current_verifier, buf);
+        <std::vec::Vec<FfiConverterTypeMMetadataRecord> as uniffi::FfiConverter>::write(obj.r#meta, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MNetworkDetails> {
+        Ok(r#MNetworkDetails {
+                r#base58prefix: <u16 as uniffi::FfiConverter>::try_read(buf)?,
+                r#color: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#decimals: <u8 as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <FfiConverterTypeEncryption as uniffi::FfiConverter>::try_read(buf)?,
+                r#genesis_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#order: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#path_id: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#secondary_color: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#title: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#unit: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#current_verifier: <FfiConverterTypeMVerifier as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta: <std::vec::Vec<FfiConverterTypeMMetadataRecord> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMNetworkMenu;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMNetworkMenu {
+    type RustType = r#MNetworkMenu;
+
+    fn write(obj: r#MNetworkMenu, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeNetwork> as uniffi::FfiConverter>::write(obj.r#networks, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MNetworkMenu> {
+        Ok(r#MNetworkMenu {
+                r#networks: <std::vec::Vec<FfiConverterTypeNetwork> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMNewSeed;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMNewSeed {
+    type RustType = r#MNewSeed;
+
+    fn write(obj: r#MNewSeed, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <bool as uniffi::FfiConverter>::write(obj.r#keyboard, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MNewSeed> {
+        Ok(r#MNewSeed {
+                r#keyboard: <bool as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMNewSeedBackup;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMNewSeedBackup {
+    type RustType = r#MNewSeedBackup;
+
+    fn write(obj: r#MNewSeedBackup, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#seed, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#seed_phrase, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MNewSeedBackup> {
+        Ok(r#MNewSeedBackup {
+                r#seed: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#seed_phrase: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMPasswordConfirm;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMPasswordConfirm {
+    type RustType = r#MPasswordConfirm;
+
+    fn write(obj: r#MPasswordConfirm, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#pwd, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#cropped_path, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MPasswordConfirm> {
+        Ok(r#MPasswordConfirm {
+                r#pwd: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#cropped_path: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMRawKey;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMRawKey {
+    type RustType = r#MRawKey;
+
+    fn write(obj: r#MRawKey, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeAddress as uniffi::FfiConverter>::write(obj.r#address, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#address_key, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#public_key, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_logo, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MRawKey> {
+        Ok(r#MRawKey {
+                r#address: <FfiConverterTypeAddress as uniffi::FfiConverter>::try_read(buf)?,
+                r#address_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#public_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMRecoverSeedName;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMRecoverSeedName {
+    type RustType = r#MRecoverSeedName;
+
+    fn write(obj: r#MRecoverSeedName, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <bool as uniffi::FfiConverter>::write(obj.r#keyboard, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MRecoverSeedName> {
+        Ok(r#MRecoverSeedName {
+                r#keyboard: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMRecoverSeedPhrase;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMRecoverSeedPhrase {
+    type RustType = r#MRecoverSeedPhrase;
+
+    fn write(obj: r#MRecoverSeedPhrase, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <bool as uniffi::FfiConverter>::write(obj.r#keyboard, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#user_input, buf);
+        <std::vec::Vec<String> as uniffi::FfiConverter>::write(obj.r#guess_set, buf);
+        <std::vec::Vec<String> as uniffi::FfiConverter>::write(obj.r#draft, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#ready_seed, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MRecoverSeedPhrase> {
+        Ok(r#MRecoverSeedPhrase {
+                r#keyboard: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#user_input: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#guess_set: <std::vec::Vec<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#draft: <std::vec::Vec<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#ready_seed: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCCall;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCCall {
+    type RustType = r#MSCCall;
+
+    fn write(obj: r#MSCCall, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#method_name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#docs, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCCall> {
+        Ok(r#MSCCall {
+                r#method_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#docs: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCCurrency;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCCurrency {
+    type RustType = r#MSCCurrency;
+
+    fn write(obj: r#MSCCurrency, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#amount, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#units, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCCurrency> {
+        Ok(r#MSCCurrency {
+                r#amount: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#units: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCEnumVariantName;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCEnumVariantName {
+    type RustType = r#MSCEnumVariantName;
+
+    fn write(obj: r#MSCEnumVariantName, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#docs_enum_variant, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCEnumVariantName> {
+        Ok(r#MSCEnumVariantName {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#docs_enum_variant: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCEraMortal;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCEraMortal {
+    type RustType = r#MSCEraMortal;
+
+    fn write(obj: r#MSCEraMortal, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#era, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#phase, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#period, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCEraMortal> {
+        Ok(r#MSCEraMortal {
+                r#era: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#phase: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#period: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCFieldName;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCFieldName {
+    type RustType = r#MSCFieldName;
+
+    fn write(obj: r#MSCFieldName, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#docs_field_name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#path_type, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#docs_type, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCFieldName> {
+        Ok(r#MSCFieldName {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#docs_field_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#path_type: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#docs_type: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCFieldNumber;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCFieldNumber {
+    type RustType = r#MSCFieldNumber;
+
+    fn write(obj: r#MSCFieldNumber, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#number, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#docs_field_number, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#path_type, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#docs_type, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCFieldNumber> {
+        Ok(r#MSCFieldNumber {
+                r#number: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#docs_field_number: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#path_type: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#docs_type: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCId;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCId {
+    type RustType = r#MSCId;
+
+    fn write(obj: r#MSCId, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#base58, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCId> {
+        Ok(r#MSCId {
+                r#base58: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCNameVersion;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCNameVersion {
+    type RustType = r#MSCNameVersion;
+
+    fn write(obj: r#MSCNameVersion, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#version, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCNameVersion> {
+        Ok(r#MSCNameVersion {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCNetworkInfo;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCNetworkInfo {
+    type RustType = r#MSCNetworkInfo;
+
+    fn write(obj: r#MSCNetworkInfo, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#network_title, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_logo, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_specs_key, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCNetworkInfo> {
+        Ok(r#MSCNetworkInfo {
+                r#network_title: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_specs_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCTip;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCTip {
+    type RustType = r#MSCTip;
+
+    fn write(obj: r#MSCTip, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#amount, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#units, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCTip> {
+        Ok(r#MSCTip {
+                r#amount: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#units: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSCTxSpecPlain;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSCTxSpecPlain {
+    type RustType = r#MSCTxSpecPlain;
+
+    fn write(obj: r#MSCTxSpecPlain, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#network_genesis_hash, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#version, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#tx_version, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSCTxSpecPlain> {
+        Ok(r#MSCTxSpecPlain {
+                r#network_genesis_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#tx_version: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSeedMenu;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSeedMenu {
+    type RustType = r#MSeedMenu;
+
+    fn write(obj: r#MSeedMenu, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#seed, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSeedMenu> {
+        Ok(r#MSeedMenu {
+                r#seed: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSeeds;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSeeds {
+    type RustType = r#MSeeds;
+
+    fn write(obj: r#MSeeds, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeSeedNameCard> as uniffi::FfiConverter>::write(obj.r#seed_name_cards, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSeeds> {
+        Ok(r#MSeeds {
+                r#seed_name_cards: <std::vec::Vec<FfiConverterTypeSeedNameCard> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSettings;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSettings {
+    type RustType = r#MSettings;
+
+    fn write(obj: r#MSettings, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#public_key, buf);
+        <std::option::Option<FfiConverterTypeIdenticon> as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#encryption, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#error, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSettings> {
+        Ok(r#MSettings {
+                r#public_key: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <std::option::Option<FfiConverterTypeIdenticon> as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#error: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSignSufficientCrypto;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSignSufficientCrypto {
+    type RustType = r#MSignSufficientCrypto;
+
+    fn write(obj: r#MSignSufficientCrypto, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeMRawKey> as uniffi::FfiConverter>::write(obj.r#identities, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSignSufficientCrypto> {
+        Ok(r#MSignSufficientCrypto {
+                r#identities: <std::vec::Vec<FfiConverterTypeMRawKey> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSignatureReady;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSignatureReady {
+    type RustType = r#MSignatureReady;
+
+    fn write(obj: r#MSignatureReady, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeQrData> as uniffi::FfiConverter>::write(obj.r#signatures, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSignatureReady> {
+        Ok(r#MSignatureReady {
+                r#signatures: <std::vec::Vec<FfiConverterTypeQrData> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSignedTransaction;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSignedTransaction {
+    type RustType = r#MSignedTransaction;
+
+    fn write(obj: r#MSignedTransaction, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<FfiConverterTypeMTransaction> as uniffi::FfiConverter>::write(obj.r#transaction, buf);
+        <FfiConverterTypeMSignatureReady as uniffi::FfiConverter>::write(obj.r#signature, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSignedTransaction> {
+        Ok(r#MSignedTransaction {
+                r#transaction: <std::vec::Vec<FfiConverterTypeMTransaction> as uniffi::FfiConverter>::try_read(buf)?,
+                r#signature: <FfiConverterTypeMSignatureReady as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMSufficientCryptoReady;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMSufficientCryptoReady {
+    type RustType = r#MSufficientCryptoReady;
+
+    fn write(obj: r#MSufficientCryptoReady, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeMAddressCard as uniffi::FfiConverter>::write(obj.r#author_info, buf);
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(obj.r#sufficient, buf);
+        <FfiConverterTypeMSCContent as uniffi::FfiConverter>::write(obj.r#content, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#network_logo, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MSufficientCryptoReady> {
+        Ok(r#MSufficientCryptoReady {
+                r#author_info: <FfiConverterTypeMAddressCard as uniffi::FfiConverter>::try_read(buf)?,
+                r#sufficient: <std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?,
+                r#content: <FfiConverterTypeMSCContent as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_logo: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMTransaction;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMTransaction {
+    type RustType = r#MTransaction;
+
+    fn write(obj: r#MTransaction, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeTransactionCardSet as uniffi::FfiConverter>::write(obj.r#content, buf);
+        <FfiConverterTypeTransactionType as uniffi::FfiConverter>::write(obj.r#ttype, buf);
+        <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::write(obj.r#author_info, buf);
+        <std::option::Option<FfiConverterTypeMSCNetworkInfo> as uniffi::FfiConverter>::write(obj.r#network_info, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MTransaction> {
+        Ok(r#MTransaction {
+                r#content: <FfiConverterTypeTransactionCardSet as uniffi::FfiConverter>::try_read(buf)?,
+                r#ttype: <FfiConverterTypeTransactionType as uniffi::FfiConverter>::try_read(buf)?,
+                r#author_info: <std::option::Option<FfiConverterTypeMAddressCard> as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_info: <std::option::Option<FfiConverterTypeMSCNetworkInfo> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMTypesInfo;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMTypesInfo {
+    type RustType = r#MTypesInfo;
+
+    fn write(obj: r#MTypesInfo, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <bool as uniffi::FfiConverter>::write(obj.r#types_on_file, buf);
+        <std::option::Option<String> as uniffi::FfiConverter>::write(obj.r#types_hash, buf);
+        <std::option::Option<FfiConverterTypeIdenticon> as uniffi::FfiConverter>::write(obj.r#types_id_pic, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MTypesInfo> {
+        Ok(r#MTypesInfo {
+                r#types_on_file: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#types_hash: <std::option::Option<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#types_id_pic: <std::option::Option<FfiConverterTypeIdenticon> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMVerifier;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMVerifier {
+    type RustType = r#MVerifier;
+
+    fn write(obj: r#MVerifier, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#ttype, buf);
+        <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::write(obj.r#details, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MVerifier> {
+        Ok(r#MVerifier {
+                r#ttype: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#details: <FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMVerifierDetails;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMVerifierDetails {
+    type RustType = r#MVerifierDetails;
+
+    fn write(obj: r#MVerifierDetails, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#public_key, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#encryption, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MVerifierDetails> {
+        Ok(r#MVerifierDetails {
+                r#public_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMetaValues;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMetaValues {
+    type RustType = r#MetaValues;
+
+    fn write(obj: r#MetaValues, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#version, buf);
+        <std::option::Option<u16> as uniffi::FfiConverter>::write(obj.r#optional_base58prefix, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#warn_incomplete_extensions, buf);
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(obj.r#meta, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MetaValues> {
+        Ok(r#MetaValues {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#optional_base58prefix: <std::option::Option<u16> as uniffi::FfiConverter>::try_read(buf)?,
+                r#warn_incomplete_extensions: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta: <std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMetaValuesDisplay;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMetaValuesDisplay {
+    type RustType = r#MetaValuesDisplay;
+
+    fn write(obj: r#MetaValuesDisplay, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#version, buf);
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#meta_hash, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MetaValuesDisplay> {
+        Ok(r#MetaValuesDisplay {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeMetaValuesExport;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeMetaValuesExport {
+    type RustType = r#MetaValuesExport;
+
+    fn write(obj: r#MetaValuesExport, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#version, buf);
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#meta_hash, buf);
+        <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::write(obj.r#signed_by, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#MetaValuesExport> {
+        Ok(r#MetaValuesExport {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#version: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#signed_by: <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeNetwork;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeNetwork {
+    type RustType = r#Network;
+
+    fn write(obj: r#Network, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#key, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#logo, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#order, buf);
+        <bool as uniffi::FfiConverter>::write(obj.r#selected, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#title, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Network> {
+        Ok(r#Network {
+                r#key: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#order: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#selected: <bool as uniffi::FfiConverter>::try_read(buf)?,
+                r#title: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeNetworkSpecs;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeNetworkSpecs {
+    type RustType = r#NetworkSpecs;
+
+    fn write(obj: r#NetworkSpecs, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <u16 as uniffi::FfiConverter>::write(obj.r#base58prefix, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#color, buf);
+        <u8 as uniffi::FfiConverter>::write(obj.r#decimals, buf);
+        <FfiConverterTypeEncryption as uniffi::FfiConverter>::write(obj.r#encryption, buf);
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#genesis_hash, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#logo, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#path_id, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#secondary_color, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#title, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#unit, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#NetworkSpecs> {
+        Ok(r#NetworkSpecs {
+                r#base58prefix: <u16 as uniffi::FfiConverter>::try_read(buf)?,
+                r#color: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#decimals: <u8 as uniffi::FfiConverter>::try_read(buf)?,
+                r#encryption: <FfiConverterTypeEncryption as uniffi::FfiConverter>::try_read(buf)?,
+                r#genesis_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#logo: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#path_id: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#secondary_color: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#title: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#unit: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeNetworkSpecsDisplay;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeNetworkSpecsDisplay {
+    type RustType = r#NetworkSpecsDisplay;
+
+    fn write(obj: r#NetworkSpecsDisplay, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeOrderedNetworkSpecs as uniffi::FfiConverter>::write(obj.r#network, buf);
+        <FfiConverterTypeValidCurrentVerifier as uniffi::FfiConverter>::write(obj.r#valid_current_verifier, buf);
+        <FfiConverterTypeVerifier as uniffi::FfiConverter>::write(obj.r#general_verifier, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#NetworkSpecsDisplay> {
+        Ok(r#NetworkSpecsDisplay {
+                r#network: <FfiConverterTypeOrderedNetworkSpecs as uniffi::FfiConverter>::try_read(buf)?,
+                r#valid_current_verifier: <FfiConverterTypeValidCurrentVerifier as uniffi::FfiConverter>::try_read(buf)?,
+                r#general_verifier: <FfiConverterTypeVerifier as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeNetworkSpecsExport;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeNetworkSpecsExport {
+    type RustType = r#NetworkSpecsExport;
+
+    fn write(obj: r#NetworkSpecsExport, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeNetworkSpecs as uniffi::FfiConverter>::write(obj.r#specs_to_send, buf);
+        <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::write(obj.r#signed_by, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#NetworkSpecsExport> {
+        Ok(r#NetworkSpecsExport {
+                r#specs_to_send: <FfiConverterTypeNetworkSpecs as uniffi::FfiConverter>::try_read(buf)?,
+                r#signed_by: <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeNetworkVerifierDisplay;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeNetworkVerifierDisplay {
+    type RustType = r#NetworkVerifierDisplay;
+
+    fn write(obj: r#NetworkVerifierDisplay, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#genesis_hash, buf);
+        <FfiConverterTypeValidCurrentVerifier as uniffi::FfiConverter>::write(obj.r#valid_current_verifier, buf);
+        <FfiConverterTypeVerifier as uniffi::FfiConverter>::write(obj.r#general_verifier, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#NetworkVerifierDisplay> {
+        Ok(r#NetworkVerifierDisplay {
+                r#genesis_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#valid_current_verifier: <FfiConverterTypeValidCurrentVerifier as uniffi::FfiConverter>::try_read(buf)?,
+                r#general_verifier: <FfiConverterTypeVerifier as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeOrderedNetworkSpecs;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeOrderedNetworkSpecs {
+    type RustType = r#OrderedNetworkSpecs;
+
+    fn write(obj: r#OrderedNetworkSpecs, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeNetworkSpecs as uniffi::FfiConverter>::write(obj.r#specs, buf);
+        <u8 as uniffi::FfiConverter>::write(obj.r#order, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#OrderedNetworkSpecs> {
+        Ok(r#OrderedNetworkSpecs {
+                r#specs: <FfiConverterTypeNetworkSpecs as uniffi::FfiConverter>::try_read(buf)?,
+                r#order: <u8 as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypePathAndNetwork;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypePathAndNetwork {
+    type RustType = r#PathAndNetwork;
+
+    fn write(obj: r#PathAndNetwork, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#derivation, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_specs_key, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#PathAndNetwork> {
+        Ok(r#PathAndNetwork {
+                r#derivation: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_specs_key: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeSeedKeysPreview;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeSeedKeysPreview {
+    type RustType = r#SeedKeysPreview;
+
+    fn write(obj: r#SeedKeysPreview, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#name, buf);
+        <FfiConverterTypeMultiSigner as uniffi::FfiConverter>::write(obj.r#multisigner, buf);
+        <std::vec::Vec<FfiConverterTypeDerivedKeyPreview> as uniffi::FfiConverter>::write(obj.r#derived_keys, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#SeedKeysPreview> {
+        Ok(r#SeedKeysPreview {
+                r#name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#multisigner: <FfiConverterTypeMultiSigner as uniffi::FfiConverter>::try_read(buf)?,
+                r#derived_keys: <std::vec::Vec<FfiConverterTypeDerivedKeyPreview> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeSeedNameCard;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeSeedNameCard {
+    type RustType = r#SeedNameCard;
+
+    fn write(obj: r#SeedNameCard, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#seed_name, buf);
+        <FfiConverterTypeIdenticon as uniffi::FfiConverter>::write(obj.r#identicon, buf);
+        <std::vec::Vec<String> as uniffi::FfiConverter>::write(obj.r#used_in_networks, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#derived_keys_count, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#SeedNameCard> {
+        Ok(r#SeedNameCard {
+                r#seed_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#identicon: <FfiConverterTypeIdenticon as uniffi::FfiConverter>::try_read(buf)?,
+                r#used_in_networks: <std::vec::Vec<String> as uniffi::FfiConverter>::try_read(buf)?,
+                r#derived_keys_count: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeSignDisplay;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeSignDisplay {
+    type RustType = r#SignDisplay;
+
+    fn write(obj: r#SignDisplay, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(obj.r#transaction, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_name, buf);
+        <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::write(obj.r#signed_by, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#user_comment, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#SignDisplay> {
+        Ok(r#SignDisplay {
+                r#transaction: <std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#signed_by: <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::try_read(buf)?,
+                r#user_comment: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeSignMessageDisplay;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeSignMessageDisplay {
+    type RustType = r#SignMessageDisplay;
+
+    fn write(obj: r#SignMessageDisplay, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <String as uniffi::FfiConverter>::write(obj.r#message, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#network_name, buf);
+        <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::write(obj.r#signed_by, buf);
+        <String as uniffi::FfiConverter>::write(obj.r#user_comment, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#SignMessageDisplay> {
+        Ok(r#SignMessageDisplay {
+                r#message: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#network_name: <String as uniffi::FfiConverter>::try_read(buf)?,
+                r#signed_by: <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::try_read(buf)?,
+                r#user_comment: <String as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeTransactionCard;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeTransactionCard {
+    type RustType = r#TransactionCard;
+
+    fn write(obj: r#TransactionCard, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <u32 as uniffi::FfiConverter>::write(obj.r#index, buf);
+        <u32 as uniffi::FfiConverter>::write(obj.r#indent, buf);
+        <FfiConverterTypeCard as uniffi::FfiConverter>::write(obj.r#card, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#TransactionCard> {
+        Ok(r#TransactionCard {
+                r#index: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#indent: <u32 as uniffi::FfiConverter>::try_read(buf)?,
+                r#card: <FfiConverterTypeCard as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeTransactionCardSet;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeTransactionCardSet {
+    type RustType = r#TransactionCardSet;
+
+    fn write(obj: r#TransactionCardSet, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#author, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#error, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#extensions, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#importing_derivations, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#message, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#meta, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#method, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#new_specs, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#verifier, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#warning, buf);
+        <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::write(obj.r#types_info, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#TransactionCardSet> {
+        Ok(r#TransactionCardSet {
+                r#author: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#error: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#extensions: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#importing_derivations: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#message: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#meta: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#method: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#new_specs: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#verifier: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#warning: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+                r#types_info: <std::option::Option<std::vec::Vec<FfiConverterTypeTransactionCard>> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeTypesDisplay;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeTypesDisplay {
+    type RustType = r#TypesDisplay;
+
+    fn write(obj: r#TypesDisplay, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#types_hash, buf);
+        <FfiConverterTypeVerifier as uniffi::FfiConverter>::write(obj.r#verifier, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#TypesDisplay> {
+        Ok(r#TypesDisplay {
+                r#types_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#verifier: <FfiConverterTypeVerifier as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeTypesExport;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeTypesExport {
+    type RustType = r#TypesExport;
+
+    fn write(obj: r#TypesExport, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <FfiConverterTypeH256 as uniffi::FfiConverter>::write(obj.r#types_hash, buf);
+        <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::write(obj.r#signed_by, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#TypesExport> {
+        Ok(r#TypesExport {
+                r#types_hash: <FfiConverterTypeH256 as uniffi::FfiConverter>::try_read(buf)?,
+                r#signed_by: <FfiConverterTypeVerifierValue as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+
+#[doc(hidden)]
+pub struct FfiConverterTypeVerifier;
+
+#[doc(hidden)]
+impl uniffi::RustBufferFfiConverter for FfiConverterTypeVerifier {
+    type RustType = r#Verifier;
+
+    fn write(obj: r#Verifier, buf: &mut std::vec::Vec<u8>) {
+        // If the provided struct doesn't match the fields declared in the UDL, then
+        // the generated code here will fail to compile with somewhat helpful error.
+        <std::option::Option<FfiConverterTypeVerifierValue> as uniffi::FfiConverter>::write(obj.r#v, buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::deps::anyhow::Result<r#Verifier> {
+        Ok(r#Verifier {
+                r#v: <std::option::Option<FfiConverterTypeVerifierValue> as uniffi::FfiConverter>::try_read(buf)?,
+        })
+    }
+}
+
+
+// Top level functions, corresponding to UDL `namespace` functions.
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_action_get_name(
+    
+        r#action: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_action_get_name");
+    
+
+uniffi::call_with_output(call_status, || {
+    <std::option::Option<FfiConverterTypeFooterButton> as uniffi::FfiConverter>::lower(r#action_get_name(
+        match<FfiConverterTypeAction as uniffi::FfiConverter>::try_lift(r#action) {
+            Ok(ref val) => val,
+            Err(err) => panic!("Failed to convert arg '{}': {}", "action", err),
+        }))
+    })
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_init_navigation(
+    
+        r#dbname: uniffi::RustBuffer,
+        r#seed_names: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_init_navigation");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#init_navigation(
+        match<String as uniffi::FfiConverter>::try_lift(r#dbname) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "dbname")),
+        },
+        match<std::vec::Vec<String> as uniffi::FfiConverter>::try_lift(r#seed_names) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_names")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_backend_action(
+    
+        r#action: uniffi::RustBuffer,
+        r#details: uniffi::RustBuffer,
+        r#seed_phrase: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_backend_action");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#backend_action(
+        match<FfiConverterTypeAction as uniffi::FfiConverter>::try_lift(r#action) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "action")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#details) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "details")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_phrase")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeActionResult as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_update_seed_names(
+    
+        r#seed_names: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_update_seed_names");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#update_seed_names(
+        match<std::vec::Vec<String> as uniffi::FfiConverter>::try_lift(r#seed_names) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_names")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_qrparser_get_packets_total(
+    
+        r#data: uniffi::RustBuffer,
+        r#cleaned: i8,
+    call_status: &mut uniffi::RustCallStatus
+)  -> u32 {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_qrparser_get_packets_total");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#qrparser_get_packets_total(
+        match<String as uniffi::FfiConverter>::try_lift(r#data) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "data")),
+        },
+        match<bool as uniffi::FfiConverter>::try_lift(r#cleaned) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "cleaned")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<u32 as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_qrparser_try_decode_qr_sequence(
+    
+        r#data: uniffi::RustBuffer,
+        r#password: uniffi::RustBuffer,
+        r#cleaned: i8,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_qrparser_try_decode_qr_sequence");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#qrparser_try_decode_qr_sequence(
+        match<std::vec::Vec<String> as uniffi::FfiConverter>::try_lift(r#data) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeQrSequenceDecodeError>(err, "data")),
+        },
+        match<std::option::Option<String> as uniffi::FfiConverter>::try_lift(r#password) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeQrSequenceDecodeError>(err, "password")),
+        },
+        match<bool as uniffi::FfiConverter>::try_lift(r#cleaned) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeQrSequenceDecodeError>(err, "cleaned")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeQrSequenceDecodeError as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeDecodeSequenceResult as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_generate_secret_key_qr(
+    
+        r#public_key: uniffi::RustBuffer,
+        r#expected_seed_name: uniffi::RustBuffer,
+        r#network_specs_key: uniffi::RustBuffer,
+        r#seed_phrase: uniffi::RustBuffer,
+        r#key_password: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_generate_secret_key_qr");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#generate_secret_key_qr(
+        match<String as uniffi::FfiConverter>::try_lift(r#public_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "public_key")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#expected_seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "expected_seed_name")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#network_specs_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_specs_key")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_phrase")),
+        },
+        match<std::option::Option<String> as uniffi::FfiConverter>::try_lift(r#key_password) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "key_password")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMKeyDetails as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_import_derivations(
+    
+        r#seed_derived_keys: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_import_derivations");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#import_derivations(
+        match<std::vec::Vec<FfiConverterTypeSeedKeysPreview> as uniffi::FfiConverter>::try_lift(r#seed_derived_keys) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_derived_keys")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_preview_dynamic_derivations(
+    
+        r#seeds: uniffi::RustBuffer,
+        r#payload: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_preview_dynamic_derivations");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#preview_dynamic_derivations(
+        match<std::collections::HashMap<String, String> as uniffi::FfiConverter>::try_lift(r#seeds) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seeds")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#payload) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "payload")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeDDPreview as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_populate_derivations_has_pwd(
+    
+        r#seeds: uniffi::RustBuffer,
+        r#seed_derived_keys: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_populate_derivations_has_pwd");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#populate_derivations_has_pwd(
+        match<std::collections::HashMap<String, String> as uniffi::FfiConverter>::try_lift(r#seeds) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seeds")),
+        },
+        match<std::vec::Vec<FfiConverterTypeSeedKeysPreview> as uniffi::FfiConverter>::try_lift(r#seed_derived_keys) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_derived_keys")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<std::vec::Vec<FfiConverterTypeSeedKeysPreview> as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_substrate_path_check(
+    
+        r#seed_name: uniffi::RustBuffer,
+        r#path: uniffi::RustBuffer,
+        r#network: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_substrate_path_check");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#substrate_path_check(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_name")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#path) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "path")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#network) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeDerivationCheck as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_try_create_address(
+    
+        r#seed_name: uniffi::RustBuffer,
+        r#seed_phrase: uniffi::RustBuffer,
+        r#path: uniffi::RustBuffer,
+        r#network: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_try_create_address");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#try_create_address(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_name")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_phrase")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#path) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "path")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#network) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_sign_dd_transaction(
+    
+        r#payload: uniffi::RustBuffer,
+        r#seeds: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_sign_dd_transaction");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#sign_dd_transaction(
+        match<std::vec::Vec<String> as uniffi::FfiConverter>::try_lift(r#payload) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "payload")),
+        },
+        match<std::collections::HashMap<String, String> as uniffi::FfiConverter>::try_lift(r#seeds) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seeds")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMSignedTransaction as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_history_init_history_with_cert(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_history_init_history_with_cert");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#history_init_history_with_cert().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_history_init_history_no_cert(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_history_init_history_no_cert");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#history_init_history_no_cert().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_history_device_was_online(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_history_device_was_online");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#history_device_was_online().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_history_get_warnings(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  -> i8 {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_history_get_warnings");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#history_get_warnings().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<bool as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_history_acknowledge_warnings(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_history_acknowledge_warnings");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#history_acknowledge_warnings().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_history_entry_system(
+    
+        r#event: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_history_entry_system");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#history_entry_system(
+        match<FfiConverterTypeEvent as uniffi::FfiConverter>::try_lift(r#event) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "event")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_history_seed_was_shown(
+    
+        r#seed_name: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_history_seed_was_shown");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#history_seed_was_shown(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_name")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_export_key_info(
+    
+        r#seed_name: uniffi::RustBuffer,
+        r#exported_set: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_export_key_info");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#export_key_info(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_name")),
+        },
+        match<FfiConverterTypeExportedSet as uniffi::FfiConverter>::try_lift(r#exported_set) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "exported_set")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMKeysInfoExport as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_keys_by_seed_name(
+    
+        r#seed_name: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_keys_by_seed_name");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#keys_by_seed_name(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_name")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMKeysNew as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_encode_to_qr(
+    
+        r#payload: uniffi::RustBuffer,
+        r#is_danger: i8,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_encode_to_qr");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#encode_to_qr(
+        match<std::vec::Vec<u8> as uniffi::FfiConverter>::try_lift(r#payload) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "payload")),
+        },
+        match<bool as uniffi::FfiConverter>::try_lift(r#is_danger) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "is_danger")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<std::vec::Vec<u8> as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_managed_networks(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_managed_networks");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_managed_networks().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMManageNetworks as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_init_logging(
+    
+        r#tag: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_init_logging");
+    
+
+uniffi::call_with_output(call_status, || {
+    
+    r#init_logging(
+        match<String as uniffi::FfiConverter>::try_lift(r#tag) {
+            Ok(val) => val,
+            Err(err) => panic!("Failed to convert arg '{}': {}", "tag", err),
+        })
+    })
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_logs(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_logs");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_logs().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMLog as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_log_details(
+    
+        r#order: u32,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_log_details");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_log_details(
+        match<u32 as uniffi::FfiConverter>::try_lift(r#order) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "order")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMLogDetails as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_clear_log_history(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_clear_log_history");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#clear_log_history().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_handle_log_comment(
+    
+        r#user_input: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_handle_log_comment");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#handle_log_comment(
+        match<String as uniffi::FfiConverter>::try_lift(r#user_input) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "user_input")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_seeds(
+    
+        r#names_phone_knows: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_seeds");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_seeds(
+        match<std::vec::Vec<String> as uniffi::FfiConverter>::try_lift(r#names_phone_knows) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "names_phone_knows")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMSeeds as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_key_set_public_key(
+    
+        r#address: uniffi::RustBuffer,
+        r#network_specs_key: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_key_set_public_key");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_key_set_public_key(
+        match<String as uniffi::FfiConverter>::try_lift(r#address) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "address")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#network_specs_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_specs_key")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMKeyDetails as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_remove_derived_key(
+    
+        r#address: uniffi::RustBuffer,
+        r#network_specs_key: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_remove_derived_key");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#remove_derived_key(
+        match<String as uniffi::FfiConverter>::try_lift(r#address) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "address")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#network_specs_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_specs_key")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_remove_key_set(
+    
+        r#address_key: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_remove_key_set");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#remove_key_set(
+        match<String as uniffi::FfiConverter>::try_lift(r#address_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "address_key")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_managed_network_details(
+    
+        r#network_key: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_managed_network_details");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_managed_network_details(
+        match<String as uniffi::FfiConverter>::try_lift(r#network_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_key")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMNetworkDetails as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_remove_metadata_on_managed_network(
+    
+        r#network_key: uniffi::RustBuffer,
+        r#metadata_specs_version: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_remove_metadata_on_managed_network");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#remove_metadata_on_managed_network(
+        match<String as uniffi::FfiConverter>::try_lift(r#network_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_key")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#metadata_specs_version) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "metadata_specs_version")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_seed_phrase_guess_words(
+    
+        r#user_input: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_seed_phrase_guess_words");
+    
+
+uniffi::call_with_output(call_status, || {
+    <std::vec::Vec<String> as uniffi::FfiConverter>::lower(r#seed_phrase_guess_words(
+        match<String as uniffi::FfiConverter>::try_lift(r#user_input) {
+            Ok(ref val) => val,
+            Err(err) => panic!("Failed to convert arg '{}': {}", "user_input", err),
+        }))
+    })
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_remove_managed_network(
+    
+        r#network_key: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_remove_managed_network");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#remove_managed_network(
+        match<String as uniffi::FfiConverter>::try_lift(r#network_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_key")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_verifier_details(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_verifier_details");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_verifier_details().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMVerifierDetails as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_validate_seed_phrase(
+    
+        r#seed_phrase: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> i8 {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_validate_seed_phrase");
+    
+
+uniffi::call_with_output(call_status, || {
+    <bool as uniffi::FfiConverter>::lower(r#validate_seed_phrase(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => panic!("Failed to convert arg '{}': {}", "seed_phrase", err),
+        }))
+    })
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_print_new_seed(
+    
+        r#new_seed_name: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_print_new_seed");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#print_new_seed(
+        match<String as uniffi::FfiConverter>::try_lift(r#new_seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "new_seed_name")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMNewSeedBackup as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_check_db_version(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_check_db_version");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#check_db_version().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_create_key_set(
+    
+        r#seed_name: uniffi::RustBuffer,
+        r#seed_phrase: uniffi::RustBuffer,
+        r#networks: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_create_key_set");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#create_key_set(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_name")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_phrase")),
+        },
+        match<std::vec::Vec<String> as uniffi::FfiConverter>::try_lift(r#networks) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "networks")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(_retval)
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_get_keys_for_signing(
+    
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_get_keys_for_signing");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#get_keys_for_signing().map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMSignSufficientCrypto as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_sign_metadata_with_key(
+    
+        r#network_key: uniffi::RustBuffer,
+        r#metadata_specs_version: uniffi::RustBuffer,
+        r#signing_address_key: uniffi::RustBuffer,
+        r#seed_phrase: uniffi::RustBuffer,
+        r#password: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_sign_metadata_with_key");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#sign_metadata_with_key(
+        match<String as uniffi::FfiConverter>::try_lift(r#network_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_key")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#metadata_specs_version) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "metadata_specs_version")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#signing_address_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "signing_address_key")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_phrase")),
+        },
+        match<std::option::Option<String> as uniffi::FfiConverter>::try_lift(r#password) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "password")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMSufficientCryptoReady as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_sign_network_spec_with_key(
+    
+        r#network_key: uniffi::RustBuffer,
+        r#signing_address_key: uniffi::RustBuffer,
+        r#seed_phrase: uniffi::RustBuffer,
+        r#password: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> uniffi::RustBuffer {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_sign_network_spec_with_key");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#sign_network_spec_with_key(
+        match<String as uniffi::FfiConverter>::try_lift(r#network_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "network_key")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#signing_address_key) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "signing_address_key")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_phrase")),
+        },
+        match<std::option::Option<String> as uniffi::FfiConverter>::try_lift(r#password) {
+            Ok(val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "password")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<FfiConverterTypeMSufficientCryptoReady as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+
+
+#[doc(hidden)]
+#[no_mangle]
+#[allow(clippy::let_unit_value)] // Sometimes we generate code that binds `_retval` to `()`.
+pub extern "C" fn r#signer_efd6_validate_key_password(
+    
+        r#seed_name: uniffi::RustBuffer,
+        r#seed_phrase: uniffi::RustBuffer,
+        r#password: uniffi::RustBuffer,
+    call_status: &mut uniffi::RustCallStatus
+)  -> i8 {
+    // If the provided function does not match the signature specified in the UDL
+    // then this attempt to call it will not compile, and will give guidance as to why.
+    uniffi::deps::log::debug!("signer_efd6_validate_key_password");
+    
+
+uniffi::call_with_result(call_status, || {
+    let _retval = r#validate_key_password(
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_name) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_name")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#seed_phrase) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "seed_phrase")),
+        },
+        match<String as uniffi::FfiConverter>::try_lift(r#password) {
+            Ok(ref val) => val,
+            Err(err) => return Err(uniffi::lower_anyhow_error_or_panic::<FfiConverterTypeErrorDisplayed>(err, "password")),
+        }).map_err(Into::into).map_err(<FfiConverterTypeErrorDisplayed as uniffi::FfiConverter>::lower)?;
+    Ok(<bool as uniffi::FfiConverter>::lower(_retval))
+})
+
+
+}
+// Object definitions, corresponding to UDL `interface` definitions.
+
+
+// Callback Interface definitions, corresponding to UDL `callback interface` definitions.
+
+
+// External and Wrapped types
+// Support for external types.
+
+// Types with an external `FfiConverter`...
+
+
+// For custom scaffolding types we need to generate an FfiConverterType based on the
+// UniffiCustomTypeConverter implementation that the library supplies
+
+
+
+// A trait that's in our crate for our external wrapped types to implement.
+trait UniffiCustomTypeConverter {
+    type Builtin;
+
+    fn into_custom(val: Self::Builtin) -> uniffi::Result<Self> where Self: Sized;
+    fn from_custom(obj: Self) -> Self::Builtin;
+}// Type `EcdsaPublic` wraps a `Sequenceu8`
+#[doc(hidden)]
+pub struct FfiConverterTypeEcdsaPublic;
+
+unsafe impl uniffi::FfiConverter for FfiConverterTypeEcdsaPublic {
+    type RustType = r#EcdsaPublic;
+    type FfiType = uniffi::RustBuffer;
+
+    fn lower(obj: EcdsaPublic ) -> Self::FfiType {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::lower(<EcdsaPublic as UniffiCustomTypeConverter>::from_custom(obj))
+    }
+
+    fn try_lift(v: Self::FfiType) -> uniffi::Result<EcdsaPublic> {
+        <r#EcdsaPublic as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_lift(v)?)
+    }
+
+    fn write(obj: EcdsaPublic, buf: &mut Vec<u8>) {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(<EcdsaPublic as UniffiCustomTypeConverter>::from_custom(obj), buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::Result<r#EcdsaPublic> {
+        <EcdsaPublic as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?)
+    }
+}
+// Type `Ed25519Public` wraps a `Sequenceu8`
+#[doc(hidden)]
+pub struct FfiConverterTypeEd25519Public;
+
+unsafe impl uniffi::FfiConverter for FfiConverterTypeEd25519Public {
+    type RustType = r#Ed25519Public;
+    type FfiType = uniffi::RustBuffer;
+
+    fn lower(obj: Ed25519Public ) -> Self::FfiType {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::lower(<Ed25519Public as UniffiCustomTypeConverter>::from_custom(obj))
+    }
+
+    fn try_lift(v: Self::FfiType) -> uniffi::Result<Ed25519Public> {
+        <r#Ed25519Public as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_lift(v)?)
+    }
+
+    fn write(obj: Ed25519Public, buf: &mut Vec<u8>) {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(<Ed25519Public as UniffiCustomTypeConverter>::from_custom(obj), buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::Result<r#Ed25519Public> {
+        <Ed25519Public as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?)
+    }
+}
+// Type `H256` wraps a `Sequenceu8`
+#[doc(hidden)]
+pub struct FfiConverterTypeH256;
+
+unsafe impl uniffi::FfiConverter for FfiConverterTypeH256 {
+    type RustType = r#H256;
+    type FfiType = uniffi::RustBuffer;
+
+    fn lower(obj: H256 ) -> Self::FfiType {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::lower(<H256 as UniffiCustomTypeConverter>::from_custom(obj))
+    }
+
+    fn try_lift(v: Self::FfiType) -> uniffi::Result<H256> {
+        <r#H256 as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_lift(v)?)
+    }
+
+    fn write(obj: H256, buf: &mut Vec<u8>) {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(<H256 as UniffiCustomTypeConverter>::from_custom(obj), buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::Result<r#H256> {
+        <H256 as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?)
+    }
+}
+// Type `MultiSigner` wraps a `Sequencestring`
+#[doc(hidden)]
+pub struct FfiConverterTypeMultiSigner;
+
+unsafe impl uniffi::FfiConverter for FfiConverterTypeMultiSigner {
+    type RustType = r#MultiSigner;
+    type FfiType = uniffi::RustBuffer;
+
+    fn lower(obj: MultiSigner ) -> Self::FfiType {
+        <std::vec::Vec<String> as uniffi::FfiConverter>::lower(<MultiSigner as UniffiCustomTypeConverter>::from_custom(obj))
+    }
+
+    fn try_lift(v: Self::FfiType) -> uniffi::Result<MultiSigner> {
+        <r#MultiSigner as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<String> as uniffi::FfiConverter>::try_lift(v)?)
+    }
+
+    fn write(obj: MultiSigner, buf: &mut Vec<u8>) {
+        <std::vec::Vec<String> as uniffi::FfiConverter>::write(<MultiSigner as UniffiCustomTypeConverter>::from_custom(obj), buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::Result<r#MultiSigner> {
+        <MultiSigner as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<String> as uniffi::FfiConverter>::try_read(buf)?)
+    }
+}
+// Type `Sr25519Public` wraps a `Sequenceu8`
+#[doc(hidden)]
+pub struct FfiConverterTypeSr25519Public;
+
+unsafe impl uniffi::FfiConverter for FfiConverterTypeSr25519Public {
+    type RustType = r#Sr25519Public;
+    type FfiType = uniffi::RustBuffer;
+
+    fn lower(obj: Sr25519Public ) -> Self::FfiType {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::lower(<Sr25519Public as UniffiCustomTypeConverter>::from_custom(obj))
+    }
+
+    fn try_lift(v: Self::FfiType) -> uniffi::Result<Sr25519Public> {
+        <r#Sr25519Public as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_lift(v)?)
+    }
+
+    fn write(obj: Sr25519Public, buf: &mut Vec<u8>) {
+        <std::vec::Vec<u8> as uniffi::FfiConverter>::write(<Sr25519Public as UniffiCustomTypeConverter>::from_custom(obj), buf);
+    }
+
+    fn try_read(buf: &mut &[u8]) -> uniffi::Result<r#Sr25519Public> {
+        <Sr25519Public as UniffiCustomTypeConverter>::into_custom(<std::vec::Vec<u8> as uniffi::FfiConverter>::try_read(buf)?)
+    }
+}
+
+// The `reexport_uniffi_scaffolding` macro
+// Code to re-export the UniFFI scaffolding functions.
+//
+// Rust won't always re-export the functions from dependencies
+// ([rust-lang#50007](https://github.com/rust-lang/rust/issues/50007))
+//
+// A workaround for this is to have the dependent crate reference a function from its dependency in
+// an extern "C" function. This is clearly hacky and brittle, but at least we have some unittests
+// that check if this works (fixtures/reexport-scaffolding-macro).
+//
+// The main way we use this macro is for that contain multiple UniFFI components (libxul,
+// megazord).  The combined library has a cargo dependency for each component and calls
+// uniffi_reexport_scaffolding!() for each one.
+
+#[doc(hidden)]
+pub fn uniffi_reexport_hack() {
+}
+
+#[macro_export]
+macro_rules! uniffi_reexport_scaffolding {
+    () => {
+        #[doc(hidden)]
+        #[no_mangle]
+        pub extern "C" fn signer_uniffi_reexport_hack() {
+            $crate::uniffi_reexport_hack()
+        }
+    };
+}
\ No newline at end of file diff --git a/rustdocs/src/signer/lib.rs.html b/rustdocs/src/signer/lib.rs.html new file mode 100644 index 0000000000..7934c9b0ed --- /dev/null +++ b/rustdocs/src/signer/lib.rs.html @@ -0,0 +1,1385 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+
// Copyright 2015-2021 Parity Technologies (UK) Ltd.
+// This file is part of Parity.
+
+// Parity 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.
+
+// Parity 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 Parity.  If not, see <http://www.gnu.org/licenses/>.
+
+//! This crate serves as interface between native frontend and Rust code. Try to avoid placing any
+//! logic here, just interfacing. When porting to new platform, all Rust changes will probably
+//! happen here.
+
+#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+#![allow(clippy::let_unit_value)]
+
+mod ffi_types;
+
+use crate::ffi_types::*;
+use db_handling::identities::{import_all_addrs, inject_derivations_has_pwd};
+use db_handling::{Error as DbHandlingError, Error};
+use definitions::keyring::AddressKey;
+use lazy_static::lazy_static;
+use navigator::Error as NavigatorError;
+use sled::Db;
+use std::{
+    collections::HashMap,
+    fmt::Display,
+    str::FromStr,
+    sync::{Arc, RwLock},
+};
+use transaction_parsing::dynamic_derivations::process_dynamic_derivations;
+use transaction_parsing::entry_to_transactions_with_decoding;
+use transaction_parsing::Error as TxParsingError;
+use transaction_signing::SufficientContent;
+
+lazy_static! {
+    static ref DB: Arc<RwLock<Option<Db>>> = Arc::new(RwLock::new(None));
+}
+
+/// Container for severe error message
+///
+/// TODO: implement properly or remove completely
+#[derive(Debug)]
+pub enum ErrorDisplayed {
+    /// String description of error
+    Str {
+        /// Error description
+        s: String,
+    },
+    MutexPoisoned,
+    DbNotInitialized,
+    /// Tried to load metadata for unknown network.
+    LoadMetaUnknownNetwork {
+        /// Name of the network not known to the Vault.
+        name: String,
+    },
+    /// Tried to add specs already present in Vault.
+    SpecsKnown {
+        name: String,
+        encryption: Encryption,
+    },
+    /// The metadata with this network version already in db.
+    MetadataKnown {
+        name: String,
+        version: u32,
+    },
+    /// Do not have an up-to-date version of metadata in db
+    MetadataOutdated {
+        name: String,
+        have: u32,
+        want: u32,
+    },
+    /// Tried to sign transaction with an unknown network
+    UnknownNetwork {
+        genesis_hash: H256,
+        encryption: Encryption,
+    },
+    /// No metadata for a known network found in store
+    NoMetadata {
+        name: String,
+    },
+    /// Provided password is incorrect
+    WrongPassword,
+    /// Database schema mismatch
+    DbSchemaMismatch,
+}
+
+impl From<NavigatorError> for ErrorDisplayed {
+    fn from(e: NavigatorError) -> Self {
+        match &e {
+            NavigatorError::MutexPoisoned => Self::MutexPoisoned,
+            NavigatorError::DbNotInitialized => Self::DbNotInitialized,
+            NavigatorError::TransactionParsing(t) => match t {
+                TxParsingError::LoadMetaUnknownNetwork { name } => {
+                    Self::LoadMetaUnknownNetwork { name: name.clone() }
+                }
+                TxParsingError::SpecsKnown { name, encryption } => Self::SpecsKnown {
+                    name: name.clone(),
+                    encryption: *encryption,
+                },
+                TxParsingError::MetadataKnown { name, version } => Self::MetadataKnown {
+                    name: name.clone(),
+                    version: *version,
+                },
+                TxParsingError::AllExtensionsParsingFailed {
+                    ref network_name,
+                    ref errors,
+                } => {
+                    if let Some((want, parser::Error::WrongNetworkVersion { in_metadata, .. })) =
+                        errors.first()
+                    {
+                        Self::MetadataOutdated {
+                            name: network_name.to_string(),
+                            have: *in_metadata,
+                            want: *want,
+                        }
+                    } else {
+                        Self::Str { s: format!("{e}") }
+                    }
+                }
+                TxParsingError::UnknownNetwork {
+                    genesis_hash,
+                    encryption,
+                } => Self::UnknownNetwork {
+                    genesis_hash: *genesis_hash,
+                    encryption: *encryption,
+                },
+                TxParsingError::NoMetadata { name } => Self::NoMetadata {
+                    name: name.to_string(),
+                },
+                _ => Self::Str { s: format!("{e}") },
+            },
+            NavigatorError::TransactionSigning(transaction_signing::Error::WrongPassword) => {
+                Self::WrongPassword
+            }
+            _ => Self::Str { s: format!("{e}") },
+        }
+    }
+}
+
+impl From<DbHandlingError> for ErrorDisplayed {
+    fn from(e: DbHandlingError) -> Self {
+        match &e {
+            Error::DbSchemaMismatch { .. } => Self::DbSchemaMismatch,
+            _ => Self::Str { s: format!("{e}") },
+        }
+    }
+}
+
+impl From<anyhow::Error> for ErrorDisplayed {
+    fn from(e: anyhow::Error) -> Self {
+        Self::Str {
+            s: format!("error on signer side: {e}"),
+        }
+    }
+}
+
+impl FromStr for ErrorDisplayed {
+    type Err = ();
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        Ok(ErrorDisplayed::Str { s: s.to_string() })
+    }
+}
+
+impl From<String> for ErrorDisplayed {
+    fn from(s: String) -> Self {
+        ErrorDisplayed::Str { s }
+    }
+}
+
+impl Display for ErrorDisplayed {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        f.write_str("TODO")
+    }
+}
+
+/// An error type for QR sequence decoding errors.
+#[derive(Debug)]
+pub enum QrSequenceDecodeError {
+    BananaSplitWrongPassword,
+    BananaSplit { s: String },
+    GenericError { s: String },
+}
+
+impl Display for QrSequenceDecodeError {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        f.write_str("TODO")
+    }
+}
+
+impl From<qr_reader_phone::Error> for QrSequenceDecodeError {
+    fn from(value: qr_reader_phone::Error) -> Self {
+        match value {
+            qr_reader_phone::Error::BananaSplitWrongPassword => Self::BananaSplitWrongPassword,
+            qr_reader_phone::Error::BananaSplitError(e) => Self::BananaSplit { s: format!("{e}") },
+            other => QrSequenceDecodeError::GenericError {
+                s: format!("{other}"),
+            },
+        }
+    }
+}
+
+include!(concat!(env!("OUT_DIR"), "/signer.uniffi.rs"));
+
+fn action_get_name(action: &Action) -> Option<FooterButton> {
+    match action {
+        Action::NavbarLog => Some(FooterButton::Log),
+        Action::NavbarScan => Some(FooterButton::Scan),
+        Action::NavbarKeys => Some(FooterButton::Keys),
+        Action::NavbarSettings => Some(FooterButton::Settings),
+        Action::GoBack => Some(FooterButton::Back),
+        _ => None,
+    }
+}
+
+/// Perform action in frontend.
+///
+/// This call should be debounced.
+///
+/// Action tries to acquire lock on app state mutex and is ignored on failure.
+///
+/// `seed_phrase` field is zeroized, it is expected to be used for secrets only.
+///
+/// `details` field is not always zeroized.
+///
+/// App view contents are returned as result, this should be sufficient to render view.
+fn backend_action(
+    action: Action,
+    details: &str,
+    seed_phrase: &str,
+) -> Result<ActionResult, ErrorDisplayed> {
+    Ok(navigator::do_action(action, details, seed_phrase)?)
+}
+
+/// Should be called once at start of the app and could be called on app reset
+///
+/// Accepts list of seed names to avoid calling [`update_seed_names`] every time
+fn init_navigation(dbname: &str, seed_names: Vec<String>) -> Result<(), ErrorDisplayed> {
+    let val = Some(sled::open(dbname).map_err(|e| ErrorDisplayed::from(e.to_string()))?);
+
+    *DB.write().unwrap() = val;
+    init_logging("Vault".to_string());
+    Ok(navigator::init_navigation(
+        DB.clone().read().unwrap().as_ref().unwrap().clone(),
+        seed_names,
+    )?)
+}
+
+/// Should be called every time any change could have been done to seeds. Accepts updated list of
+/// seeds, completely disregards previously known list
+fn update_seed_names(seed_names: Vec<String>) -> Result<(), ErrorDisplayed> {
+    Ok(navigator::update_seed_names(seed_names)?)
+}
+
+/// Determines estimated required number of multiframe QR that should be gathered before decoding
+/// is attempted
+fn qrparser_get_packets_total(data: &str, cleaned: bool) -> anyhow::Result<u32, ErrorDisplayed> {
+    qr_reader_phone::get_length(data, cleaned).map_err(|e| e.to_string().into())
+}
+
+/// Attempts to convert QR data (transfered as json-like string) into decoded but not parsed UOS
+/// payload
+///
+/// `cleaned` is platform-specific flag indicating whether QR payloads have QR prefix stripped by
+/// QR parsing code
+fn qrparser_try_decode_qr_sequence(
+    data: &[String],
+    password: Option<String>,
+    cleaned: bool,
+) -> anyhow::Result<DecodeSequenceResult, QrSequenceDecodeError> {
+    let res = qr_reader_phone::decode_sequence(data, &password, cleaned);
+
+    Ok(res?)
+}
+
+fn get_db() -> Result<sled::Db, ErrorDisplayed> {
+    DB.read()
+        .unwrap()
+        .clone()
+        .ok_or(ErrorDisplayed::DbNotInitialized)
+}
+
+/// Exports secret (private) key as QR code
+///
+/// `public_key` is hex-encoded public key of the key to export. Can be taken from [`MKeyDetails`]
+/// `network_specs_key` is hex-encoded [`NetworkSpecsKey`]. Can be taken from [`MSCNetworkInfo`]
+fn generate_secret_key_qr(
+    public_key: &str,
+    expected_seed_name: &str,
+    network_specs_key: &str,
+    seed_phrase: &str,
+    key_password: Option<String>,
+) -> Result<MKeyDetails, ErrorDisplayed> {
+    db_handling::identities::export_secret_key(
+        &get_db()?,
+        public_key,
+        expected_seed_name,
+        network_specs_key,
+        seed_phrase,
+        key_password,
+    )
+    .map_err(|e| e.to_string().into())
+}
+
+fn import_derivations(seed_derived_keys: Vec<SeedKeysPreview>) -> Result<(), ErrorDisplayed> {
+    import_all_addrs(&get_db()?, seed_derived_keys).map_err(|e| e.to_string().into())
+}
+
+/// Calculate if derivation path has a password
+fn populate_derivations_has_pwd(
+    seeds: HashMap<String, String>,
+    seed_derived_keys: Vec<SeedKeysPreview>,
+) -> Result<Vec<SeedKeysPreview>, anyhow::Error> {
+    inject_derivations_has_pwd(seed_derived_keys, seeds).map_err(Into::into)
+}
+
+fn preview_dynamic_derivations(
+    seeds: HashMap<String, String>,
+    payload: String,
+) -> Result<DDPreview, ErrorDisplayed> {
+    process_dynamic_derivations(&get_db()?, seeds, &payload).map_err(|e| e.to_string().into())
+}
+
+/// Checks derivation path for validity and collisions
+///
+/// Returns struct that has information on collisions, presence of password and validity of path;
+/// in case of valid path without collisions frontend should make a decision on whether to access
+/// secure storage already or check password by requesting user to re-type it, so this could not be
+/// isolated in backend navigation for now.
+fn substrate_path_check(
+    seed_name: &str,
+    path: &str,
+    network: &str,
+) -> Result<DerivationCheck, ErrorDisplayed> {
+    Ok(db_handling::interface_signer::dynamic_path_check(
+        &get_db()?,
+        seed_name,
+        path,
+        network,
+    ))
+}
+
+fn try_create_address(
+    seed_name: &str,
+    seed_phrase: &str,
+    path: &str,
+    network: &str,
+) -> anyhow::Result<(), ErrorDisplayed> {
+    let network = NetworkSpecsKey::from_hex(network).map_err(|e| format!("{e}"))?;
+    db_handling::identities::try_create_address(&get_db()?, seed_name, seed_phrase, path, &network)
+        .map_err(|e| e.to_string().into())
+}
+
+/// Must be called with `DecodeSequenceResult::DynamicDerivationTransaction` payload
+fn sign_dd_transaction(
+    payload: &[String],
+    seeds: HashMap<String, String>,
+) -> Result<MSignedTransaction, ErrorDisplayed> {
+    navigator::sign_dd_transaction(&get_db()?, payload, seeds).map_err(|e| e.to_string().into())
+}
+
+/// Must be called once on normal first start of the app upon accepting conditions; relies on old
+/// data being already removed
+fn history_init_history_with_cert() -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::cold_default::signer_init_with_cert(&get_db()?).map_err(|e| e.to_string().into())
+}
+
+/// Must be called once upon jailbreak (removal of general verifier) after all old data was removed
+fn history_init_history_no_cert() -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::cold_default::signer_init_no_cert(&get_db()?).map_err(|e| e.to_string().into())
+}
+
+/// Must be called every time network detector detects network. Sets alert flag in database that could
+/// only be reset by full reset or calling [`history_acknowledge_warnings`]
+///
+/// This changes log, so it is expected to fail all operations that check that database remained
+/// intact
+fn history_device_was_online() -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::manage_history::device_was_online(&get_db()?).map_err(|e| e.to_string().into())
+}
+
+/// Checks if network alert flag was set
+fn history_get_warnings() -> anyhow::Result<bool, ErrorDisplayed> {
+    db_handling::helpers::get_danger_status(&get_db()?).map_err(|e| e.to_string().into())
+}
+
+/// Resets network alert flag; makes record of reset in log
+fn history_acknowledge_warnings() -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::manage_history::reset_danger_status_to_safe(&get_db()?)
+        .map_err(|e| e.to_string().into())
+}
+
+/// Allows frontend to send events into log; TODO: maybe this is not needed
+fn history_entry_system(event: Event) -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::manage_history::history_entry_system(&get_db()?, event)
+        .map_err(|e| e.to_string().into())
+}
+
+/// Must be called every time seed backup shows seed to user
+///
+/// Makes record in log
+fn history_seed_was_shown(seed_name: &str) -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::manage_history::seed_name_was_shown(&get_db()?, seed_name.to_string())
+        .map_err(|e| e.to_string().into())
+}
+
+fn export_key_info(
+    seed_name: &str,
+    exported_set: ExportedSet,
+) -> anyhow::Result<MKeysInfoExport, ErrorDisplayed> {
+    navigator::export_key_info(&get_db()?, seed_name, exported_set)
+        .map_err(|e| e.to_string().into())
+}
+
+fn keys_by_seed_name(seed_name: &str) -> anyhow::Result<MKeysNew, ErrorDisplayed> {
+    navigator::keys_by_seed_name(&get_db()?, seed_name).map_err(|e| e.to_string().into())
+}
+
+/// Encode binary info into qr code
+fn encode_to_qr(payload: &[u8], is_danger: bool) -> anyhow::Result<Vec<u8>, String> {
+    use qrcode_static::DataType;
+    let sensitivity = if is_danger {
+        DataType::Sensitive
+    } else {
+        DataType::Regular
+    };
+    qrcode_static::png_qr(payload, sensitivity).map_err(|e| format!("{e}"))
+}
+
+/// Get all networks registered within this device
+fn get_managed_networks() -> anyhow::Result<MManageNetworks, ErrorDisplayed> {
+    Ok(MManageNetworks {
+        networks: db_handling::interface_signer::show_all_networks(&get_db()?)
+            .map_err(|e| e.to_string())?,
+    })
+}
+
+fn get_logs() -> anyhow::Result<MLog, ErrorDisplayed> {
+    let history = db_handling::manage_history::get_history(&get_db()?)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+    let log: Vec<_> = history
+        .into_iter()
+        .map(|(order, entry)| History {
+            order: order.stamp(),
+            timestamp: entry.timestamp,
+            events: entry.events,
+        })
+        .collect();
+
+    Ok(MLog { log })
+}
+
+fn get_log_details(order: u32) -> anyhow::Result<MLogDetails, ErrorDisplayed> {
+    let e = db_handling::manage_history::get_history_entry_by_order(&get_db()?, order)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+
+    let timestamp = e.timestamp.clone();
+
+    let events = entry_to_transactions_with_decoding(&get_db()?, e)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+
+    Ok(MLogDetails { timestamp, events })
+}
+
+fn clear_log_history() -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::manage_history::clear_history(&get_db()?)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn handle_log_comment(string_from_user: &str) -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::manage_history::history_entry_user(&get_db()?, string_from_user)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn get_seeds(names_phone_knows: &[String]) -> anyhow::Result<MSeeds, ErrorDisplayed> {
+    let seed_name_cards = db_handling::interface_signer::get_all_seed_names_with_identicons(
+        &get_db()?,
+        names_phone_knows,
+    )
+    .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+
+    Ok(MSeeds { seed_name_cards })
+}
+
+fn get_key_set_public_key(
+    address: &str,
+    network_specs_key: &str,
+) -> anyhow::Result<MKeyDetails, ErrorDisplayed> {
+    let address_key =
+        AddressKey::from_hex(address).map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+
+    let network_specs_key = NetworkSpecsKey::from_hex(network_specs_key)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+
+    let address_details = db_handling::helpers::get_address_details(&get_db()?, &address_key)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+
+    db_handling::interface_signer::export_key(
+        &get_db()?,
+        address_key.multi_signer(),
+        &address_details.seed_name,
+        &network_specs_key,
+    )
+    .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn remove_derived_key(
+    address: &str,
+    network_specs_key: &str,
+) -> anyhow::Result<(), ErrorDisplayed> {
+    let address_key =
+        AddressKey::from_hex(address).map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+    let network_specs_key = NetworkSpecsKey::from_hex(network_specs_key)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+    db_handling::identities::remove_key(&get_db()?, address_key.multi_signer(), &network_specs_key)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn remove_key_set(seed_name: &str) -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::identities::remove_seed(&get_db()?, seed_name)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn get_managed_network_details(
+    network_key: &str,
+) -> anyhow::Result<MNetworkDetails, ErrorDisplayed> {
+    let network_key = NetworkSpecsKey::from_hex(network_key).map_err(|e| format!("{e}"))?;
+    db_handling::interface_signer::network_details_by_key(&get_db()?, &network_key)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn remove_metadata_on_managed_network(
+    network_key: &str,
+    metadata_specs_version: &str,
+) -> anyhow::Result<(), ErrorDisplayed> {
+    let network_key = NetworkSpecsKey::from_hex(network_key).map_err(|e| format!("{e}"))?;
+    let version = metadata_specs_version
+        .parse::<u32>()
+        .map_err(|e| format!("{e}"))?;
+    db_handling::helpers::remove_metadata(&get_db()?, &network_key, version)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn seed_phrase_guess_words(user_input: &str) -> Vec<String> {
+    db_handling::interface_signer::guess(user_input)
+        .into_iter()
+        .map(|s| s.to_owned())
+        .collect()
+}
+
+fn get_verifier_details() -> anyhow::Result<MVerifierDetails, ErrorDisplayed> {
+    Ok(db_handling::helpers::get_general_verifier(&get_db()?)
+        .map_err(|e| e.to_string())?
+        .show_card())
+}
+
+fn remove_managed_network(network_key: &str) -> anyhow::Result<(), ErrorDisplayed> {
+    let network_key = NetworkSpecsKey::from_hex(network_key).map_err(|e| format!("{e}"))?;
+    db_handling::helpers::remove_network(&get_db()?, &network_key)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn print_new_seed(new_seed_name: &str) -> anyhow::Result<MNewSeedBackup, ErrorDisplayed> {
+    db_handling::interface_signer::print_new_seed(new_seed_name)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn validate_seed_phrase(seed_phrase: &str) -> bool {
+    db_handling::helpers::validate_mnemonic(seed_phrase)
+}
+
+fn create_key_set(
+    seed_name: &str,
+    seed_phrase: &str,
+    networks: Vec<String>,
+) -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::identities::create_key_set(&get_db()?, seed_name, seed_phrase, networks)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))
+}
+
+fn check_db_version() -> anyhow::Result<(), ErrorDisplayed> {
+    db_handling::helpers::assert_db_version(&get_db()?).map_err(ErrorDisplayed::from)
+}
+
+fn get_keys_for_signing() -> Result<MSignSufficientCrypto, ErrorDisplayed> {
+    let identities = db_handling::interface_signer::print_all_identities(&get_db()?)
+        .map_err(|e| ErrorDisplayed::from(e.to_string()))?;
+    Ok(MSignSufficientCrypto { identities })
+}
+
+fn validate_key_password(
+    address_key: &str,
+    seed_phrase: &str,
+    password: &str,
+) -> Result<bool, ErrorDisplayed> {
+    let address_key = AddressKey::from_hex(address_key).map_err(|e| format!("{e}"))?;
+    db_handling::identities::validate_key_password(&get_db()?, &address_key, seed_phrase, password)
+        .map_err(|e| e.into())
+}
+
+fn sign_metadata_with_key(
+    network_key: &str,
+    metadata_specs_version: &str,
+    signing_address_key: &str,
+    seed_phrase: &str,
+    password: Option<String>,
+) -> Result<MSufficientCryptoReady, ErrorDisplayed> {
+    let network_key = NetworkSpecsKey::from_hex(network_key).map_err(|e| format!("{e}"))?;
+    let version = metadata_specs_version
+        .parse::<u32>()
+        .map_err(|e| format!("{e}"))?;
+    let address_key = AddressKey::from_hex(signing_address_key).map_err(|e| format!("{e}"))?;
+    navigator::sign_sufficient_content(
+        &get_db()?,
+        &address_key,
+        SufficientContent::LoadMeta(network_key, version),
+        seed_phrase,
+        &password.unwrap_or("".to_owned()),
+    )
+    .map_err(|e| e.into())
+}
+
+fn sign_network_spec_with_key(
+    network_key: &str,
+    signing_address_key: &str,
+    seed_phrase: &str,
+    password: Option<String>,
+) -> Result<MSufficientCryptoReady, ErrorDisplayed> {
+    let network_key = NetworkSpecsKey::from_hex(network_key).map_err(|e| format!("{e}"))?;
+    let address_key = AddressKey::from_hex(signing_address_key).map_err(|e| format!("{e}"))?;
+    navigator::sign_sufficient_content(
+        &get_db()?,
+        &address_key,
+        SufficientContent::AddSpecs(network_key),
+        seed_phrase,
+        &password.unwrap_or("".to_owned()),
+    )
+    .map_err(|e| e.into())
+}
+
+/// Must be called once to initialize logging from Rust in development mode.
+///
+/// Do not use in production.
+#[cfg(target_os = "android")]
+fn init_logging(tag: String) {
+    android_logger::init_once(
+        android_logger::Config::default()
+            .with_max_level(log::LevelFilter::Trace) // limit log level
+            .with_tag(tag) // logs will show under mytag tag
+            .with_filter(
+                // configure messages for specific crate
+                android_logger::FilterBuilder::new()
+                    .parse("debug,hello::crate=error")
+                    .build(),
+            ),
+    );
+}
+
+#[cfg(target_os = "ios")]
+fn init_logging(_tag: String) {
+    use uniffi::deps::log::LevelFilter;
+
+    let _ = oslog::OsLogger::new("io.parity.signer")
+        .level_filter(LevelFilter::Warn)
+        .category_level_filter("SIGNER", LevelFilter::Trace)
+        .init();
+}
+
+/// Placeholder to init logging on non-android platforms
+///
+/// TODO: is this used?
+#[cfg(all(not(target_os = "ios"), not(target_os = "android")))]
+fn init_logging(_tag: String) {
+    env_logger::init();
+}
+
+ffi_support::define_string_destructor!(signer_destroy_string);
+
+#[cfg(test)]
+mod tests {
+    //use super::*;
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/add_specs.rs.html b/rustdocs/src/transaction_parsing/add_specs.rs.html new file mode 100644 index 0000000000..ea2f0153c0 --- /dev/null +++ b/rustdocs/src/transaction_parsing/add_specs.rs.html @@ -0,0 +1,1327 @@ +add_specs.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+
use db_handling::{
+    db_transactions::TrDbColdStub,
+    helpers::{genesis_hash_in_specs, get_general_verifier, try_get_valid_current_verifier},
+};
+use definitions::{
+    error::TransferContent,
+    error_signer::GeneralVerifierForContent,
+    history::Event,
+    keyring::{NetworkSpecsKey, VerifierKey},
+    navigation::TransactionCardSet,
+    network_specs::{ValidCurrentVerifier, Verifier},
+    qr_transfers::ContentAddSpecs,
+};
+
+use crate::cards::{Card, Warning};
+use crate::check_signature::pass_crypto;
+use crate::error::{Error, Result};
+use crate::helpers::specs_are_new;
+use crate::{StubNav, TransactionAction};
+
+use crate::holds::{GeneralHold, Hold, HoldRelease};
+
+pub fn add_specs(database: &sled::Db, data_hex: &str) -> Result<TransactionAction> {
+    let checked_info = pass_crypto(data_hex, TransferContent::AddSpecs)?;
+    let specs = ContentAddSpecs::from_slice(&checked_info.message).specs()?;
+    let network_specs_key = NetworkSpecsKey::from_parts(&specs.genesis_hash, &specs.encryption);
+    let verifier_key = VerifierKey::from_parts(specs.genesis_hash);
+    let possible_valid_current_verifier = try_get_valid_current_verifier(database, &verifier_key)?;
+    let general_verifier = get_general_verifier(database)?;
+    if let Some(specs_invariants) = genesis_hash_in_specs(database, specs.genesis_hash)? {
+        if specs.name != specs_invariants.name {
+            return Err(Error::AddSpecsDifferentName {
+                genesis_hash: specs_invariants.genesis_hash,
+                name_database: specs_invariants.name,
+                name_input: specs.name,
+            });
+        }
+        if specs.base58prefix != specs_invariants.base58prefix {
+            return Err(Error::AddSpecsDifferentBase58 {
+                genesis_hash: specs_invariants.genesis_hash,
+                name: specs_invariants.name,
+                base58_database: specs_invariants.base58prefix,
+                base58_input: specs.base58prefix,
+            });
+        }
+    }
+    let mut stub = TrDbColdStub::new();
+    let mut index = 0;
+
+    match possible_valid_current_verifier {
+        None => match checked_info.verifier {
+            Verifier { v: None } => {
+                stub = stub.new_history_entry(Event::Warning {
+                    warning: Warning::NotVerified.show(),
+                });
+                stub = stub.add_network_specs(
+                    database,
+                    &specs,
+                    &ValidCurrentVerifier::Custom {
+                        v: Verifier { v: None },
+                    },
+                    &general_verifier,
+                )?;
+                stub = stub.new_network_verifier(
+                    &verifier_key,
+                    &ValidCurrentVerifier::Custom {
+                        v: Verifier { v: None },
+                    },
+                    &general_verifier,
+                );
+                let checksum = stub.store_and_get_checksum(database)?;
+                let warning_card = Card::Warning(Warning::NotVerified).card(&mut index, 0);
+                let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                Ok(TransactionAction::Stub {
+                    s: Box::new(TransactionCardSet {
+                        warning: Some(vec![warning_card]),
+                        new_specs: Some(vec![specs_card]),
+                        ..Default::default()
+                    }),
+                    u: checksum,
+                    stub: StubNav::AddSpecs {
+                        n: network_specs_key,
+                    },
+                })
+            }
+            Verifier {
+                v: Some(ref new_verifier_value),
+            } => {
+                let verifier_card = Card::Verifier(new_verifier_value).card(&mut index, 0);
+                match general_verifier {
+                    Verifier { v: None } => {
+                        let new_general_verifier = checked_info.verifier;
+                        let general_hold = GeneralHold::get(database)?;
+                        stub = general_hold.upd_stub(database, stub, &new_general_verifier)?;
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::General,
+                            &new_general_verifier,
+                        )?;
+                        stub = stub.new_network_verifier(
+                            &verifier_key,
+                            &ValidCurrentVerifier::General,
+                            &new_general_verifier,
+                        );
+                        let warning_card =
+                            Card::Warning(Warning::GeneralVerifierAppeared(&general_hold))
+                                .card(&mut index, 0);
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        Ok(TransactionAction::Stub {
+                            s: Box::new(TransactionCardSet {
+                                verifier: Some(vec![verifier_card]),
+                                warning: Some(vec![warning_card]),
+                                new_specs: Some(vec![specs_card]),
+                                ..Default::default()
+                            }),
+                            u: checksum,
+                            stub: StubNav::AddSpecs {
+                                n: network_specs_key,
+                            },
+                        })
+                    }
+                    _ => {
+                        if checked_info.verifier == general_verifier {
+                            stub = stub.add_network_specs(
+                                database,
+                                &specs,
+                                &ValidCurrentVerifier::General,
+                                &general_verifier,
+                            )?;
+                            stub = stub.new_network_verifier(
+                                &verifier_key,
+                                &ValidCurrentVerifier::General,
+                                &general_verifier,
+                            );
+                            let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                            let checksum = stub.store_and_get_checksum(database)?;
+                            Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            })
+                        } else {
+                            stub = stub.add_network_specs(
+                                database,
+                                &specs,
+                                &ValidCurrentVerifier::Custom {
+                                    v: checked_info.verifier.to_owned(),
+                                },
+                                &general_verifier,
+                            )?;
+                            stub = stub.new_network_verifier(
+                                &verifier_key,
+                                &ValidCurrentVerifier::Custom {
+                                    v: checked_info.verifier,
+                                },
+                                &general_verifier,
+                            );
+                            let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                            let checksum = stub.store_and_get_checksum(database)?;
+                            Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            })
+                        }
+                    }
+                }
+            }
+        },
+        Some(ValidCurrentVerifier::Custom { v: custom_verifier }) => match custom_verifier {
+            Verifier { v: None } => match checked_info.verifier {
+                Verifier { v: None } => {
+                    stub = stub.new_history_entry(Event::Warning {
+                        warning: Warning::NotVerified.show(),
+                    });
+                    let warning_card = Card::Warning(Warning::NotVerified).card(&mut index, 0);
+                    if specs_are_new(database, &specs)? {
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::Custom {
+                                v: Verifier { v: None },
+                            },
+                            &general_verifier,
+                        )?;
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        Ok(TransactionAction::Stub {
+                            s: Box::new(TransactionCardSet {
+                                warning: Some(vec![warning_card]),
+                                new_specs: Some(vec![specs_card]),
+                                ..Default::default()
+                            }),
+                            u: checksum,
+                            stub: StubNav::AddSpecs {
+                                n: network_specs_key,
+                            },
+                        })
+                    } else {
+                        Err(Error::SpecsKnown {
+                            name: specs.name,
+                            encryption: specs.encryption,
+                        })
+                    }
+                }
+                Verifier {
+                    v: Some(ref new_verifier_value),
+                } => {
+                    let verifier_card = Card::Verifier(new_verifier_value).card(&mut index, 0);
+                    let hold = Hold::get(database, &verifier_key)?;
+                    if checked_info.verifier == general_verifier {
+                        stub = hold.upd_stub(
+                            database,
+                            stub,
+                            &verifier_key,
+                            &custom_verifier,
+                            &ValidCurrentVerifier::General,
+                            HoldRelease::General,
+                        )?;
+                        let warning_card_1 = Card::Warning(Warning::VerifierChangingToGeneral {
+                            verifier_key: &verifier_key,
+                            hold: &hold,
+                        })
+                        .card(&mut index, 0);
+                        let mut possible_warning = None;
+                        if !specs_are_new(database, &specs)? {
+                            possible_warning = Some(
+                                Card::Warning(Warning::NetworkSpecsAlreadyThere(&specs.title))
+                                    .card(&mut index, 0),
+                            );
+                            stub = stub.new_history_entry(Event::Warning {
+                                warning: Warning::NetworkSpecsAlreadyThere(&specs.title).show(),
+                            });
+                        };
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::General,
+                            &general_verifier,
+                        )?;
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        match possible_warning {
+                            None => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![warning_card_1]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                            Some(warning_card_2) => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![warning_card_1, warning_card_2]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                        }
+                    } else if general_verifier.v.is_none() {
+                        let new_general_verifier = checked_info.verifier;
+                        stub = hold.upd_stub(
+                            database,
+                            stub,
+                            &verifier_key,
+                            &custom_verifier,
+                            &ValidCurrentVerifier::General,
+                            HoldRelease::GeneralSuper,
+                        )?;
+                        let warning_card_1 = Card::Warning(Warning::VerifierGeneralSuper {
+                            verifier_key: &verifier_key,
+                            hold: &hold,
+                        })
+                        .card(&mut index, 0);
+                        let general_hold = GeneralHold::get(database)?;
+                        stub = general_hold.upd_stub(database, stub, &new_general_verifier)?;
+                        let warning_card_2 =
+                            Card::Warning(Warning::GeneralVerifierAppeared(&general_hold))
+                                .card(&mut index, 0);
+                        let mut possible_warning = None;
+                        if !specs_are_new(database, &specs)? {
+                            possible_warning = Some(
+                                Card::Warning(Warning::NetworkSpecsAlreadyThere(&specs.title))
+                                    .card(&mut index, 0),
+                            );
+                            stub = stub.new_history_entry(Event::Warning {
+                                warning: Warning::NetworkSpecsAlreadyThere(&specs.title).show(),
+                            });
+                        };
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::General,
+                            &general_verifier,
+                        )?;
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        match possible_warning {
+                            None => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![warning_card_1, warning_card_2]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                            Some(warning_card_3) => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![
+                                        warning_card_1,
+                                        warning_card_2,
+                                        warning_card_3,
+                                    ]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                        }
+                    } else {
+                        stub = hold.upd_stub(
+                            database,
+                            stub,
+                            &verifier_key,
+                            &custom_verifier,
+                            &ValidCurrentVerifier::Custom {
+                                v: checked_info.verifier.to_owned(),
+                            },
+                            HoldRelease::Custom,
+                        )?;
+                        let warning_card_1 = Card::Warning(Warning::VerifierChangingToCustom {
+                            verifier_key: &verifier_key,
+                            hold: &hold,
+                        })
+                        .card(&mut index, 0);
+                        let mut possible_warning = None;
+                        if !specs_are_new(database, &specs)? {
+                            possible_warning = Some(
+                                Card::Warning(Warning::NetworkSpecsAlreadyThere(&specs.title))
+                                    .card(&mut index, 0),
+                            );
+                            stub = stub.new_history_entry(Event::Warning {
+                                warning: Warning::NetworkSpecsAlreadyThere(&specs.title).show(),
+                            });
+                        };
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::Custom {
+                                v: checked_info.verifier.to_owned(),
+                            },
+                            &general_verifier,
+                        )?;
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        match possible_warning {
+                            None => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![warning_card_1]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                            Some(warning_card_2) => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![warning_card_1, warning_card_2]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                        }
+                    }
+                }
+            },
+            Verifier {
+                v: Some(ref old_verifier_value),
+            } => match checked_info.verifier {
+                Verifier { v: None } => Err(Error::NeedVerifier {
+                    name: specs.name,
+                    verifier_value: old_verifier_value.to_owned(),
+                }),
+                Verifier {
+                    v: Some(ref new_verifier_value),
+                } => {
+                    let verifier_card = Card::Verifier(new_verifier_value).card(&mut index, 0);
+                    if checked_info.verifier == general_verifier {
+                        let hold = Hold::get(database, &verifier_key)?;
+                        stub = hold.upd_stub(
+                            database,
+                            stub,
+                            &verifier_key,
+                            &custom_verifier,
+                            &ValidCurrentVerifier::General,
+                            HoldRelease::General,
+                        )?;
+                        let warning_card_1 = Card::Warning(Warning::VerifierChangingToGeneral {
+                            verifier_key: &verifier_key,
+                            hold: &hold,
+                        })
+                        .card(&mut index, 0);
+                        let mut possible_warning = None;
+                        if !specs_are_new(database, &specs)? {
+                            possible_warning = Some(
+                                Card::Warning(Warning::NetworkSpecsAlreadyThere(&specs.title))
+                                    .card(&mut index, 0),
+                            );
+                            stub = stub.new_history_entry(Event::Warning {
+                                warning: Warning::NetworkSpecsAlreadyThere(&specs.title).show(),
+                            });
+                        };
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::General,
+                            &general_verifier,
+                        )?;
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        match possible_warning {
+                            None => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![warning_card_1]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                            Some(warning_card_2) => Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    warning: Some(vec![warning_card_1, warning_card_2]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            }),
+                        }
+                    } else if new_verifier_value == old_verifier_value {
+                        if specs_are_new(database, &specs)? {
+                            stub = stub.add_network_specs(
+                                database,
+                                &specs,
+                                &ValidCurrentVerifier::Custom { v: custom_verifier },
+                                &general_verifier,
+                            )?;
+                            let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                            let checksum = stub.store_and_get_checksum(database)?;
+                            Ok(TransactionAction::Stub {
+                                s: Box::new(TransactionCardSet {
+                                    verifier: Some(vec![verifier_card]),
+                                    new_specs: Some(vec![specs_card]),
+                                    ..Default::default()
+                                }),
+                                u: checksum,
+                                stub: StubNav::AddSpecs {
+                                    n: network_specs_key,
+                                },
+                            })
+                        } else {
+                            Err(Error::SpecsKnown {
+                                name: specs.name,
+                                encryption: specs.encryption,
+                            })
+                        }
+                    } else {
+                        Err(Error::AddSpecsVerifierChanged {
+                            name: specs.name,
+                            old_verifier_value: old_verifier_value.to_owned(),
+                            new_verifier_value: new_verifier_value.to_owned(),
+                        })
+                    }
+                }
+            },
+        },
+        Some(ValidCurrentVerifier::General) => match general_verifier {
+            Verifier { v: None } => match checked_info.verifier {
+                Verifier { v: None } => {
+                    let warning_card = Card::Warning(Warning::NotVerified).card(&mut index, 0);
+                    stub = stub.new_history_entry(Event::Warning {
+                        warning: Warning::NotVerified.show(),
+                    });
+                    if specs_are_new(database, &specs)? {
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::General,
+                            &general_verifier,
+                        )?;
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        Ok(TransactionAction::Stub {
+                            s: Box::new(TransactionCardSet {
+                                warning: Some(vec![warning_card]),
+                                new_specs: Some(vec![specs_card]),
+                                ..Default::default()
+                            }),
+                            u: checksum,
+                            stub: StubNav::AddSpecs {
+                                n: network_specs_key,
+                            },
+                        })
+                    } else {
+                        Err(Error::SpecsKnown {
+                            name: specs.name,
+                            encryption: specs.encryption,
+                        })
+                    }
+                }
+                Verifier {
+                    v: Some(ref new_verifier_value),
+                } => {
+                    let verifier_card = Card::Verifier(new_verifier_value).card(&mut index, 0);
+                    let new_general_verifier = checked_info.verifier;
+                    let general_hold = GeneralHold::get(database)?;
+                    stub = general_hold.upd_stub(database, stub, &new_general_verifier)?;
+                    let warning_card_1 =
+                        Card::Warning(Warning::GeneralVerifierAppeared(&general_hold))
+                            .card(&mut index, 0);
+                    let mut possible_warning = None;
+                    if !specs_are_new(database, &specs)? {
+                        possible_warning = Some(
+                            Card::Warning(Warning::NetworkSpecsAlreadyThere(&specs.title))
+                                .card(&mut index, 0),
+                        );
+                        stub = stub.new_history_entry(Event::Warning {
+                            warning: Warning::NetworkSpecsAlreadyThere(&specs.title).show(),
+                        });
+                    };
+                    stub = stub.add_network_specs(
+                        database,
+                        &specs,
+                        &ValidCurrentVerifier::General,
+                        &new_general_verifier,
+                    )?;
+                    let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                    let checksum = stub.store_and_get_checksum(database)?;
+                    match possible_warning {
+                        None => Ok(TransactionAction::Stub {
+                            s: Box::new(TransactionCardSet {
+                                verifier: Some(vec![verifier_card]),
+                                warning: Some(vec![warning_card_1]),
+                                new_specs: Some(vec![specs_card]),
+                                ..Default::default()
+                            }),
+                            u: checksum,
+                            stub: StubNav::AddSpecs {
+                                n: network_specs_key,
+                            },
+                        }),
+                        Some(warning_card_2) => Ok(TransactionAction::Stub {
+                            s: Box::new(TransactionCardSet {
+                                verifier: Some(vec![verifier_card]),
+                                warning: Some(vec![warning_card_1, warning_card_2]),
+                                new_specs: Some(vec![specs_card]),
+                                ..Default::default()
+                            }),
+                            u: checksum,
+                            stub: StubNav::AddSpecs {
+                                n: network_specs_key,
+                            },
+                        }),
+                    }
+                }
+            },
+            Verifier {
+                v: Some(ref old_general_verifier_value),
+            } => {
+                if checked_info.verifier == general_verifier {
+                    if specs_are_new(database, &specs)? {
+                        let verifier_card =
+                            Card::Verifier(old_general_verifier_value).card(&mut index, 0);
+                        stub = stub.add_network_specs(
+                            database,
+                            &specs,
+                            &ValidCurrentVerifier::General,
+                            &general_verifier,
+                        )?;
+                        let specs_card = Card::NewSpecs(&specs).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        Ok(TransactionAction::Stub {
+                            s: Box::new(TransactionCardSet {
+                                verifier: Some(vec![verifier_card]),
+                                new_specs: Some(vec![specs_card]),
+                                ..Default::default()
+                            }),
+                            u: checksum,
+                            stub: StubNav::AddSpecs {
+                                n: network_specs_key,
+                            },
+                        })
+                    } else {
+                        Err(Error::SpecsKnown {
+                            name: specs.name,
+                            encryption: specs.encryption,
+                        })
+                    }
+                } else {
+                    match checked_info.verifier {
+                        Verifier { v: None } => Err(Error::NeedGeneralVerifier {
+                            content: GeneralVerifierForContent::Network { name: specs.name },
+                            verifier_value: old_general_verifier_value.to_owned(),
+                        }),
+                        Verifier {
+                            v: Some(new_general_verifier_value),
+                        } => Err(Error::GeneralVerifierChanged {
+                            content: GeneralVerifierForContent::Network { name: specs.name },
+                            old_general_verifier_value: old_general_verifier_value.to_owned(),
+                            new_general_verifier_value,
+                        }),
+                    }
+                }
+            }
+        },
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/cards.rs.html b/rustdocs/src/transaction_parsing/cards.rs.html new file mode 100644 index 0000000000..eb6700c010 --- /dev/null +++ b/rustdocs/src/transaction_parsing/cards.rs.html @@ -0,0 +1,623 @@ +cards.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+
use sp_core::crypto::{Ss58AddressFormat, Ss58Codec};
+use sp_core::H256;
+use sp_runtime::{generic::Era, MultiSigner};
+
+use definitions::helpers::{make_identicon_from_account, make_identicon_from_id20, IdenticonStyle};
+use definitions::keyring::{AddressKey, NetworkSpecsKey};
+
+use definitions::derivations::SeedKeysPreview;
+use definitions::navigation::MAddressCard;
+use definitions::{
+    crypto::Encryption,
+    helpers::{make_identicon_from_multisigner, pic_meta, print_multisigner_as_base58_or_eth},
+    history::MetaValuesDisplay,
+    keyring::VerifierKey,
+    navigation::{
+        Address, Card as NavCard, MMetadataRecord, MSCCall, MSCCurrency, MSCEnumVariantName,
+        MSCEraMortal, MSCFieldName, MSCFieldNumber, MSCId, MSCNameVersion, MSCNetworkInfo,
+        MTypesInfo, MVerifierDetails, TransactionCard,
+    },
+    network_specs::{NetworkSpecs, OrderedNetworkSpecs, VerifierValue},
+    qr_transfers::ContentLoadTypes,
+    users::AddressDetails,
+};
+use parser::cards::ParserCard;
+
+use crate::error::Error;
+use crate::holds::{GeneralHold, Hold};
+
+#[allow(clippy::enum_variant_names)]
+pub(crate) enum Card<'a> {
+    ParserCard(&'a ParserCard),
+    Author {
+        author: &'a MultiSigner,
+        base58prefix: u16,
+        genesis_hash: H256,
+        address_details: &'a AddressDetails,
+    },
+    AuthorPlain {
+        author: &'a MultiSigner,
+        base58prefix: u16,
+    },
+    Verifier(&'a VerifierValue),
+    Meta(MetaValuesDisplay),
+    TypesInfo(ContentLoadTypes),
+    NewSpecs(&'a NetworkSpecs),
+    NetworkInfo(&'a OrderedNetworkSpecs),
+    Derivations(&'a [SeedKeysPreview]),
+    Warning(Warning<'a>),
+    Error(Error),
+}
+
+pub(crate) enum Warning<'a> {
+    AuthorNotFound,
+    NewerVersion {
+        used_version: u32,
+        latest_version: u32,
+    },
+    NoNetworkID,
+    NotVerified,
+    UpdatingTypes,
+    TypesNotVerified,
+    GeneralVerifierAppeared(&'a GeneralHold),
+    VerifierChangingToGeneral {
+        verifier_key: &'a VerifierKey,
+        hold: &'a Hold,
+    },
+    VerifierChangingToCustom {
+        verifier_key: &'a VerifierKey,
+        hold: &'a Hold,
+    },
+    VerifierGeneralSuper {
+        verifier_key: &'a VerifierKey,
+        hold: &'a Hold,
+    },
+    TypesAlreadyThere,
+    NetworkSpecsAlreadyThere(&'a str), // network title
+    MetadataExtensionsIncomplete,
+}
+
+impl<'a> Warning<'a> {
+    pub(crate) fn show(&self) -> String {
+        match &self {
+            Warning::AuthorNotFound => String::from("Transaction author public key not found."),
+            Warning::NewerVersion {used_version, latest_version} => format!("Transaction uses outdated runtime version {used_version}. Latest known available version is {latest_version}."),
+            Warning::NoNetworkID => String::from("Public key is on record, but not associated with the network used."),
+            Warning::NotVerified => String::from("Received network information is not verified."),
+            Warning::UpdatingTypes => String::from("Updating types (really rare operation)."),
+            Warning::TypesNotVerified => String::from("Received types information is not verified."),
+            Warning::GeneralVerifierAppeared(x) => format!("Received message is verified by a new general verifier. Currently no general verifier is set, and proceeding will update the general verifier to the received value. All previously acquired information associated with general verifier will be purged. {}", x.show()),
+            Warning::VerifierChangingToGeneral{verifier_key, hold} => format!("Received message is verified by the general verifier. Current verifier for network with genesis hash {} is a custom one, and proceeding will update the network verifier to general. All previously acquired information associated with former custom verifier will be purged. {}", hex::encode(verifier_key.genesis_hash()), hold.show()),
+            Warning::VerifierChangingToCustom{verifier_key, hold} => format!("Received message is verified. Currently no verifier is set for network with genesis hash {}. Proceeding will update the network verifier to custom verifier. All previously acquired network information that was received unverified will be purged. {}", hex::encode(verifier_key.genesis_hash()), hold.show()),
+            Warning::VerifierGeneralSuper{verifier_key, hold} => format!("Received message is verified. Currently no verifier is set for network with genesis hash {} and no general verifier is set. Proceeding will update the network verifier to general. All previously acquired network information that was received unverified will be purged. {}", hex::encode(verifier_key.genesis_hash()), hold.show()),
+            Warning::TypesAlreadyThere => String::from("Received types information is identical to the one that was in the database."),
+            Warning::NetworkSpecsAlreadyThere (x) => format!("Received network specs information for {x} is same as the one already in the database."),
+            Warning::MetadataExtensionsIncomplete => String::from("Received metadata has incomplete set of signed extensions. As a result, Vault may be unable to parse signable transactions using this metadata."),
+        }
+    }
+}
+
+impl<'a> Card<'a> {
+    pub(crate) fn card(&self, index: &mut u32, indent: u32) -> TransactionCard {
+        let card = match &self {
+            Card::ParserCard(m) => match m {
+                ParserCard::Pallet(f) => NavCard::PalletCard { f: f.clone() },
+                ParserCard::Method { method_name, docs } => NavCard::CallCard {
+                    f: MSCCall {
+                        method_name: method_name.clone(),
+                        docs: docs.clone(),
+                    },
+                },
+                ParserCard::Varname(varname) => NavCard::VarNameCard { f: varname.clone() },
+                ParserCard::Default(decoded_string) => NavCard::DefaultCard {
+                    f: decoded_string.clone(),
+                },
+                ParserCard::Text(decoded_text) => NavCard::TextCard {
+                    f: decoded_text.clone(),
+                },
+                ParserCard::Id { id, base58prefix } => NavCard::IdCard {
+                    f: MSCId {
+                        base58: id
+                            .to_ss58check_with_version(Ss58AddressFormat::custom(*base58prefix)),
+                        identicon: make_identicon_from_account(id.to_owned()),
+                    },
+                },
+                ParserCard::Id20 {
+                    id,
+                    base58prefix: _,
+                } => NavCard::IdCard {
+                    f: MSCId {
+                        base58: format!("0x{}", hex::encode(id)),
+                        identicon: make_identicon_from_id20(id),
+                    },
+                },
+                ParserCard::None => NavCard::NoneCard,
+                ParserCard::IdentityField(variant) => {
+                    NavCard::IdentityFieldCard { f: variant.clone() }
+                }
+                ParserCard::BitVec(bv) => NavCard::BitVecCard { f: bv.clone() },
+                ParserCard::Balance { number, units } => NavCard::BalanceCard {
+                    f: MSCCurrency {
+                        amount: number.clone(),
+                        units: units.clone(),
+                    },
+                },
+                ParserCard::FieldName {
+                    name,
+                    docs_field_name,
+                    path_type,
+                    docs_type,
+                } => NavCard::FieldNameCard {
+                    f: MSCFieldName {
+                        name: name.clone(),
+                        docs_field_name: docs_field_name.clone(),
+                        path_type: path_type.clone(),
+                        docs_type: docs_type.clone(),
+                    },
+                },
+                ParserCard::FieldNumber {
+                    number,
+                    docs_field_number,
+                    path_type,
+                    docs_type,
+                } => NavCard::FieldNumberCard {
+                    f: MSCFieldNumber {
+                        number: number.to_string(),
+                        docs_field_number: docs_field_number.clone(),
+                        path_type: path_type.clone(),
+                        docs_type: docs_type.clone(),
+                    },
+                },
+                ParserCard::EnumVariantName {
+                    name,
+                    docs_enum_variant,
+                } => NavCard::EnumVariantNameCard {
+                    f: MSCEnumVariantName {
+                        name: name.clone(),
+                        docs_enum_variant: docs_enum_variant.clone(),
+                    },
+                },
+                ParserCard::Era(era) => match era {
+                    Era::Immortal => NavCard::EraImmortalCard,
+                    Era::Mortal(period, phase) => NavCard::EraMortalCard {
+                        f: MSCEraMortal {
+                            era: "Mortal".to_string(),
+                            phase: phase.to_string(),
+                            period: period.to_string(),
+                        },
+                    },
+                },
+                ParserCard::Nonce(nonce) => NavCard::NonceCard { f: nonce.clone() },
+                ParserCard::BlockHash(block_hash) => NavCard::BlockHashCard {
+                    f: hex::encode(block_hash),
+                },
+                ParserCard::Tip { number, units } => NavCard::TipCard {
+                    f: MSCCurrency {
+                        amount: number.clone(),
+                        units: units.clone(),
+                    },
+                },
+                ParserCard::NetworkNameVersion { name, version } => NavCard::NameVersionCard {
+                    f: MSCNameVersion {
+                        name: name.clone(),
+                        version: version.clone(),
+                    },
+                },
+                ParserCard::TxVersion(x) => NavCard::TxSpecCard { f: x.clone() },
+            },
+            Card::Author {
+                author,
+                base58prefix,
+                genesis_hash,
+                address_details,
+            } => NavCard::AuthorCard {
+                f: make_author_info(author, *base58prefix, *genesis_hash, address_details),
+            },
+            Card::AuthorPlain {
+                author,
+                base58prefix,
+            } => NavCard::AuthorPlainCard {
+                f: MSCId {
+                    base58: print_multisigner_as_base58_or_eth(
+                        author,
+                        Some(*base58prefix),
+                        Encryption::Sr25519,
+                    ),
+                    identicon: make_identicon_from_multisigner(author, IdenticonStyle::Dots),
+                },
+            },
+            Card::Verifier(x) => match x {
+                VerifierValue::Standard { m } => {
+                    let (public_key, encryption) = match m {
+                        MultiSigner::Ed25519(p) => (hex::encode(p), Encryption::Ed25519.show()),
+                        MultiSigner::Sr25519(p) => (hex::encode(p), Encryption::Sr25519.show()),
+                        MultiSigner::Ecdsa(p) => (hex::encode(p), Encryption::Ecdsa.show()),
+                    };
+                    NavCard::VerifierCard {
+                        f: MVerifierDetails {
+                            public_key,
+                            identicon: make_identicon_from_multisigner(m, IdenticonStyle::Dots),
+                            encryption,
+                        },
+                    }
+                }
+            },
+            Card::Meta(x) => NavCard::MetaCard {
+                f: MMetadataRecord {
+                    specname: x.name.clone(),
+                    specs_version: x.version.to_string(),
+                    meta_hash: hex::encode(x.meta_hash),
+                    meta_id_pic: pic_meta(x.meta_hash.as_bytes()),
+                },
+            },
+            Card::TypesInfo(x) => {
+                let (types_hash, types_id_pic) = x.show();
+                NavCard::TypesInfoCard {
+                    f: MTypesInfo {
+                        types_on_file: false,
+                        types_hash: Some(types_hash),
+                        types_id_pic: Some(types_id_pic),
+                    },
+                }
+            }
+            Card::NewSpecs(x) => NavCard::NewSpecsCard { f: (*x).clone() },
+            Card::NetworkInfo(x) => NavCard::NetworkInfoCard {
+                f: MSCNetworkInfo {
+                    network_title: x.specs.title.clone(),
+                    network_logo: x.specs.logo.clone(),
+                    network_specs_key: hex::encode(
+                        NetworkSpecsKey::from_parts(&x.specs.genesis_hash, &x.specs.encryption)
+                            .key(),
+                    ),
+                },
+            },
+            Card::Derivations(x) => NavCard::DerivationsCard { f: x.to_vec() },
+            Card::Warning(warn) => NavCard::WarningCard { f: warn.show() },
+            Card::Error(err) => NavCard::ErrorCard {
+                f: format!("Bad input data. {err}"),
+            },
+        };
+
+        let i = *index;
+        *index += 1;
+        TransactionCard {
+            index: i,
+            indent,
+            card,
+        }
+    }
+}
+
+pub(crate) fn make_author_info(
+    author: &MultiSigner,
+    base58prefix: u16,
+    genesis_hash: H256,
+    address_details: &AddressDetails,
+) -> MAddressCard {
+    let base58 =
+        print_multisigner_as_base58_or_eth(author, Some(base58prefix), address_details.encryption);
+    let address_key = hex::encode(AddressKey::new(author.clone(), Some(genesis_hash)).key());
+    MAddressCard {
+        base58,
+        address_key,
+        address: Address {
+            identicon: make_identicon_from_multisigner(author, address_details.identicon_style()),
+            seed_name: address_details.seed_name.clone(),
+            path: address_details.path.clone(),
+            has_pwd: address_details.has_pwd,
+            secret_exposed: address_details.secret_exposed,
+        },
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/check_signature.rs.html b/rustdocs/src/transaction_parsing/check_signature.rs.html new file mode 100644 index 0000000000..033d7ce35e --- /dev/null +++ b/rustdocs/src/transaction_parsing/check_signature.rs.html @@ -0,0 +1,271 @@ +check_signature.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+
use crate::error::{Error, Result};
+use definitions::{
+    error::TransferContent,
+    helpers::unhex,
+    network_specs::{Verifier, VerifierValue},
+};
+use parser::decoding_commons::get_compact;
+use sp_core::{ecdsa, ed25519, sr25519, Pair};
+use sp_runtime::MultiSigner;
+use std::convert::TryInto;
+
+pub struct InfoPassedCrypto {
+    pub verifier: Verifier,
+    pub message: Vec<u8>,
+    pub tail: Vec<u8>,
+}
+
+pub fn pass_crypto(data_hex: &str, content: TransferContent) -> Result<InfoPassedCrypto> {
+    let data = unhex(data_hex)?;
+
+    match &data_hex[2..4] {
+        "00" => {
+            // `Ed25519` crypto was used by the verifier
+            let a = data.get(3..35).ok_or(Error::TooShort)?;
+            let into_pubkey: [u8; 32] = a.try_into().expect("fixed size should fit in array");
+            let (pubkey, data) = (ed25519::Public::from_raw(into_pubkey), &data[35..]);
+            let (message, tail) = cut_data(data, content)?;
+            let a = tail.get(..64).ok_or(Error::TooShort)?;
+            let into_signature: [u8; 64] = a.try_into().expect("fixed size should fit in array");
+            let (signature, tail) = (
+                ed25519::Signature::from_raw(into_signature),
+                tail[64..].to_vec(),
+            );
+            ed25519::Pair::verify(&signature, &message, &pubkey)
+                .then_some(())
+                .ok_or(Error::BadSignature)?;
+            let verifier = Verifier {
+                v: Some(VerifierValue::Standard {
+                    m: MultiSigner::Ed25519(pubkey),
+                }),
+            };
+            Ok(InfoPassedCrypto {
+                verifier,
+                message,
+                tail,
+            })
+        }
+        "01" => {
+            // `Sr25519` crypto was used by the verifier
+            let a = data.get(3..35).ok_or(Error::TooShort)?;
+            let into_pubkey: [u8; 32] = a.try_into().expect("fixed size should fit in array");
+            let (pubkey, data) = (sr25519::Public::from_raw(into_pubkey), &data[35..]);
+            let (message, tail) = cut_data(data, content)?;
+            let a = tail.get(..64).ok_or(Error::TooShort)?;
+            let into_signature: [u8; 64] = a.try_into().expect("fixed size should fit in array");
+            let (signature, tail) = (
+                sr25519::Signature::from_raw(into_signature),
+                tail[64..].to_vec(),
+            );
+            sr25519::Pair::verify(&signature, &message, &pubkey)
+                .then_some(())
+                .ok_or(Error::BadSignature)?;
+            let verifier = Verifier {
+                v: Some(VerifierValue::Standard {
+                    m: MultiSigner::Sr25519(pubkey),
+                }),
+            };
+            Ok(InfoPassedCrypto {
+                verifier,
+                message,
+                tail,
+            })
+        }
+        "02" | "03" => {
+            // Ecdsa crypto was used by the verifier
+            let a = data.get(3..36).ok_or(Error::TooShort)?;
+            let into_pubkey: [u8; 33] = a.try_into().expect("fixed size should fit in array");
+            let (pubkey, data) = (ecdsa::Public::from_raw(into_pubkey), &data[36..]);
+            let (message, tail) = cut_data(data, content)?;
+            let a = tail.get(..65).ok_or(Error::TooShort)?;
+            let into_signature: [u8; 65] = a.try_into().expect("fixed size should fit in array");
+            let (signature, tail) = (
+                ecdsa::Signature::from_raw(into_signature),
+                tail[65..].to_vec(),
+            );
+            ecdsa::Pair::verify(&signature, &message, &pubkey)
+                .then_some(())
+                .ok_or(Error::BadSignature)?;
+            let verifier = Verifier {
+                v: Some(VerifierValue::Standard {
+                    m: MultiSigner::Ecdsa(pubkey),
+                }),
+            };
+            Ok(InfoPassedCrypto {
+                verifier,
+                message,
+                tail,
+            })
+        }
+        "ff" => {
+            // Received info was not signed
+            let data = data.get(3..).ok_or(Error::TooShort)?;
+            let (message, tail) = cut_data(data, content)?;
+            let verifier = Verifier { v: None };
+            Ok(InfoPassedCrypto {
+                verifier,
+                message,
+                tail,
+            })
+        }
+        _ => Err(Error::EncryptionNotSupported(data_hex[2..4].to_string())),
+    }
+}
+
+fn cut_data(data: &[u8], content: TransferContent) -> Result<(Vec<u8>, Vec<u8>)> {
+    let pre_data = get_compact::<u32>(data)?;
+    match content {
+        TransferContent::AddSpecs | TransferContent::LoadTypes => {
+            // `AddSpecs` and `LoadTypes` payloads consist of SCALE encoded `Vec<u8>` of `ContentAddSpecs` or `ContentLoadTypes` correspondingly. Encoding of contents is done to have exact length of data easily accessible (to cut data correctly in case multisignatures are implemented). Signature verifies `ContentAddSpecs` or `ContentLoadTypes` correspondingly, WITHOUT the length piece from encoding
+            let data_length = pre_data.compact_found as usize;
+            let start = pre_data.start_next_unit.ok_or(Error::TooShort)?;
+            let a = data
+                .get(start..start + data_length)
+                .ok_or(Error::TooShort)?;
+            Ok((a.to_vec(), data[start + data_length..].to_vec()))
+        }
+        TransferContent::LoadMeta => {
+            // LoadMeta payload consists of SCALE encoded `Vec<u8>` of metadata and `[u8;32]` genesis hash; compact announces length of metadata vector, 32 is added to include the genesis hash
+            let data_length = pre_data.compact_found as usize + 32;
+            let start = pre_data.start_next_unit.ok_or(Error::TooShort)?;
+            let a = data.get(..start + data_length).ok_or(Error::TooShort)?;
+            Ok((a.to_vec(), data[start + data_length..].to_vec()))
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/derivations.rs.html b/rustdocs/src/transaction_parsing/derivations.rs.html new file mode 100644 index 0000000000..5e10c34993 --- /dev/null +++ b/rustdocs/src/transaction_parsing/derivations.rs.html @@ -0,0 +1,281 @@ +derivations.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+
use db_handling::identities::{
+    get_all_addresses, is_passworded, ExportAddrs, ExportAddrsV1, ExportAddrsV2,
+};
+
+use definitions::derivations::{
+    DerivedKeyError, DerivedKeyPreview, DerivedKeyStatus, SeedKeysPreview,
+};
+
+use db_handling::helpers::get_network_specs;
+use definitions::helpers::{base58_or_eth_to_multisigner, make_identicon_from_multisigner};
+use definitions::keyring::NetworkSpecsKey;
+use definitions::{helpers::unhex, navigation::TransactionCardSet};
+use parity_scale_codec::Decode;
+use sp_runtime::MultiSigner;
+
+use crate::cards::Card;
+use crate::error::Result;
+use crate::TransactionAction;
+
+pub fn process_derivations(database: &sled::Db, data_hex: &str) -> Result<TransactionAction> {
+    let data = unhex(data_hex)?;
+    let export_info = <ExportAddrs>::decode(&mut &data[3..])?;
+    let import_info = prepare_derivations_preview(database, export_info)?;
+    let derivations_card = Card::Derivations(&import_info).card(&mut 0, 0);
+    Ok(TransactionAction::Derivations {
+        content: Box::new(TransactionCardSet {
+            importing_derivations: Some(vec![derivations_card]),
+            ..Default::default()
+        }),
+    })
+}
+
+pub fn prepare_derivations_preview(
+    database: &sled::Db,
+    export_info: ExportAddrs,
+) -> Result<Vec<SeedKeysPreview>> {
+    match export_info {
+        ExportAddrs::V1(v1) => prepare_derivations_v1(database, v1),
+        ExportAddrs::V2(v2) => prepare_derivations_v2(database, v2),
+    }
+}
+
+fn prepare_derivations_v1(
+    database: &sled::Db,
+    export_info: ExportAddrsV1,
+) -> Result<Vec<SeedKeysPreview>> {
+    let mut result = Vec::new();
+    let all_addrs = get_all_addresses(database)?;
+    for seed_info in export_info.addrs {
+        let mut derived_keys = vec![];
+        for addr_info in seed_info.derived_keys {
+            let multisigner =
+                base58_or_eth_to_multisigner(&addr_info.address, &addr_info.encryption)?;
+            let identicon = make_identicon_from_multisigner(
+                &multisigner,
+                addr_info.encryption.identicon_style(),
+            );
+            let network_specs_key =
+                NetworkSpecsKey::from_parts(&addr_info.genesis_hash, &addr_info.encryption);
+            let network_title = get_network_specs(database, &network_specs_key)
+                .map(|specs| specs.specs.title)
+                .ok();
+            let path = addr_info.derivation_path.clone().unwrap_or_default();
+            let status = get_derivation_status(
+                database,
+                &path,
+                &network_title,
+                &seed_info.multisigner,
+                &multisigner,
+            )?;
+            derived_keys.push(DerivedKeyPreview {
+                address: addr_info.address.clone(),
+                derivation_path: addr_info.derivation_path,
+                identicon,
+                has_pwd: None, // unknown at this point
+                genesis_hash: addr_info.genesis_hash,
+                encryption: addr_info.encryption,
+                network_title,
+                status,
+            })
+        }
+        let looking_for_ms = seed_info.multisigner.clone();
+        let name = all_addrs
+            .iter()
+            .find(|(m, a)| m == &looking_for_ms && a.network_id.is_none())
+            .map(|(_, a)| a.seed_name.clone());
+
+        if let Some(name) = name {
+            result.push(SeedKeysPreview {
+                name,
+                multisigner: seed_info.multisigner,
+                derived_keys,
+            })
+        } else {
+            log::error!("seed not found for {:?}", seed_info.multisigner);
+        }
+    }
+    Ok(result)
+}
+
+fn prepare_derivations_v2(
+    database: &sled::Db,
+    export_info: ExportAddrsV2,
+) -> Result<Vec<SeedKeysPreview>> {
+    prepare_derivations_v1(database, export_info.into())
+}
+
+fn get_derivation_status(
+    database: &sled::Db,
+    path: &str,
+    network_title: &Option<String>,
+    seed_multisigner: &MultiSigner,
+    key_multisigner: &MultiSigner,
+) -> Result<DerivedKeyStatus> {
+    let mut seed_found = false;
+    // FIXME: nested loop, should be optimized
+    for (m, _) in get_all_addresses(database)?.into_iter() {
+        if m == *seed_multisigner {
+            seed_found = true;
+        }
+        if m == *key_multisigner {
+            return Ok(DerivedKeyStatus::AlreadyExists);
+        }
+    }
+
+    let mut errors = vec![];
+    if is_passworded(path).is_err() {
+        errors.push(DerivedKeyError::BadFormat);
+    }
+    if network_title.is_none() {
+        errors.push(DerivedKeyError::NetworkMissing);
+    }
+    if !seed_found {
+        errors.push(DerivedKeyError::KeySetMissing);
+    }
+    if !errors.is_empty() {
+        return Ok(DerivedKeyStatus::Invalid { errors });
+    }
+    Ok(DerivedKeyStatus::Importable)
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/dynamic_derivations.rs.html b/rustdocs/src/transaction_parsing/dynamic_derivations.rs.html new file mode 100644 index 0000000000..9f4e48932a --- /dev/null +++ b/rustdocs/src/transaction_parsing/dynamic_derivations.rs.html @@ -0,0 +1,109 @@ +dynamic_derivations.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+
use definitions::dynamic_derivations::DynamicDerivationsRequest;
+use std::collections::HashMap;
+use std::convert::TryInto;
+
+use crate::Error;
+use db_handling::identities::{process_dynamic_derivations_v1, DynamicDerivationTransaction};
+use definitions::crypto::Encryption;
+use definitions::helpers::{multisigner_to_encryption, unhex};
+use definitions::navigation::{DDPreview, DecodeSequenceResult};
+use parity_scale_codec::{Decode, Encode};
+use sp_core::H256;
+
+use crate::error::Result;
+
+/// Parses the payload to make sure it is a dynamic derivation request
+pub(crate) fn decode_dynamic_derivations(data_hex: &str) -> Result<DecodeSequenceResult> {
+    let data = unhex(data_hex)?;
+    let _ = <DynamicDerivationsRequest>::decode(&mut &data[3..])?;
+    Ok(DecodeSequenceResult::DynamicDerivations {
+        s: data_hex.to_string(),
+    })
+}
+
+/// Parses dynamic derivation request and returns preview of the result
+pub fn process_dynamic_derivations(
+    database: &sled::Db,
+    seeds: HashMap<String, String>,
+    data_hex: &str,
+) -> Result<DDPreview> {
+    let data = unhex(data_hex)?;
+    match <DynamicDerivationsRequest>::decode(&mut &data[3..])? {
+        DynamicDerivationsRequest::V1(r) => Ok(process_dynamic_derivations_v1(database, seeds, r)?),
+    }
+}
+
+/// Partially parses dynamic derivation transaction to make it compatible with `multisigner_msg_genesis_encryption`
+pub fn dd_transaction_msg_genesis_encryption(
+    data_hex: &str,
+) -> Result<(DynamicDerivationTransaction, Vec<u8>, H256, Encryption)> {
+    let mut data = unhex(data_hex)?;
+    // Swap `encryption` and `payload code` bytes for convenient decoding
+    (data[1], data[2]) = (data[2], data[1]);
+    let transaction = <DynamicDerivationTransaction>::decode(&mut &data[2..])?;
+    data = data[(transaction.encode().len() + 2)..].to_vec();
+    let encryption = multisigner_to_encryption(&transaction.root_multisigner);
+
+    // network genesis hash
+    let raw_hash: [u8; 32] = data[data.len() - 32..]
+        .try_into()
+        .map_err(|_| Error::TooShort)?;
+    let genesis_hash_vec = H256::from(raw_hash);
+    let msg = data[..data.len() - 32].to_vec();
+    Ok((transaction, msg, genesis_hash_vec, encryption))
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/error.rs.html b/rustdocs/src/transaction_parsing/error.rs.html new file mode 100644 index 0000000000..8a903ac783 --- /dev/null +++ b/rustdocs/src/transaction_parsing/error.rs.html @@ -0,0 +1,1243 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+
use std::fmt::Write;
+
+use definitions::{
+    crypto::Encryption,
+    error::MetadataError,
+    error_signer::GeneralVerifierForContent,
+    keyring::NetworkSpecsKey,
+    network_specs::{ValidCurrentVerifier, Verifier, VerifierValue},
+};
+use sp_core::H256;
+
+/// Transaction parsing result.
+pub type Result<T> = std::result::Result<T, Error>;
+
+/// Transaction parsing error.
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    #[error(transparent)]
+    Definitions(#[from] definitions::error::Error),
+
+    #[error(transparent)]
+    Sled(#[from] sled::Error),
+
+    #[error(transparent)]
+    Metadata(#[from] MetadataError),
+
+    #[error(transparent)]
+    Parser(#[from] parser::Error),
+
+    /// Received transaction is unexpectedly short, more bytes were expected.
+    #[error("Input is too short.")]
+    TooShort,
+
+    /// Key corresponding to the address was not found in the db
+    #[error("Address {0} was not found in DB")]
+    AddrNotFound(String),
+
+    /// All transactions are expected to be the Substrate ones, starting with
+    /// hexadecimal `53`.
+    ///
+    /// Associated data is the first two elements of the hexadecimal string in
+    /// received transaction.
+    #[error(
+        "Only Substrate transaction are supported. \
+        Transaction is expected to start with 0x53, this one starts with 0x{0}"
+    )]
+    NotSubstrate(String),
+
+    /// Update payload signature is invalid for given public key, encryption
+    /// algorithm and payload content
+    #[error("Bad signature.")]
+    BadSignature,
+
+    /// There is a limited number of payloads supported by the Vault. Payload
+    /// type is declared in the transaction prelude `53xxyy` in `yy` part.
+    ///
+    /// Currently supported payloads are:
+    ///
+    /// - `00` mortal signable transaction
+    /// - `02` immortal signable transaction
+    /// - `03` text message
+    /// - `80` `load_metadata` update
+    /// - `81` `load_types` update
+    /// - `c1` `add_specs` update
+    /// - `de` `derivations` update
+    /// - `f0` print all available cards (testing tool)
+    ///
+    /// Other codes are not supported, the error associated data contains the
+    /// hexadecimal string with unsupported payload code.
+    #[error("Payload type with code 0x{0} is not supported.")]
+    PayloadNotSupported(String),
+
+    /// DB error.
+    #[error("Database error. Internal error. {0}")]
+    DbError(#[from] db_handling::Error),
+
+    /// Network metadata needed to parse historical transaction, no entries at
+    /// all for a given network name.
+    #[error(
+        "Historical transaction was generated in network {name} and processed. \
+        Currently there are no metadata entries for the network, and \
+        transaction could not be processed again. Add network metadata."
+    )]
+    HistoricalMetadata { name: String },
+
+    /// More than one entry found for network specs with given `name` and
+    /// `encryption`, when trying to parse transaction from historical record.
+    // TODO: goes obsolete if we add `genesis_hash` field to `SignDisplay`
+    #[error("specs collision: {name}")]
+    SpecsCollision {
+        name: String,
+        encryption: Encryption,
+    },
+
+    /// [`OrderedNetworkSpecs`] needed to parse
+    /// historical transactions saved into history log, searched by network
+    /// name and encryption.
+    ///
+    /// [`OrderedNetworkSpecs`]: definitions::network_specs::OrderedNetworkSpecs
+    #[error(
+        "Could not find network specs for {name} with encryption {} \
+        needed to decode historical transaction.",
+        encryption.show()
+    )]
+    HistoryNetworkSpecs {
+        name: String,
+        encryption: Encryption,
+    },
+
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+    /// received in `add_specs` payload are for a network that already has
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry in
+    /// the `SPECSTREE` tree of the Vault database with **same**
+    /// [`NetworkSpecsKey`], and the permanent components of the network
+    /// specs stores and received are different.
+    ///
+    /// The components that could not be changed by an update, without removing
+    /// the network completely, are:
+    ///
+    /// - `base58prefix`, network-associated base58 prefix  
+    /// - `decimals`  
+    /// - `name`, network name, as it appears in the network metadata  
+    /// - `unit`
+    #[error(
+        "Similar network specs are already stored in the database under key {}. \
+        Network specs in received payload have different unchangeable values \
+        (base58 prefix, decimals, encryption, network name, unit).",
+        hex::encode(.0.key())
+    )]
+    ImportantSpecsChanged(NetworkSpecsKey),
+
+    /// Network name and version from metadata received in `load_metadata`
+    /// message already have a corresponding entry in `METATREE` tree of the
+    /// Vault database. However, the received metadata is different from
+    /// the one already stored in the database.
+    #[error(
+        "Metadata for {name}{version} is already in the database and is \
+        different from the one in received payload."
+    )]
+    SameNameVersionDifferentMeta { name: String, version: u32 },
+
+    /// There is a limited number of encryption algorithms supported by the
+    /// Vault. Encryption algorithm is declared in the transaction prelude
+    /// `53xxyy` in `xx` part.
+    ///
+    /// For signable transactions (i.e. with prelude `53xx00`, `53xx02` and
+    /// `53xx03`) currently supported encryption algorithms are:
+    ///
+    /// - `00` for `Ed25519`
+    /// - `01` for `Sr25519`
+    /// - `02` for `Ecdsa`
+    ///
+    /// In signable transaction the encryption algorithm corresponds to the
+    /// encryption associated with the address that generated the transaction
+    /// and can sign it (and thus to the encryption supported by the network
+    /// in which the transaction is generated).
+    ///
+    /// Update transactions have currently supported encryption codes:
+    ///
+    /// - `00` for `Ed25519`
+    /// - `01` for `Sr25519`
+    /// - `02` for `Ecdsa`
+    /// - `ff` for unsigned update transactions
+    ///
+    /// In signed update transactions the encryption code indicates which
+    /// algorithm to use for update signature verification.
+    ///
+    /// Unsigned update transactions have no associated signature, are not
+    /// checked and are strongly discouraged.
+    ///
+    /// Other encryption codes are not supported, the error associated data
+    /// contains the hexadecimal string with unsupported encryption code.
+    #[error("encryption not supported {0}")]
+    EncryptionNotSupported(String),
+
+    /// Error parsing extensions of a signable transaction with all available
+    /// versions of metadata for given network.
+    #[error(
+        "Failed to decode extensions. Please try updating metadata for \
+        {network_name} network. {}",
+        display_parsing_errors(network_name, errors)
+    )]
+    AllExtensionsParsingFailed {
+        network_name: String,
+        errors: Vec<(u32, parser::Error)>,
+    },
+
+    /// Can not separate method from extensions, bad transaction.
+    #[error("Unable to separate transaction method and extensions.")]
+    SeparateMethodExtensions,
+
+    /// Received transaction that should be parsed prior to approval (with
+    /// prelude `53xx00` or `53xx02`) is generated in the network that has no
+    /// metadata entries in the `METATREE` tree of the database.
+    ///
+    /// Without metadata the transaction could not be decoded.
+    #[error(
+        "Input transaction is generated in network {name}. \
+        Currently there are no metadata entries for it, and \
+        transaction could not be processed. Add network metadata."
+    )]
+    NoMetadata { name: String },
+
+    /// Received signable transaction (with prelude `53xx00`, `53xx02` or
+    /// `53xx03`) is generated in the network that has no corresponding
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry in the
+    /// `SPECSTREE` tree of the database.
+    #[error(
+        "Input generated within unknown network and could not be processed. \
+        Add network with genesis hash {} and encryption {}.",
+        hex::encode(genesis_hash),
+        encryption.show()
+    )]
+    UnknownNetwork {
+        genesis_hash: H256,
+
+        encryption: Encryption,
+    },
+
+    #[error("Received message could not be read. {0}")]
+    Codec(#[from] parity_scale_codec::Error),
+
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+    /// received in `add_specs` payload are for a network that already has
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry in
+    /// the `SPECSTREE` tree of the Vault database with not necessarily
+    /// same encryption, i.e. **possibly different** [`NetworkSpecsKey`],
+    /// and base58 prefix in stored network specs is different from the base58
+    /// prefix in the received ones.
+    #[error(
+        "Network {name} with genesis hash {} already has entries in \
+        the database with base58 prefix {base58_database}. Received \
+        network specs have same genesis hash and different base58 prefix {base58_input}.",
+        hex::encode(genesis_hash)
+    )]
+    AddSpecsDifferentBase58 {
+        genesis_hash: H256,
+        name: String,
+        base58_database: u16,
+        base58_input: u16,
+    },
+
+    /// [`NetworkSpecs`](definitions::network_specs::NetworkSpecs)
+    /// received in `add_specs` payload are for a network that already has
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry in
+    /// the `SPECSTREE` tree of the Vault database with not necessarily
+    /// same encryption, i.e. **possibly different** [`NetworkSpecsKey`],
+    /// and network name in stored network specs is different from the network
+    /// name in the received ones.
+    #[error(
+        "Network with genesis hash {} has name {name_database} in the database. \
+        Received network specs have same genesis hash and name {name_input}.",
+        hex::encode(genesis_hash)
+    )]
+    AddSpecsDifferentName {
+        genesis_hash: H256,
+        name_database: String,
+        name_input: String,
+    },
+
+    /// [`NetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) from the
+    /// received `add_specs` payload already have an entry in `SPECSTREE` tree
+    /// of the database.
+    ///
+    /// Not exactly an error, but Vault can't do anything and complains.
+    #[error(
+        "Exactly same network specs for network {name} with encryption {} \
+        are already in the database.",
+        encryption.show()
+    )]
+    SpecsKnown {
+        /// network name
+        name: String,
+
+        /// network [`Encryption`]
+        encryption: Encryption,
+    },
+
+    /// Received `add_specs` or `load_metadata` update payload is not verified.
+    ///
+    /// Network, however, was verified previously by verifier with certain
+    /// [`VerifierValue`] and corresponding entry in `VERIFIERS` tree of the
+    /// database is
+    /// `CurrentVerifier::Valid(ValidCurrentVerifier::Custom(Some(verifier_value)))`.
+    ///
+    /// Vault does not allow downgrading the verifiers.
+    #[error(
+        "Saved network {name} information was signed by verifier {}. \
+        Received information is not signed.",
+        verifier_value.show_error(),
+    )]
+    NeedVerifier {
+        /// network name
+        name: String,
+
+        /// expected verifier for this network
+        verifier_value: VerifierValue,
+    },
+
+    /// Received `add_specs` update payload is signed by `new_verifier_value`.
+    ///
+    /// Network has entry in `VERIFIERS` tree of the database with
+    /// `CurrentVerifier::Valid(ValidCurrentVerifier::Custom(Some(old_verifier_value)))`,
+    /// but `new_verifier_value` and `old_verifier_value` are different, and
+    /// `new_verifier_value` is not the general verifier.
+    ///
+    /// Custom verifier could be upgraded only to general one, see
+    /// [here](definitions::network_specs).
+
+    #[error(
+        "Network {name} current verifier is {}. Received add_specs message \
+        is verified by {}, which is neither current network verifier not the \
+        general verifier. Changing the network verifier to another non-general \
+        one would require wipe and reset of Vault.",
+        old_verifier_value.show_error(),
+        new_verifier_value.show_error(),
+    )]
+    AddSpecsVerifierChanged {
+        /// network name
+        name: String,
+
+        /// [`VerifierValue`] for the network in the database
+        old_verifier_value: VerifierValue,
+
+        /// [`VerifierValue`] for the payload
+        new_verifier_value: VerifierValue,
+    },
+
+    /// Received update payload is not verified, although the verification by
+    /// currently used general verifier with certain [`VerifierValue`] was
+    /// expected.
+    ///
+    /// Network has entry in `VERIFIERS` tree of the database with
+    /// `CurrentVerifier::Valid(ValidCurrentVerifier::General)`.
+    #[error(
+        "General verifier in the database is {}. Received unsigned {} \
+        could be accepted only if signed by the general verifier.",
+        verifier_value.show_error(),
+        display_general_verifier_for_content(content),
+    )]
+    NeedGeneralVerifier {
+        /// payload that requires general verifier
+        content: GeneralVerifierForContent,
+
+        /// [`VerifierValue`] currently associated with the general verifier,
+        /// expected verifier for the data
+        verifier_value: VerifierValue,
+    },
+
+    /// Received `add_specs` or `load_types` is signed by
+    /// `new_general_verifier_value`.
+    // TODO: maybe combine with the LoadMetaGeneralVerifierChanged,
+    // modify GeneralVerifierForContent into 3 variants
+    #[error(
+        "General verifier in the database is {}. Received {} could be \
+        accepted only if verified by the same general verifier. \
+        Current message is verified by {}.",
+        .old_general_verifier_value.show_error(),
+        display_general_verifier_for_content(.content),
+        .new_general_verifier_value.show_error(),
+    )]
+    GeneralVerifierChanged {
+        /// payload that requires general verifier
+        content: GeneralVerifierForContent,
+
+        /// general verifier associated `VerifierValue` in the database
+        old_general_verifier_value: VerifierValue,
+
+        /// `VerifierValue` that was used to sign the update
+        new_general_verifier_value: VerifierValue,
+    },
+
+    /// Types information received in the `load_types` payload is exactly
+    /// same, as the one already stored in the `SETTREE` tree of the database
+    /// under the key `TYPES`.
+    ///
+    /// Not exactly an error, but Vault can't do anything and complains.
+    #[error("Exactly same types information is already in the database.")]
+    TypesKnown,
+
+    /// User attempted to load into Vault the metadata for the network that
+    /// has no [`CurrentVerifier`](definitions::network_specs::CurrentVerifier) entry
+    /// in the `VERIFIERS` tree of the Vault database.
+    #[error(
+        "Network {name} is not in the database. Add network specs before loading the metadata."
+    )]
+    LoadMetaUnknownNetwork {
+        /// network name as it is in the received metadata
+        name: String,
+    },
+
+    /// User attempted to load into Vault the metadata for the network that
+    /// has no associated [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs)
+    /// entries in the `SPECSTREE` tree of the Vault database, although it has
+    /// an associated
+    /// [`ValidCurrentVerifier`](definitions::network_specs::ValidCurrentVerifier),
+    /// i.e. it was known to user at some point and never disabled.
+    #[error(
+        "Network {name} was previously known to the database with verifier {}. \
+        However, no network specs are in the database at the moment. Add network \
+        specs before loading the metadata.",
+        show_verifier(valid_current_verifier, general_verifier)
+    )]
+    LoadMetaNoSpecs {
+        /// network name as it is in the received metadata
+        name: String,
+
+        /// network-associated
+        /// [`ValidCurrentVerifier`](definitions::network_specs::ValidCurrentVerifier)
+        valid_current_verifier: ValidCurrentVerifier,
+
+        /// Vault general verifier
+        general_verifier: Verifier,
+    },
+
+    /// User attempted to load into Vault the metadata for the network that
+    /// has a [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) entry in the
+    /// `SPECSTREE` tree of the Vault database, but specs have a different
+    /// network name.
+    ///
+    /// Most likely, wrong genesis hash was attached to the metadata update.
+    ///
+    /// Since the network metadata in `METATREE` is identified by network name,
+    /// and verifier is identified by the genesis hash, this should be checked
+    /// on `load_metadata`.
+    #[error(
+        "Update payload contains metadata for network {name_metadata}. \
+        Genesis hash in payload({}) matches database genesis hash for another \
+        network, {name_specs}.",
+        hex::encode(genesis_hash)
+    )]
+    LoadMetaWrongGenesisHash {
+        /// network name as it is in the received metadata
+        name_metadata: String,
+
+        /// network name as it is in the network specs for genesis hash
+        name_specs: String,
+
+        /// genesis hash from the `load_metadata` payload, that was used to find
+        /// the network specs and verifier information
+        genesis_hash: H256,
+    },
+
+    /// Received `load_metadata` update payload is signed.
+    ///
+    /// Network has entry in `VERIFIERS` tree of the database with
+    /// `CurrentVerifier::Valid(ValidCurrentVerifier::Custom(None))`, i.e. it was
+    /// never verified previously and its network specs were loaded unverified.
+    ///
+    /// Verified `add_specs` must be loaded before any verified `load_metadata`.
+    #[error(
+        "Network {name} currently has no verifier set up. Received load_metadata \
+        message is verifier by {}. In order to accept verified metadata, first \
+        download properly verified network specs.",
+        new_verifier_value.show_error()
+    )]
+    LoadMetaSetVerifier {
+        /// network name
+        name: String,
+
+        /// [`VerifierValue`] that has signed the update payload
+        new_verifier_value: VerifierValue,
+    },
+
+    /// Received `load_metadata` update payload is signed by `new_verifier_value`.
+    ///
+    /// Network has entry in `VERIFIERS` tree of the database with
+    /// `CurrentVerifier::Valid(ValidCurrentVerifier::Custom(Some(old_verifier_value)))`,
+    /// but `new_verifier_value` and `old_verifier_value` are different, and
+    /// `new_verifier_value` is not the general verifier.
+    ///
+    /// Custom verifier could be upgraded only to general one, see
+    /// [here](definitions::network_specs), and during that network specs must be
+    /// updated prior to loading the metadata.
+    #[error(
+        "Network {name} current verifier is {}. Received load_metadata message \
+        is verified by {}. Changing verifier for the network would require wipe \
+        and reset of Vault.",
+        old_verifier_value.show_error(),
+        new_verifier_value.show_error(),
+    )]
+    LoadMetaVerifierChanged {
+        /// network name
+        name: String,
+
+        /// [`VerifierValue`] for the network in the database
+        old_verifier_value: VerifierValue,
+
+        /// [`VerifierValue`] for the payload
+        new_verifier_value: VerifierValue,
+    },
+
+    /// Received `load_metadata` update payload is signed by
+    /// `new_general_verifier_value`.
+    ///
+    /// Network has entry in `VERIFIERS` tree of the database with
+    /// `CurrentVerifier::Valid(ValidCurrentVerifier::General)`,
+    /// and database value for general verifier is `None`, i.e. the network
+    /// specs for this network are not verified.
+    ///
+    /// Verified `add_specs` must be loaded before any verified `load_metadata`.
+    #[error(
+        "Network {name} is set to be verified by the general verifier, however, \
+        general verifier is not yet established. Received load_metadata message \
+        is verified by {}. In order to accept verified metadata and set up the \
+        general verifier, first download properly verified network specs.",
+        new_general_verifier_value.show_error(),
+    )]
+    LoadMetaSetGeneralVerifier {
+        /// network name
+        name: String,
+
+        /// [`VerifierValue`] that has signed the payload instead of the
+        /// known general verifier
+        new_general_verifier_value: VerifierValue,
+    },
+
+    /// Received `load_metadata` update payload is signed by
+    /// `new_general_verifier_value`.
+    ///
+    /// Network has entry in `VERIFIERS` tree of the database with
+    /// `CurrentVerifier::Valid(ValidCurrentVerifier::General)`,
+    /// and database value for general verifier is
+    /// `Some(old_general_verifier_value)`.
+    ///
+    /// General verifier with assigned [`VerifierValue`] could not be changed
+    /// without Vault wipe. If the Vault is reset with no general verifier,
+    /// and the network in question is the default one (currently Polkadot,
+    /// Kusama, and Westend), the network will still be recorded as the one
+    /// verified by the general verifier and accepting verified `add_specs` for
+    /// it would result in setting the general verifier. If the network is not
+    /// the default one and if by the time its `add_specs` are loaded the
+    /// general verifier already has an associated `VerifierValue`, loading
+    /// verified `add_specs` would result in the network having custom verifier.
+    #[error(
+        "Network {name} is verified by the general verifier which currently is {}. \
+        Received load_metadata message is verified by {}. Changing the general \
+        verifier or changing the network verifier to custom would require wipe \
+        and reset of Vault.",
+        old_general_verifier_value.show_error(),
+        new_general_verifier_value.show_error(),
+    )]
+    LoadMetaGeneralVerifierChanged {
+        /// network name
+        name: String,
+
+        /// general verifier associated `VerifierValue` in the database
+        old_general_verifier_value: VerifierValue,
+
+        /// `VerifierValue` that was used to sign the update
+        new_general_verifier_value: VerifierValue,
+    },
+
+    /// Network name and version from metadata received in `load_metadata`
+    /// message already have a corresponding entry in `METATREE` tree of the
+    /// Vault database, with exactly same metadata.
+    ///
+    /// Not exactly an error, but Vault can't do anything and complains.
+    #[error("Metadata for {name}{version} is already in the database.")]
+    MetadataKnown {
+        /// network name (identical for received and for stored metadata)
+        name: String,
+
+        /// network version (identical for received and for stored metadata)
+        version: u32,
+    },
+
+    /// [`OrderedNetworkSpecs`](definitions::network_specs::OrderedNetworkSpecs) for network in
+    /// which the imported derivations are user to create addresses.
+    #[error(
+        "Unable to import derivations for network with genesis hash {} \
+        and encryption {}. Network is unknown. Please add corresponding \
+        network specs.",
+        hex::encode(genesis_hash),
+        encryption.show(),
+    )]
+    NetworkForDerivationsImport {
+        /// network genesis hash
+        genesis_hash: H256,
+
+        /// network supported encryption
+        encryption: Encryption,
+    },
+
+    #[error(transparent)]
+    NotUtf8(#[from] std::str::Utf8Error),
+
+    #[error("Parser error: {0}")]
+    ParserError(String),
+}
+
+fn display_parsing_errors(network_name: &str, errors: &[(u32, parser::Error)]) -> String {
+    let mut insert = String::new();
+    for (i, (version, parser_error)) in errors.iter().enumerate() {
+        if i > 0 {
+            insert.push(' ')
+        }
+        let _ = write!(
+            &mut insert,
+            "Parsing with {network_name}{version} metadata: {parser_error}",
+        );
+    }
+
+    insert
+}
+
+fn display_general_verifier_for_content(g: &GeneralVerifierForContent) -> String {
+    match g {
+        GeneralVerifierForContent::Network { name } => format!("{name} network information"),
+        GeneralVerifierForContent::Types => String::from("types information"),
+    }
+}
+
+fn show_verifier(v: &ValidCurrentVerifier, general_verifier: &Verifier) -> String {
+    match v {
+        ValidCurrentVerifier::General => {
+            format!("{} (general verifier)", general_verifier.show_error())
+        }
+        ValidCurrentVerifier::Custom { v } => format!("{} (custom verifier)", v.show_error()),
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/helpers.rs.html b/rustdocs/src/transaction_parsing/helpers.rs.html new file mode 100644 index 0000000000..99a15ea111 --- /dev/null +++ b/rustdocs/src/transaction_parsing/helpers.rs.html @@ -0,0 +1,459 @@ +helpers.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+
use constants::{METATREE, SPECSTREE};
+use db_handling::{
+    helpers::{get_types, open_tree},
+    identities::get_all_addresses,
+};
+use definitions::{
+    crypto::Encryption,
+    error::MetadataError,
+    helpers::unhex,
+    keyring::{MetaKey, MetaKeyPrefix, NetworkSpecsKey},
+    metadata::{MetaSetElement, MetaValues},
+    network_specs::{NetworkSpecs, OrderedNetworkSpecs, ShortSpecs},
+};
+use frame_metadata::RuntimeMetadata;
+use parser::{method::OlderMeta, MetadataBundle};
+use sp_core::{ecdsa, ed25519, sr25519, H256};
+use sp_runtime::MultiSigner;
+use std::convert::TryInto;
+
+use crate::error::{Error, Result};
+
+/// Function to get the network specs from the database
+/// by network name and encryption
+pub(crate) fn specs_by_name(
+    database: &sled::Db,
+    network_name: &str,
+    encryption: &Encryption,
+) -> Result<NetworkSpecs> {
+    let chainspecs = open_tree(database, SPECSTREE)?;
+    let mut found_network_specs = None;
+    for x in chainspecs.iter().flatten() {
+        let network_specs = NetworkSpecs::from_entry_checked(x)?;
+        if (network_specs.name == network_name) && (&network_specs.encryption == encryption) {
+            match found_network_specs {
+                Some(_) => {
+                    return Err(Error::SpecsCollision {
+                        name: network_name.to_string(),
+                        encryption: encryption.to_owned(),
+                    })
+                }
+                None => {
+                    found_network_specs = Some(network_specs);
+                }
+            }
+        }
+    }
+    match found_network_specs {
+        Some(a) => Ok(a),
+        None => Err(Error::HistoryNetworkSpecs {
+            name: network_name.to_string(),
+            encryption: encryption.to_owned(),
+        }),
+    }
+}
+
+pub fn find_meta_set(database: &sled::Db, short_specs: &ShortSpecs) -> Result<Vec<MetaSetElement>> {
+    let metadata = open_tree(database, METATREE)?;
+    let mut out: Vec<MetaSetElement> = Vec::new();
+    let meta_key_prefix = MetaKeyPrefix::from_name(&short_specs.name);
+    for x in metadata.scan_prefix(meta_key_prefix.prefix()).flatten() {
+        let new_element = MetaSetElement::from_entry(x)?;
+        if let Some(found_now) = new_element.optional_base58prefix() {
+            if found_now != short_specs.base58prefix {
+                Err(MetadataError::Base58PrefixSpecsMismatch {
+                    specs: short_specs.base58prefix,
+                    meta: found_now,
+                })?;
+            }
+        }
+        out.push(new_element);
+    }
+    out.sort_by_key(|b| std::cmp::Reverse(b.version()));
+    Ok(out)
+}
+
+pub fn bundle_from_meta_set_element<'a>(
+    database: &sled::Db,
+    meta_set_element: &'a MetaSetElement,
+) -> Result<MetadataBundle<'a>> {
+    match meta_set_element.runtime_metadata() {
+        RuntimeMetadata::V12(ref meta_v12) => Ok(MetadataBundle::Older {
+            older_meta: OlderMeta::V12(meta_v12),
+            types: get_types(database)?,
+            network_version: meta_set_element.version(),
+        }),
+        RuntimeMetadata::V13(ref meta_v13) => Ok(MetadataBundle::Older {
+            older_meta: OlderMeta::V13(meta_v13),
+            types: get_types(database)?,
+            network_version: meta_set_element.version(),
+        }),
+        RuntimeMetadata::V14(ref meta_v14) => Ok(MetadataBundle::Sci {
+            meta_v14,
+            network_version: meta_set_element.version(),
+        }),
+        _ => Err(MetadataError::VersionIncompatible.into()),
+    }
+}
+
+pub fn accept_meta_values(database: &sled::Db, meta_values: &MetaValues) -> Result<bool> {
+    let meta_key = MetaKey::from_parts(&meta_values.name, meta_values.version);
+    let metadata = open_tree(database, METATREE)?;
+    match metadata.get(meta_key.key())? {
+        Some(a) => {
+            if a == meta_values.meta {
+                Ok(false)
+            } else {
+                Err(Error::SameNameVersionDifferentMeta {
+                    name: meta_values.name.to_string(),
+                    version: meta_values.version,
+                })
+            }
+        }
+        None => Ok(true),
+    }
+}
+
+/// Function to check if the chain specs are already in the database
+pub fn specs_are_new(database: &sled::Db, new: &NetworkSpecs) -> Result<bool> {
+    let network_specs_key = NetworkSpecsKey::from_parts(&new.genesis_hash, &new.encryption);
+    let chainspecs = open_tree(database, SPECSTREE)?;
+    match chainspecs.get(network_specs_key.key())? {
+        Some(encoded_known_network_specs) => {
+            let old = OrderedNetworkSpecs::from_entry_with_key_checked(
+                &network_specs_key,
+                encoded_known_network_specs,
+            )?
+            .specs;
+            if (old.base58prefix != new.base58prefix)
+                | (old.decimals != new.decimals)
+                | (old.encryption != new.encryption)
+                | (old.name != new.name)
+                | (old.unit != new.unit)
+            {
+                return Err(Error::ImportantSpecsChanged(network_specs_key));
+            }
+            let is_known = (old.color == new.color)
+                && (old.logo == new.logo)
+                && (old.path_id == new.path_id)
+                && (old.secondary_color == new.secondary_color)
+                && (old.title == new.title);
+            Ok(!is_known)
+        }
+        None => Ok(true),
+    }
+}
+
+/// function to process hex data and get from it author_public_key, encryption,
+/// data to process (either transaction to parse or message to decode),
+/// and network specs key
+pub fn multisigner_msg_genesis_encryption(
+    database: &sled::Db,
+    data_hex: &str,
+) -> Result<(MultiSigner, Vec<u8>, H256, Encryption)> {
+    let data = unhex(data_hex)?;
+    let (multi_signer, data, encryption) = match &data_hex[2..4] {
+        "00" => match data.get(3..35) {
+            Some(a) => (
+                MultiSigner::Ed25519(ed25519::Public::from_raw(
+                    a.try_into().expect("static length"),
+                )),
+                &data[35..],
+                Encryption::Ed25519,
+            ),
+            None => return Err(Error::TooShort),
+        },
+        "01" => match data.get(3..35) {
+            Some(a) => (
+                MultiSigner::Sr25519(sr25519::Public::from_raw(
+                    a.try_into().expect("static length"),
+                )),
+                &data[35..],
+                Encryption::Sr25519,
+            ),
+            None => return Err(Error::TooShort),
+        },
+        "02" => match data.get(3..36) {
+            Some(a) => (
+                MultiSigner::Ecdsa(ecdsa::Public::from_raw(
+                    a.try_into().expect("static length"),
+                )),
+                &data[36..],
+                Encryption::Ecdsa,
+            ),
+            None => return Err(Error::TooShort),
+        },
+        "03" => match data.get(3..23) {
+            Some(a) => {
+                if let Some(addr) =
+                    get_all_addresses(database)?
+                        .into_iter()
+                        .find_map(|(multisigner, _)| {
+                            if let MultiSigner::Ecdsa(ref e) = multisigner {
+                                let eth_addr = if let Ok(addr) =
+                                    definitions::helpers::ecdsa_public_to_eth_address(e)
+                                {
+                                    addr
+                                } else {
+                                    return None;
+                                };
+                                if eth_addr.as_ref() == a {
+                                    Some(multisigner.clone())
+                                } else {
+                                    None
+                                }
+                            } else {
+                                None
+                            }
+                        })
+                {
+                    (addr, &data[23..], Encryption::Ethereum)
+                } else {
+                    return Err(Error::AddrNotFound(format!("0x{}", hex::encode(a))));
+                }
+            }
+            None => return Err(Error::TooShort),
+        },
+        _ => return Err(Error::EncryptionNotSupported(data_hex[2..4].to_string())),
+    };
+    if data.len() < 32 {
+        return Err(Error::TooShort);
+    }
+    // network genesis hash
+    let raw_hash: [u8; 32] = data[data.len() - 32..]
+        .try_into()
+        .map_err(|_| Error::TooShort)?;
+    let genesis_hash_vec = H256::from(raw_hash);
+    let msg = data[..data.len() - 32].to_vec();
+    Ok((multi_signer, msg, genesis_hash_vec, encryption))
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/holds.rs.html b/rustdocs/src/transaction_parsing/holds.rs.html new file mode 100644 index 0000000000..1bf7e07ed3 --- /dev/null +++ b/rustdocs/src/transaction_parsing/holds.rs.html @@ -0,0 +1,473 @@ +holds.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+
use std::fmt::Write;
+
+use constants::{METATREE, SETTREE, SPECSTREE, TYPES, VERIFIERS};
+use db_handling::{
+    db_transactions::TrDbColdStub,
+    helpers::{get_general_verifier, open_tree, prep_types},
+};
+use definitions::{
+    history::Event,
+    keyring::{MetaKeyPrefix, VerifierKey},
+    metadata::MetaValues,
+    network_specs::{CurrentVerifier, OrderedNetworkSpecs, ValidCurrentVerifier, Verifier},
+};
+use parity_scale_codec::Decode;
+use sled::Tree;
+
+use crate::cards::Warning;
+use crate::error::Result;
+
+fn print_affected(
+    metadata_set: &[MetaValues],
+    network_specs_set: &[OrderedNetworkSpecs],
+) -> String {
+    let mut out_metadata = String::new();
+    let mut out_network_specs = String::new();
+    for (i, x) in metadata_set.iter().enumerate() {
+        if i > 0 {
+            out_metadata.push_str(", ");
+        }
+        let _ = write!(&mut out_metadata, "{}{}", x.name, x.version);
+    }
+    for (i, x) in network_specs_set.iter().enumerate() {
+        if i > 0 {
+            out_network_specs.push_str(", ");
+        }
+        out_network_specs.push_str(&x.specs.title);
+    }
+    if out_network_specs.is_empty() {
+        out_network_specs = String::from("none");
+    }
+    if out_metadata.is_empty() {
+        out_metadata = String::from("none");
+    }
+    format!(
+        "Affected network specs entries: {out_network_specs}; affected metadata entries: {out_metadata}."
+    )
+}
+
+fn collect_set(
+    verifier_key: &VerifierKey,
+    chainspecs: &Tree,
+    metadata: &Tree,
+) -> Result<(Vec<MetaValues>, Vec<OrderedNetworkSpecs>)> {
+    let mut metadata_set = Vec::new();
+    let mut network_specs_set = Vec::new();
+    let genesis_hash = verifier_key.genesis_hash();
+    let mut name_found: Option<String> = None;
+    for x in chainspecs.iter().flatten() {
+        let network_specs = OrderedNetworkSpecs::from_entry_checked(x)?;
+        if network_specs.specs.genesis_hash.as_bytes() == &genesis_hash[..] {
+            name_found = match name_found {
+                Some(n) => {
+                    if n != network_specs.specs.name {
+                        return Err(db_handling::Error::DifferentNamesSameGenesisHash {
+                            name1: n,
+                            name2: network_specs.specs.name,
+                            genesis_hash: network_specs.specs.genesis_hash,
+                        }
+                        .into());
+                    }
+                    Some(n)
+                }
+                None => Some(network_specs.specs.name.to_string()),
+            };
+            network_specs_set.push(network_specs);
+        }
+    }
+    if let Some(name) = name_found {
+        let meta_key_prefix = MetaKeyPrefix::from_name(&name);
+        for y in metadata.scan_prefix(meta_key_prefix.prefix()).flatten() {
+            metadata_set.push(MetaValues::from_entry_checked(y)?)
+        }
+    }
+    metadata_set.sort_by(|a, b| a.version.cmp(&b.version));
+    network_specs_set.sort_by(|a, b| a.specs.title.cmp(&b.specs.title));
+    Ok((metadata_set, network_specs_set))
+}
+
+pub(crate) struct GeneralHold {
+    pub(crate) metadata_set: Vec<MetaValues>,
+    pub(crate) network_specs_set: Vec<OrderedNetworkSpecs>,
+    pub(crate) types: bool,
+}
+
+impl GeneralHold {
+    /// function to show entries depending on general verifier
+    pub(crate) fn show(&self) -> String {
+        let part = print_affected(&self.metadata_set, &self.network_specs_set);
+        if self.types {
+            format!("{part} Types information is purged.")
+        } else {
+            part
+        }
+    }
+    /// function to find all entries in the database that were verified by general verifier
+    pub(crate) fn get(database: &sled::Db) -> Result<Self> {
+        let mut metadata_set = Vec::new();
+        let mut network_specs_set = Vec::new(); // all are verified by general_verifier
+        let mut verifier_set = Vec::new();
+
+        let metadata = open_tree(database, METATREE)?;
+        let chainspecs = open_tree(database, SPECSTREE)?;
+        let settings = open_tree(database, SETTREE)?;
+        let verifiers = open_tree(database, VERIFIERS)?;
+        for (verifier_key_vec, current_verifier_encoded) in verifiers.iter().flatten() {
+            let verifier_key = VerifierKey::from_ivec(&verifier_key_vec)?;
+            let current_verifier = <CurrentVerifier>::decode(&mut &current_verifier_encoded[..])?;
+            if let CurrentVerifier::Valid(ValidCurrentVerifier::General) = current_verifier {
+                verifier_set.push(verifier_key)
+            }
+        }
+        for verifier_key in verifier_set.iter() {
+            let (new_metadata_set, new_network_specs_set) =
+                collect_set(verifier_key, &chainspecs, &metadata)?;
+            metadata_set.extend_from_slice(&new_metadata_set);
+            network_specs_set.extend_from_slice(&new_network_specs_set);
+        }
+        let types = settings.contains_key(TYPES)?;
+        metadata_set.sort_by(|a, b| a.name.cmp(&b.name));
+        network_specs_set.sort_by(|a, b| a.specs.title.cmp(&b.specs.title));
+        Ok(Self {
+            metadata_set,
+            network_specs_set,
+            types,
+        })
+    }
+    pub(crate) fn upd_stub(
+        &self,
+        database: &sled::Db,
+        stub: TrDbColdStub,
+        new_general_verifier: &Verifier,
+    ) -> Result<TrDbColdStub> {
+        let former_general_verifier = get_general_verifier(database)?;
+        let mut out = stub;
+        out = out.new_history_entry(Event::Warning {
+            warning: Warning::GeneralVerifierAppeared(self).show(),
+        });
+        for x in self.metadata_set.iter() {
+            out = out.remove_metadata(x)
+        }
+        for x in self.network_specs_set.iter() {
+            out = out.remove_network_specs(
+                x,
+                &ValidCurrentVerifier::General,
+                &former_general_verifier,
+            )
+        }
+        if self.types {
+            out = out.remove_types(&prep_types(database)?, &former_general_verifier)
+        }
+        out = out.new_general_verifier(new_general_verifier);
+        Ok(out)
+    }
+}
+
+pub(crate) struct Hold {
+    pub(crate) metadata_set: Vec<MetaValues>,
+    pub(crate) network_specs_set: Vec<OrderedNetworkSpecs>,
+}
+
+impl Hold {
+    /// function to show entries depending on former verifier
+    pub(crate) fn show(&self) -> String {
+        print_affected(&self.metadata_set, &self.network_specs_set)
+    }
+    /// function to find all entries in the database corresponding to given `verifier_key`, that was used to store the former verifier
+    pub(crate) fn get(database: &sled::Db, verifier_key: &VerifierKey) -> Result<Self> {
+        let metadata = open_tree(database, METATREE)?;
+        let chainspecs = open_tree(database, SPECSTREE)?;
+        let (metadata_set, network_specs_set) = collect_set(verifier_key, &chainspecs, &metadata)?;
+        Ok(Self {
+            metadata_set,
+            network_specs_set,
+        })
+    }
+    pub(crate) fn upd_stub(
+        &self,
+        database: &sled::Db,
+        stub: TrDbColdStub,
+        verifier_key: &VerifierKey,
+        former_verifier: &Verifier,
+        new_verifier: &ValidCurrentVerifier,
+        hold_release: HoldRelease,
+    ) -> Result<TrDbColdStub> {
+        let general_verifier = get_general_verifier(database)?;
+        let mut out = stub;
+        let warning = match hold_release {
+            HoldRelease::General => Warning::VerifierChangingToGeneral {
+                verifier_key,
+                hold: self,
+            }
+            .show(),
+            HoldRelease::Custom => Warning::VerifierChangingToCustom {
+                verifier_key,
+                hold: self,
+            }
+            .show(),
+            HoldRelease::GeneralSuper => Warning::VerifierGeneralSuper {
+                verifier_key,
+                hold: self,
+            }
+            .show(),
+        };
+        out = out.new_history_entry(Event::Warning { warning });
+        for x in self.metadata_set.iter() {
+            out = out.remove_metadata(x)
+        }
+        for x in self.network_specs_set.iter() {
+            out = out.remove_network_specs(
+                x,
+                &ValidCurrentVerifier::Custom {
+                    v: former_verifier.to_owned(),
+                },
+                &general_verifier,
+            )
+        }
+        out = out.new_network_verifier(verifier_key, new_verifier, &general_verifier);
+        Ok(out)
+    }
+}
+
+pub(crate) enum HoldRelease {
+    General,
+    Custom,
+    GeneralSuper,
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/lib.rs.html b/rustdocs/src/transaction_parsing/lib.rs.html new file mode 100644 index 0000000000..28f92c77c8 --- /dev/null +++ b/rustdocs/src/transaction_parsing/lib.rs.html @@ -0,0 +1,355 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+
#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+use db_handling::identities::TransactionBulk;
+use definitions::helpers::unhex;
+use parity_scale_codec::Decode;
+
+pub use definitions::navigation::{StubNav, TransactionAction};
+mod add_specs;
+use add_specs::add_specs;
+
+use definitions::navigation::DecodeSequenceResult;
+
+pub mod cards;
+pub mod check_signature;
+mod derivations;
+pub use derivations::prepare_derivations_preview;
+use derivations::process_derivations;
+mod helpers;
+mod holds;
+mod load_metadata;
+use load_metadata::load_metadata;
+mod load_types;
+use load_types::load_types;
+mod message;
+use message::process_message;
+pub mod parse_transaction;
+pub use parse_transaction::entry_to_transactions_with_decoding;
+use parse_transaction::parse_transaction;
+pub mod dynamic_derivations;
+mod error;
+#[cfg(test)]
+mod tests;
+use crate::dynamic_derivations::decode_dynamic_derivations;
+
+pub use crate::error::{Error, Result};
+
+/// Payload in hex format as it arrives into handling contains following elements:
+/// - prelude, length 6 symbols ("53" stands for substrate, ** - crypto type, ** - transaction type),
+/// see the standard for details,
+/// - actual content (differs between transaction types, could be even empty)
+/// actual content is handled individually depending on prelude
+
+fn handle_scanner_input(database: &sled::Db, payload: &str) -> Result<TransactionAction> {
+    let data_hex = {
+        if let Some(a) = payload.strip_prefix("0x") {
+            a
+        } else {
+            payload
+        }
+    };
+
+    if data_hex.len() < 6 {
+        return Err(Error::TooShort);
+    }
+
+    if &data_hex[..2] != "53" {
+        return Err(Error::NotSubstrate(data_hex[..2].to_string()));
+    }
+
+    match &data_hex[4..6] {
+        "00" | "02" => parse_transaction(database, data_hex),
+        "03" => process_message(database, data_hex),
+        "04" => parse_transaction_bulk(database, data_hex),
+        "80" => load_metadata(database, data_hex),
+        "81" => load_types(database, data_hex),
+        "c1" => add_specs(database, data_hex),
+        "de" => process_derivations(database, data_hex),
+        _ => Err(Error::PayloadNotSupported(data_hex[4..6].to_string())),
+    }
+}
+
+/// Decode content of payload
+/// `enable_dynamic_derivations` is a feature flag
+pub fn decode_payload(
+    payload: &str,
+    enable_dynamic_derivations: bool,
+) -> Result<DecodeSequenceResult> {
+    let data_hex = {
+        if let Some(a) = payload.strip_prefix("0x") {
+            a
+        } else {
+            payload
+        }
+    };
+
+    if data_hex.len() < 6 {
+        return Err(Error::TooShort);
+    }
+
+    if &data_hex[..2] != "53" {
+        return Err(Error::NotSubstrate(data_hex[..2].to_string()));
+    }
+
+    if !enable_dynamic_derivations {
+        return Ok(DecodeSequenceResult::Other {
+            s: payload.to_string(),
+        });
+    }
+
+    match &data_hex[4..6] {
+        "04" => decode_transaction_bulk(data_hex, enable_dynamic_derivations),
+        "05" => Ok(DecodeSequenceResult::DynamicDerivationTransaction {
+            s: vec![data_hex.to_string()],
+        }),
+        "df" => decode_dynamic_derivations(data_hex),
+        _ => Ok(DecodeSequenceResult::Other {
+            s: payload.to_string(),
+        }),
+    }
+}
+
+fn parse_transaction_bulk(database: &sled::Db, payload: &str) -> Result<TransactionAction> {
+    let decoded_data = unhex(payload)?;
+
+    let bulk = TransactionBulk::decode(&mut &decoded_data[3..])?;
+
+    match bulk {
+        TransactionBulk::V1(b) => {
+            let mut actions = vec![];
+
+            let mut checksum = 0;
+            for t in &b.encoded_transactions {
+                let encoded = hex::encode(t);
+                let encoded = "53".to_string() + &encoded;
+                let action = parse_transaction(database, &encoded)?;
+                match action {
+                    TransactionAction::Sign {
+                        actions: a,
+                        checksum: c,
+                    } => {
+                        checksum = c;
+                        actions.push(a[0].clone());
+                    }
+                    _ => return Ok(action),
+                }
+            }
+
+            Ok(TransactionAction::Sign { actions, checksum })
+        }
+    }
+}
+
+fn decode_transaction_bulk(
+    payload: &str,
+    enable_dynamic_derivations: bool,
+) -> Result<DecodeSequenceResult> {
+    let decoded_data = unhex(payload)?;
+
+    let bulk = TransactionBulk::decode(&mut &decoded_data[3..])?;
+
+    match bulk {
+        TransactionBulk::V1(b) => {
+            let mut transactions = vec![];
+            for t in &b.encoded_transactions {
+                let encoded = hex::encode(t);
+                let encoded = "53".to_string() + &encoded;
+                match decode_payload(&encoded, enable_dynamic_derivations)? {
+                    DecodeSequenceResult::DynamicDerivationTransaction { s } => {
+                        transactions.extend(s);
+                    }
+                    // Do not attempt to handle non-dynamic derivation transactions here. Should be handled by handle_scanner_input
+                    _ => {
+                        return Ok(DecodeSequenceResult::Other {
+                            s: payload.to_string(),
+                        })
+                    }
+                }
+            }
+            Ok(DecodeSequenceResult::DynamicDerivationTransaction { s: transactions })
+        }
+    }
+}
+
+pub fn produce_output(database: &sled::Db, payload: &str) -> Result<TransactionAction> {
+    handle_scanner_input(database, payload)
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/load_metadata.rs.html b/rustdocs/src/transaction_parsing/load_metadata.rs.html new file mode 100644 index 0000000000..7df89a1c47 --- /dev/null +++ b/rustdocs/src/transaction_parsing/load_metadata.rs.html @@ -0,0 +1,447 @@ +load_metadata.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+
use db_handling::{
+    db_transactions::TrDbColdStub,
+    helpers::{genesis_hash_in_specs, get_general_verifier, try_get_valid_current_verifier},
+};
+use definitions::{
+    error::TransferContent,
+    error_signer::GeneralVerifierForContent,
+    history::{Event, MetaValuesDisplay},
+    keyring::VerifierKey,
+    metadata::MetaValues,
+    navigation::{TransactionCard, TransactionCardSet},
+    network_specs::{ValidCurrentVerifier, Verifier},
+    qr_transfers::ContentLoadMeta,
+};
+
+use crate::cards::{Card, Warning};
+use crate::check_signature::pass_crypto;
+use crate::error::{Error, Result};
+use crate::helpers::accept_meta_values;
+use crate::{StubNav, TransactionAction};
+
+enum FirstCard {
+    WarningCard(TransactionCard),
+    VerifierCard(TransactionCard),
+}
+
+pub fn load_metadata(database: &sled::Db, data_hex: &str) -> Result<TransactionAction> {
+    let checked_info = pass_crypto(data_hex, TransferContent::LoadMeta)?;
+    let (meta, genesis_hash) = ContentLoadMeta::from_slice(&checked_info.message).meta_genhash()?;
+    let meta_values = MetaValues::from_slice_metadata(&meta)?;
+    let general_verifier = get_general_verifier(database)?;
+    let verifier_key = VerifierKey::from_parts(genesis_hash);
+    let valid_current_verifier = try_get_valid_current_verifier(database, &verifier_key)?.ok_or(
+        Error::LoadMetaUnknownNetwork {
+            name: meta_values.name.clone(),
+        },
+    )?;
+    let specs_invariants =
+        genesis_hash_in_specs(database, genesis_hash)?.ok_or(Error::LoadMetaNoSpecs {
+            name: meta_values.name.clone(),
+            valid_current_verifier: valid_current_verifier.clone(),
+            general_verifier: general_verifier.clone(),
+        })?;
+    if meta_values.name != specs_invariants.name {
+        return Err(Error::LoadMetaWrongGenesisHash {
+            name_metadata: meta_values.name,
+            name_specs: specs_invariants.name,
+            genesis_hash,
+        });
+    }
+    if let Some(prefix_from_meta) = meta_values.optional_base58prefix {
+        if prefix_from_meta != specs_invariants.base58prefix {
+            return Err(
+                definitions::error::MetadataError::Base58PrefixSpecsMismatch {
+                    specs: specs_invariants.base58prefix,
+                    meta: prefix_from_meta,
+                }
+                .into(),
+            );
+        }
+    }
+    let mut stub = TrDbColdStub::new();
+    let mut index = 0;
+    let optional_ext_warning = {
+        if meta_values.warn_incomplete_extensions {
+            stub = stub.new_history_entry(Event::Warning {
+                warning: Warning::MetadataExtensionsIncomplete.show(),
+            });
+            Some(Card::Warning(Warning::MetadataExtensionsIncomplete).card(&mut index, 0))
+        } else {
+            None
+        }
+    };
+
+    let first_card = match checked_info.verifier {
+        Verifier { v: None } => {
+            stub = stub.new_history_entry(Event::Warning {
+                warning: Warning::NotVerified.show(),
+            });
+            match valid_current_verifier {
+                ValidCurrentVerifier::Custom {
+                    v: Verifier { v: None },
+                } => (),
+                ValidCurrentVerifier::Custom {
+                    v:
+                        Verifier {
+                            v: Some(verifier_value),
+                        },
+                } => {
+                    return Err(Error::NeedVerifier {
+                        name: meta_values.name,
+                        verifier_value,
+                    })
+                }
+                ValidCurrentVerifier::General => match general_verifier {
+                    Verifier { v: None } => (),
+                    Verifier {
+                        v: Some(verifier_value),
+                    } => {
+                        return Err(Error::NeedGeneralVerifier {
+                            content: GeneralVerifierForContent::Network {
+                                name: meta_values.name,
+                            },
+                            verifier_value,
+                        })
+                    }
+                },
+            }
+            FirstCard::WarningCard(Card::Warning(Warning::NotVerified).card(&mut index, 0))
+        }
+        Verifier {
+            v: Some(ref new_verifier_value),
+        } => {
+            match valid_current_verifier {
+                ValidCurrentVerifier::Custom { v: a } => {
+                    if checked_info.verifier != a {
+                        match a {
+                            Verifier { v: None } => {
+                                return Err(Error::LoadMetaSetVerifier {
+                                    name: meta_values.name,
+                                    new_verifier_value: new_verifier_value.to_owned(),
+                                })
+                            }
+                            Verifier {
+                                v: Some(old_verifier_value),
+                            } => {
+                                return Err(Error::LoadMetaVerifierChanged {
+                                    name: meta_values.name,
+                                    old_verifier_value,
+                                    new_verifier_value: new_verifier_value.to_owned(),
+                                })
+                            }
+                        }
+                    }
+                }
+                ValidCurrentVerifier::General => {
+                    if checked_info.verifier != general_verifier {
+                        match general_verifier {
+                            Verifier { v: None } => {
+                                return Err(Error::LoadMetaSetGeneralVerifier {
+                                    name: meta_values.name,
+                                    new_general_verifier_value: new_verifier_value.to_owned(),
+                                })
+                            }
+                            Verifier {
+                                v: Some(old_general_verifier_value),
+                            } => {
+                                return Err(Error::LoadMetaGeneralVerifierChanged {
+                                    name: meta_values.name,
+                                    old_general_verifier_value,
+                                    new_general_verifier_value: new_verifier_value.to_owned(),
+                                })
+                            }
+                        }
+                    }
+                }
+            }
+            FirstCard::VerifierCard(Card::Verifier(new_verifier_value).card(&mut index, 0))
+        }
+    };
+    if accept_meta_values(database, &meta_values)? {
+        stub = stub.add_metadata(&meta_values);
+        let checksum = stub.store_and_get_checksum(database)?;
+        let meta_display = MetaValuesDisplay::get(&meta_values);
+        let meta_card = Card::Meta(meta_display).card(&mut index, 0);
+        match first_card {
+            FirstCard::WarningCard(warning_card) => match optional_ext_warning {
+                Some(ext_warning) => Ok(TransactionAction::Stub {
+                    s: Box::new(TransactionCardSet {
+                        warning: Some(vec![ext_warning, warning_card]),
+                        meta: Some(vec![meta_card]),
+                        ..Default::default()
+                    }),
+                    u: checksum,
+                    stub: StubNav::LoadMeta {
+                        l: specs_invariants.first_network_specs_key,
+                    },
+                }),
+                None => Ok(TransactionAction::Stub {
+                    s: Box::new(TransactionCardSet {
+                        warning: Some(vec![warning_card]),
+                        meta: Some(vec![meta_card]),
+                        ..Default::default()
+                    }),
+                    u: checksum,
+                    stub: StubNav::LoadMeta {
+                        l: specs_invariants.first_network_specs_key,
+                    },
+                }),
+            },
+            FirstCard::VerifierCard(verifier_card) => match optional_ext_warning {
+                Some(ext_warning) => Ok(TransactionAction::Stub {
+                    s: Box::new(TransactionCardSet {
+                        warning: Some(vec![ext_warning]),
+                        verifier: Some(vec![verifier_card]),
+                        meta: Some(vec![meta_card]),
+                        ..Default::default()
+                    }),
+                    u: checksum,
+                    stub: StubNav::LoadMeta {
+                        l: specs_invariants.first_network_specs_key,
+                    },
+                }),
+                None => Ok(TransactionAction::Stub {
+                    s: Box::new(TransactionCardSet {
+                        verifier: Some(vec![verifier_card]),
+                        meta: Some(vec![meta_card]),
+                        ..Default::default()
+                    }),
+                    u: checksum,
+                    stub: StubNav::LoadMeta {
+                        l: specs_invariants.first_network_specs_key,
+                    },
+                }),
+            },
+        }
+    } else {
+        Err(Error::MetadataKnown {
+            name: meta_values.name,
+            version: meta_values.version,
+        })
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/load_types.rs.html b/rustdocs/src/transaction_parsing/load_types.rs.html new file mode 100644 index 0000000000..4feafddc4c --- /dev/null +++ b/rustdocs/src/transaction_parsing/load_types.rs.html @@ -0,0 +1,269 @@ +load_types.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+
use db_handling::{
+    db_transactions::TrDbColdStub,
+    helpers::{get_general_verifier, try_get_types},
+};
+use definitions::{
+    error::TransferContent, error_signer::GeneralVerifierForContent, history::Event,
+    navigation::TransactionCardSet, network_specs::Verifier, qr_transfers::ContentLoadTypes,
+    types::TypeEntry,
+};
+
+use crate::cards::{Card, Warning};
+use crate::check_signature::pass_crypto;
+use crate::error::{Error, Result};
+use crate::holds::GeneralHold;
+use crate::{StubNav, TransactionAction};
+
+pub fn load_types(database: &sled::Db, data_hex: &str) -> Result<TransactionAction> {
+    let checked_info = pass_crypto(data_hex, TransferContent::LoadTypes)?;
+    let content_new_types = ContentLoadTypes::from_slice(&checked_info.message);
+    let new_types = content_new_types.types()?;
+    let old_types: Vec<TypeEntry> = try_get_types(database)?.unwrap_or_default();
+    let general_verifier = get_general_verifier(database)?;
+    let mut stub = TrDbColdStub::new();
+    let mut index = 0;
+    match checked_info.verifier {
+        Verifier { v: None } => match general_verifier {
+            Verifier { v: None } => {
+                if new_types == old_types {
+                    Err(Error::TypesKnown)
+                } else {
+                    stub = stub.new_history_entry(Event::Warning {
+                        warning: Warning::TypesNotVerified.show(),
+                    });
+                    stub = stub.new_history_entry(Event::Warning {
+                        warning: Warning::UpdatingTypes.show(),
+                    });
+                    stub = stub.add_types(&content_new_types, &checked_info.verifier);
+                    let checksum = stub.store_and_get_checksum(database)?;
+                    let warning_card_1 =
+                        Card::Warning(Warning::TypesNotVerified).card(&mut index, 0);
+                    let warning_card_2 = Card::Warning(Warning::UpdatingTypes).card(&mut index, 0);
+                    let types_card = Card::TypesInfo(content_new_types).card(&mut index, 0);
+                    Ok(TransactionAction::Stub {
+                        s: Box::new(TransactionCardSet {
+                            warning: Some(vec![warning_card_1, warning_card_2]),
+                            types_info: Some(vec![types_card]),
+                            ..Default::default()
+                        }),
+                        u: checksum,
+                        stub: StubNav::LoadTypes,
+                    })
+                }
+            }
+            Verifier {
+                v: Some(old_general_verifier_value),
+            } => Err(Error::NeedGeneralVerifier {
+                content: GeneralVerifierForContent::Types,
+                verifier_value: old_general_verifier_value,
+            }),
+        },
+        Verifier {
+            v: Some(ref new_general_verifier_value),
+        } => {
+            let verifier_card = Card::Verifier(new_general_verifier_value).card(&mut index, 0);
+            if general_verifier == checked_info.verifier {
+                if new_types == old_types {
+                    Err(Error::TypesKnown)
+                } else {
+                    stub = stub.new_history_entry(Event::Warning {
+                        warning: Warning::UpdatingTypes.show(),
+                    });
+                    stub = stub.add_types(&content_new_types, &checked_info.verifier);
+                    let checksum = stub.store_and_get_checksum(database)?;
+                    let warning_card = Card::Warning(Warning::UpdatingTypes).card(&mut index, 0);
+                    let types_card = Card::TypesInfo(content_new_types).card(&mut index, 0);
+                    Ok(TransactionAction::Stub {
+                        s: Box::new(TransactionCardSet {
+                            verifier: Some(vec![verifier_card]),
+                            warning: Some(vec![warning_card]),
+                            types_info: Some(vec![types_card]),
+                            ..Default::default()
+                        }),
+                        u: checksum,
+                        stub: StubNav::LoadTypes,
+                    })
+                }
+            } else {
+                match general_verifier {
+                    Verifier { v: None } => {
+                        let new_general_verifier = checked_info.verifier;
+                        let general_hold = GeneralHold::get(database)?;
+                        stub = general_hold.upd_stub(database, stub, &new_general_verifier)?;
+                        stub = stub.add_types(&content_new_types, &new_general_verifier);
+                        let warning_card_1 =
+                            Card::Warning(Warning::GeneralVerifierAppeared(&general_hold))
+                                .card(&mut index, 0);
+                        let warning_card_2 = {
+                            if new_types == old_types {
+                                stub = stub.new_history_entry(Event::Warning {
+                                    warning: Warning::TypesAlreadyThere.show(),
+                                });
+                                Card::Warning(Warning::TypesAlreadyThere).card(&mut index, 0)
+                            } else {
+                                stub = stub.new_history_entry(Event::Warning {
+                                    warning: Warning::UpdatingTypes.show(),
+                                });
+                                Card::Warning(Warning::UpdatingTypes).card(&mut index, 0)
+                            }
+                        };
+                        let types_card = Card::TypesInfo(content_new_types).card(&mut index, 0);
+                        let checksum = stub.store_and_get_checksum(database)?;
+                        Ok(TransactionAction::Stub {
+                            s: Box::new(TransactionCardSet {
+                                verifier: Some(vec![verifier_card]),
+                                warning: Some(vec![warning_card_1, warning_card_2]),
+                                types_info: Some(vec![types_card]),
+                                ..Default::default()
+                            }),
+                            u: checksum,
+                            stub: StubNav::LoadTypes,
+                        })
+                    }
+                    Verifier {
+                        v: Some(old_general_verifier_value),
+                    } => Err(Error::GeneralVerifierChanged {
+                        content: GeneralVerifierForContent::Types,
+                        old_general_verifier_value,
+                        new_general_verifier_value: new_general_verifier_value.to_owned(),
+                    }),
+                }
+            }
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/message.rs.html b/rustdocs/src/transaction_parsing/message.rs.html new file mode 100644 index 0000000000..bde4e2ac29 --- /dev/null +++ b/rustdocs/src/transaction_parsing/message.rs.html @@ -0,0 +1,327 @@ +message.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+
use db_handling::{
+    db_transactions::{SignContent, TrDbColdSign, TrDbColdSignOne},
+    helpers::{try_get_address_details, try_get_network_specs},
+};
+use definitions::{
+    keyring::{AddressKey, NetworkSpecsKey},
+    navigation::{TransactionCardSet, TransactionSignAction},
+};
+use nom::bytes::complete::{tag, take_until};
+use parser::cards::ParserCard;
+use std::str;
+
+use nom::sequence::preceded;
+use nom::IResult;
+
+use crate::cards::{make_author_info, Card, Warning};
+use crate::error::{Error, Result};
+use crate::helpers::multisigner_msg_genesis_encryption;
+use crate::TransactionAction;
+
+pub fn process_message(database: &sled::Db, data_hex: &str) -> Result<TransactionAction> {
+    let (author_multi_signer, message_vec, genesis_hash, encryption) =
+        multisigner_msg_genesis_encryption(database, data_hex)?;
+    let network_specs_key = NetworkSpecsKey::from_parts(&genesis_hash, &encryption);
+
+    let message = str::from_utf8(&message_vec)?.to_owned();
+    let display_msg = strip_bytes_tag(&message)?;
+
+    // initialize index and indent
+    let mut index: u32 = 0;
+    let indent: u32 = 0;
+
+    match try_get_network_specs(database, &network_specs_key)? {
+        Some(network_specs) => {
+            let address_key = AddressKey::new(
+                author_multi_signer.clone(),
+                Some(network_specs.specs.genesis_hash),
+            );
+            match try_get_address_details(database, &address_key)? {
+                Some(address_details) => {
+                    if address_details.network_id == Some(network_specs_key) {
+                        let message_card = Card::ParserCard(&ParserCard::Text(display_msg))
+                            .card(&mut index, indent);
+                        let sign = TrDbColdSignOne::generate(
+                            SignContent::Message(message),
+                            &network_specs.specs.name,
+                            &address_details.path,
+                            address_details.has_pwd,
+                            &author_multi_signer,
+                            Vec::new(),
+                        );
+                        let sign: TrDbColdSign = sign.into();
+                        let checksum = sign.store_and_get_checksum(database)?;
+                        let author_info = make_author_info(
+                            &author_multi_signer,
+                            network_specs.specs.base58prefix,
+                            network_specs.specs.genesis_hash,
+                            &address_details,
+                        );
+                        let network_info = network_specs;
+                        Ok(TransactionAction::Sign {
+                            actions: vec![TransactionSignAction {
+                                content: TransactionCardSet {
+                                    message: Some(vec![message_card]),
+                                    ..Default::default()
+                                },
+                                has_pwd: address_details.has_pwd,
+                                author_info,
+                                network_info,
+                            }],
+                            checksum,
+                        })
+                    } else {
+                        let author_card = Card::Author {
+                            author: &author_multi_signer,
+                            base58prefix: network_specs.specs.base58prefix,
+                            genesis_hash: network_specs.specs.genesis_hash,
+                            address_details: &address_details,
+                        }
+                        .card(&mut index, indent);
+                        let warning_card =
+                            Card::Warning(Warning::NoNetworkID).card(&mut index, indent);
+                        let message_card =
+                            Card::ParserCard(&ParserCard::Text(message)).card(&mut index, indent);
+                        let network_card =
+                            Card::NetworkInfo(&network_specs).card(&mut index, indent);
+                        Ok(TransactionAction::Read {
+                            r: Box::new(TransactionCardSet {
+                                author: Some(vec![author_card]),
+                                warning: Some(vec![warning_card]),
+                                message: Some(vec![message_card]),
+                                new_specs: Some(vec![network_card]),
+                                ..Default::default()
+                            }),
+                        })
+                    }
+                }
+                None => {
+                    let author_card = Card::AuthorPlain {
+                        author: &author_multi_signer,
+                        base58prefix: network_specs.specs.base58prefix,
+                    }
+                    .card(&mut index, indent);
+                    let warning_card =
+                        Card::Warning(Warning::AuthorNotFound).card(&mut index, indent);
+                    let message_card =
+                        Card::ParserCard(&ParserCard::Text(message)).card(&mut index, indent);
+                    let network_card = Card::NetworkInfo(&network_specs).card(&mut index, indent);
+                    Ok(TransactionAction::Read {
+                        r: Box::new(TransactionCardSet {
+                            author: Some(vec![author_card]),
+                            warning: Some(vec![warning_card]),
+                            message: Some(vec![message_card]),
+                            new_specs: Some(vec![network_card]),
+                            ..Default::default()
+                        }),
+                    })
+                }
+            }
+        }
+        None => Err(Error::UnknownNetwork {
+            genesis_hash,
+            encryption,
+        }),
+    }
+}
+
+fn bytes_prefix(i: &str) -> IResult<&str, &str> {
+    tag("<Bytes>")(i)
+}
+
+fn take_until_suffix(i: &str) -> IResult<&str, &str> {
+    take_until("</Bytes>")(i)
+}
+
+fn strip_bytes_tag(message: &str) -> Result<String> {
+    let mut parser = preceded(bytes_prefix, take_until_suffix);
+    let (_, payload) = parser(message).map_err(|e| Error::ParserError(format!("{e:?}")))?;
+    Ok(payload.to_owned())
+}
+
+#[cfg(test)]
+mod tests {
+
+    use super::*;
+
+    #[test]
+    fn parse_bytes_msg() {
+        let result = strip_bytes_tag("<Bytes>uuid-1234</Bytes>");
+        assert!(result.is_ok());
+        assert_eq!(result.unwrap(), "uuid-1234");
+    }
+
+    #[test]
+    fn parse_bytes_err() {
+        let result = strip_bytes_tag("<Bytes>uuid-1234");
+        assert!(result.is_err());
+        assert_eq!(
+            result.unwrap_err().to_string(),
+            "Parser error: Error(Error { input: \"uuid-1234\", code: TakeUntil })"
+        );
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_parsing/parse_transaction.rs.html b/rustdocs/src/transaction_parsing/parse_transaction.rs.html new file mode 100644 index 0000000000..9b8330d4c7 --- /dev/null +++ b/rustdocs/src/transaction_parsing/parse_transaction.rs.html @@ -0,0 +1,913 @@ +parse_transaction.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+
use db_handling::identities::derive_single_key;
+use db_handling::{
+    db_transactions::{SignContent, TrDbColdSign, TrDbColdSignOne},
+    helpers::{get_all_networks, try_get_address_details, try_get_network_specs},
+};
+use definitions::crypto::Encryption;
+use definitions::{
+    history::{Entry, Event, SignDisplay},
+    keyring::{AddressKey, NetworkSpecsKey},
+    navigation::{MEventMaybeDecoded, TransactionCard, TransactionCardSet, TransactionSignAction},
+    network_specs::VerifierValue,
+    users::AddressDetails,
+};
+use parser::{cut_method_extensions, decoding_commons::OutputCard, parse_extensions, parse_method};
+use sp_core::H256;
+use sp_runtime::MultiSigner;
+use std::collections::HashMap;
+
+use crate::cards::{make_author_info, Card, Warning};
+use crate::dynamic_derivations::dd_transaction_msg_genesis_encryption;
+use crate::error::{Error, Result};
+use crate::helpers::{
+    bundle_from_meta_set_element, find_meta_set, multisigner_msg_genesis_encryption, specs_by_name,
+};
+use crate::TransactionAction;
+
+/// Transaction payload in hex format as it arrives into parsing program contains following elements:
+/// - prelude, length 6 symbols ("53" stands for substrate, ** - crypto type, 00 or 02 - transaction type),
+/// see the standard for details,
+/// - author public key (length depends on cryptography used),
+/// - method, extensions, network genesis hash
+
+/// Enum to move around cards in preparatory stage (author details or author card, and warning card)
+enum CardsPrep<'a> {
+    SignProceed(AddressDetails, Option<Warning<'a>>),
+    ShowOnly(TransactionCard, Box<TransactionCard>),
+}
+
+/// Function to parse transaction.
+/// Attempts to decode the transaction, and if completely successful,
+/// produces a set of cards to print the transaction content,
+/// and an action card `sign_transaction` with database entry to be used to
+/// actually sign the transaction later if approved.
+/// Transaction format corresponds to what we get from qr code:
+/// i.e. it starts with 53****, followed by author address, followed by actual transaction piece,
+/// followed by extrinsics, concluded with chain genesis hash
+
+pub(crate) fn parse_transaction(database: &sled::Db, data_hex: &str) -> Result<TransactionAction> {
+    let (author_multi_signer, call_data, genesis_hash, encryption) =
+        multisigner_msg_genesis_encryption(database, data_hex)?;
+
+    let author_address_key = AddressKey::new(author_multi_signer.clone(), Some(genesis_hash));
+    let address_details = try_get_address_details(database, &author_address_key)?;
+    do_parse_transaction(
+        database,
+        author_multi_signer,
+        &call_data,
+        genesis_hash,
+        encryption,
+        address_details,
+    )
+}
+
+pub fn parse_dd_transaction(
+    database: &sled::Db,
+    data_hex: &str,
+    seeds: &HashMap<String, String>,
+) -> Result<TransactionAction> {
+    let (transaction, call_data, genesis_hash, encryption) =
+        dd_transaction_msg_genesis_encryption(data_hex)?;
+    let network_specs_key = NetworkSpecsKey::from_parts(&genesis_hash, &encryption);
+    let (author_multi_signer, address_details) = derive_single_key(
+        database,
+        seeds,
+        &transaction.derivation_path,
+        &transaction.root_multisigner,
+        network_specs_key,
+    )?;
+    do_parse_transaction(
+        database,
+        author_multi_signer,
+        &call_data,
+        genesis_hash,
+        encryption,
+        Some(address_details),
+    )
+}
+
+fn do_parse_transaction(
+    database: &sled::Db,
+    author_multi_signer: MultiSigner,
+    call_data: &[u8],
+    genesis_hash: H256,
+    encryption: Encryption,
+    address_details: Option<AddressDetails>,
+) -> Result<TransactionAction> {
+    let network_specs_key = NetworkSpecsKey::from_parts(&genesis_hash, &encryption);
+
+    // Some(true/false) should be here by the standard; should stay None for now, as currently existing transactions apparently do not comply to standard.
+    let optional_mortal_flag = None; /*match &data_hex[4..6] {
+                                         "00" => Some(true), // expect transaction to be mortal
+                                         "02" => Some(false), // expect transaction to be immortal
+                                         _ => unreachable!(),
+                                     };*/
+
+    // initialize index and indent
+    let mut index: u32 = 0;
+    let indent: u32 = 0;
+
+    match try_get_network_specs(database, &network_specs_key)? {
+        Some(network_specs) => {
+            let mut history: Vec<Event> = Vec::new();
+
+            let mut cards_prep = match address_details {
+                Some(address_details) => {
+                    if address_details.network_id.as_ref() == Some(&network_specs_key) {
+                        CardsPrep::SignProceed(address_details, None)
+                    } else {
+                        let author_card = (Card::Author {
+                            author: &author_multi_signer,
+                            base58prefix: network_specs.specs.base58prefix,
+                            genesis_hash: network_specs.specs.genesis_hash,
+                            address_details: &address_details,
+                        })
+                        .card(&mut index, indent);
+                        CardsPrep::ShowOnly(
+                            author_card,
+                            Box::new(Card::Warning(Warning::NoNetworkID).card(&mut index, indent)),
+                        )
+                    }
+                }
+                None => CardsPrep::ShowOnly(
+                    (Card::AuthorPlain {
+                        author: &author_multi_signer,
+                        base58prefix: network_specs.specs.base58prefix,
+                    })
+                    .card(&mut index, indent),
+                    Box::new((Card::Warning(Warning::AuthorNotFound)).card(&mut index, indent)),
+                ),
+            };
+
+            let short_specs = network_specs.specs.short();
+            let (method_data, extensions_data) = cut_method_extensions(call_data)?;
+
+            let meta_set = find_meta_set(database, &short_specs)?;
+            if meta_set.is_empty() {
+                return Err(Error::NoMetadata {
+                    name: network_specs.specs.name,
+                });
+            }
+            let mut found_solution = None;
+            let mut error_collection = Vec::new();
+            let latest_version = meta_set[0].version();
+            for (i, x) in meta_set.iter().enumerate() {
+                let used_version = x.version();
+                let metadata_bundle = bundle_from_meta_set_element(database, x)?;
+                match parse_extensions(
+                    extensions_data.to_vec(),
+                    &metadata_bundle,
+                    &short_specs,
+                    optional_mortal_flag,
+                ) {
+                    Ok(extensions_cards) => {
+                        if i > 0 {
+                            history.push(Event::Warning {
+                                warning: Warning::NewerVersion {
+                                    used_version,
+                                    latest_version,
+                                }
+                                .show(),
+                            });
+                            cards_prep = match cards_prep {
+                                CardsPrep::SignProceed(address_details, _) => {
+                                    CardsPrep::SignProceed(
+                                        address_details,
+                                        Some(Warning::NewerVersion {
+                                            used_version,
+                                            latest_version,
+                                        }),
+                                    )
+                                }
+                                CardsPrep::ShowOnly(author_card, _warning_card) => {
+                                    CardsPrep::ShowOnly(
+                                        author_card,
+                                        //warning_card,
+                                        Box::new(
+                                            Card::Warning(Warning::NewerVersion {
+                                                used_version,
+                                                latest_version,
+                                            })
+                                            .card(&mut index, indent),
+                                        ),
+                                    )
+                                }
+                            };
+                        }
+                        match parse_method(method_data.to_vec(), &metadata_bundle, &short_specs) {
+                            Ok(a) => {
+                                found_solution = match cards_prep {
+                                    CardsPrep::SignProceed(address_details, possible_warning) => {
+                                        let sign_one = TrDbColdSignOne::generate(
+                                            SignContent::Transaction {
+                                                method: method_data,
+                                                extensions: extensions_data,
+                                            },
+                                            &network_specs.specs.name,
+                                            &address_details.path,
+                                            address_details.has_pwd,
+                                            &author_multi_signer,
+                                            history,
+                                        );
+                                        let mut sign = TrDbColdSign::from_storage(database, None)?
+                                            .unwrap_or_default();
+                                        sign.signing_bulk.push(sign_one);
+                                        let checksum = sign.store_and_get_checksum(database)?;
+                                        let author_info = make_author_info(
+                                            &author_multi_signer,
+                                            network_specs.specs.base58prefix,
+                                            network_specs.specs.genesis_hash,
+                                            &address_details,
+                                        );
+                                        let warning = possible_warning
+                                            .map(|w| Card::Warning(w).card(&mut index, indent))
+                                            .map(|w| vec![w]);
+                                        let method = into_cards(&a, &mut index);
+                                        let extensions = into_cards(&extensions_cards, &mut index);
+                                        let content = TransactionCardSet {
+                                            warning,
+                                            method: Some(method),
+                                            extensions: Some(extensions),
+                                            ..Default::default()
+                                        };
+                                        Some(TransactionAction::Sign {
+                                            actions: vec![TransactionSignAction {
+                                                content,
+                                                has_pwd: address_details.has_pwd,
+                                                author_info,
+                                                network_info: network_specs.clone(),
+                                            }],
+                                            checksum,
+                                        })
+                                    }
+                                    CardsPrep::ShowOnly(author_card, warning_card) => {
+                                        let author = Some(vec![author_card]);
+                                        let warning = Some(vec![*warning_card]);
+                                        let method = Some(into_cards(&a, &mut index));
+                                        let extensions =
+                                            Some(into_cards(&extensions_cards, &mut index));
+                                        let r = Box::new(TransactionCardSet {
+                                            author,
+                                            warning,
+                                            method,
+                                            extensions,
+                                            ..Default::default()
+                                        });
+                                        Some(TransactionAction::Read { r })
+                                    }
+                                };
+                            }
+                            Err(e) => {
+                                found_solution = match cards_prep {
+                                    CardsPrep::SignProceed(address_details, possible_warning) => {
+                                        let warning = possible_warning
+                                            .map(|w| Card::Warning(w).card(&mut index, indent))
+                                            .map(|w| vec![w]);
+                                        let author = Card::Author {
+                                            author: &author_multi_signer,
+                                            base58prefix: network_specs.specs.base58prefix,
+                                            genesis_hash: network_specs.specs.genesis_hash,
+                                            address_details: &address_details,
+                                        }
+                                        .card(&mut index, indent);
+                                        let error = Card::Error(e.into()).card(&mut index, indent);
+                                        let extensions = into_cards(&extensions_cards, &mut index);
+                                        let r = Box::new(TransactionCardSet {
+                                            author: Some(vec![author]),
+                                            error: Some(vec![error]),
+                                            warning,
+                                            extensions: Some(extensions),
+                                            ..Default::default()
+                                        });
+                                        Some(TransactionAction::Read { r })
+                                    }
+                                    CardsPrep::ShowOnly(author_card, warning_card) => {
+                                        let author = Some(vec![author_card]);
+                                        let warning = Some(vec![*warning_card]);
+                                        let error = Some(vec![
+                                            Card::Error(e.into()).card(&mut index, indent)
+                                        ]);
+                                        let extensions =
+                                            Some(into_cards(&extensions_cards, &mut index));
+                                        let r = Box::new(TransactionCardSet {
+                                            author,
+                                            warning,
+                                            error,
+                                            extensions,
+                                            ..Default::default()
+                                        });
+                                        Some(TransactionAction::Read { r })
+                                    }
+                                };
+                            }
+                        }
+                        break;
+                    }
+                    Err(e) => error_collection.push((used_version, e)), // TODO output transaction author info
+                }
+            }
+            match found_solution {
+                Some(a) => Ok(a),
+                None => Err(Error::AllExtensionsParsingFailed {
+                    network_name: network_specs.specs.name,
+                    errors: error_collection,
+                }), // author: [], hint: [], error: []
+            }
+        }
+        None => Err(Error::UnknownNetwork {
+            genesis_hash,
+            encryption,
+        }),
+    }
+}
+
+fn into_cards(set: &[OutputCard], index: &mut u32) -> Vec<TransactionCard> {
+    set.iter()
+        .map(|card| Card::ParserCard(&card.card).card(index, card.indent))
+        .collect()
+}
+
+pub fn entry_to_transactions_with_decoding(
+    database: &sled::Db,
+    entry: Entry,
+) -> Result<Vec<MEventMaybeDecoded>> {
+    let mut res = Vec::new();
+
+    // TODO: insanely bad code.
+    for event in entry.events.into_iter() {
+        let (verifier_details, signed_by, decoded) = match event {
+            Event::TransactionSigned { ref sign_display }
+            | Event::TransactionSignError { ref sign_display } => {
+                let VerifierValue::Standard { ref m } = sign_display.signed_by;
+                let network = get_all_networks(database)?
+                    .iter()
+                    .find(|network| sign_display.network_name == network.specs.name)
+                    .cloned()
+                    .unwrap();
+
+                let address_key = AddressKey::new(m.clone(), Some(network.specs.genesis_hash));
+                let verifier_details = Some(sign_display.signed_by.show_card());
+
+                if let Some(address_details) = try_get_address_details(database, &address_key)? {
+                    let mut specs_found = None;
+                    let id = &address_details.network_id;
+                    if let Some(id) = &id {
+                        let specs = try_get_network_specs(database, id)?;
+                        if let Some(ordered_specs) = specs {
+                            if ordered_specs.specs.name == sign_display.network_name {
+                                specs_found = Some(ordered_specs);
+                            }
+                        }
+                    }
+
+                    if let Some(specs_found) = specs_found {
+                        (
+                            verifier_details,
+                            Some(make_author_info(
+                                m,
+                                specs_found.specs.base58prefix,
+                                specs_found.specs.genesis_hash,
+                                &address_details,
+                            )),
+                            Some(decode_signable_from_history(database, sign_display)?),
+                        )
+                    } else {
+                        (verifier_details, None, None)
+                    }
+                } else {
+                    (verifier_details, None, None)
+                }
+            }
+            _ => (None, None, None),
+        };
+        res.push(MEventMaybeDecoded {
+            event,
+            decoded,
+            signed_by,
+            verifier_details,
+        });
+    }
+
+    Ok(res)
+}
+
+pub(crate) fn decode_signable_from_history(
+    database: &sled::Db,
+    found_signable: &SignDisplay,
+) -> Result<TransactionCardSet> {
+    let (parser_data, network_name, encryption) = found_signable.transaction_network_encryption();
+
+    let short_specs = specs_by_name(database, &network_name, &encryption)?.short();
+    let meta_set = find_meta_set(database, &short_specs)?;
+    if meta_set.is_empty() {
+        return Err(Error::HistoricalMetadata { name: network_name });
+    }
+
+    let (method_data, extensions_data) = cut_method_extensions(&parser_data)?;
+
+    let mut found_solution = None;
+    let mut error_collection = Vec::new();
+    let mut index = 0;
+    let indent = 0;
+
+    for x in meta_set.iter() {
+        let used_version = x.version();
+        let metadata_bundle = bundle_from_meta_set_element(database, x)?;
+
+        match parse_extensions(
+            extensions_data.to_vec(),
+            &metadata_bundle,
+            &short_specs,
+            None,
+        ) {
+            Ok(extensions_cards) => {
+                match parse_method(method_data, &metadata_bundle, &short_specs) {
+                    Ok(a) => {
+                        let method = into_cards(&a, &mut index);
+                        let extensions = into_cards(&extensions_cards, &mut index);
+                        found_solution = Some(TransactionCardSet {
+                            method: Some(method),
+                            extensions: Some(extensions),
+                            ..Default::default()
+                        });
+                    }
+                    Err(e) => {
+                        let error = Card::Error(e.into()).card(&mut index, indent);
+                        let extensions = Some(into_cards(&extensions_cards, &mut index));
+                        found_solution = Some(TransactionCardSet {
+                            error: Some(vec![error]),
+                            extensions,
+                            ..Default::default()
+                        });
+                    }
+                }
+                break;
+            }
+            Err(e) => error_collection.push((used_version, e)),
+        }
+    }
+    match found_solution {
+        Some(a) => Ok(a),
+        None => Err(Error::AllExtensionsParsingFailed {
+            network_name,
+            errors: error_collection,
+        }),
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_signing/error.rs.html b/rustdocs/src/transaction_signing/error.rs.html new file mode 100644 index 0000000000..e433aef408 --- /dev/null +++ b/rustdocs/src/transaction_signing/error.rs.html @@ -0,0 +1,81 @@ +error.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+
/// Transaction signing result.
+pub type Result<T> = std::result::Result<T, Error>;
+
+/// Transaction signing error.
+#[derive(Debug, thiserror::Error)]
+pub enum Error {
+    /// A DB error.
+    #[error("Database error. Internal error. {0}")]
+    DbHandling(#[from] db_handling::Error),
+
+    #[error("An error occured: {0}.")]
+    Other(#[from] anyhow::Error),
+
+    /// User has entered a wrong password for a passworded address.
+    ///
+    /// For cases when Vault database checksum is not verified.
+    /// Vault log records that password was entered incorrectly.
+    #[error("Wrong password.")]
+    WrongPassword,
+
+    /// Error in [`SecretString`](https://docs.rs/sp-core/6.0.0/sp_core/crypto/type.SecretString.html).
+    ///
+    /// `SecretString` consists of combined seed phrase and derivation.
+    ///
+    /// Associated error content is
+    /// [`SecretStringError`](https://docs.rs/sp-core/6.0.0/sp_core/crypto/enum.SecretStringError.html).
+    #[error("Secret string error: {}.", format!("{:?}", .0))]
+    CryptoError(sp_core::crypto::SecretStringError),
+
+    /// User has entered a wrong password for a passworded address for cases
+    /// when the Vault database checksum is verified.
+    ///
+    /// Vault log records that password was entered incorrectly.
+    /// This changes the database checksum, and for the next attempt it must be
+    /// updated.
+    ///
+    /// Associated data is the new checksum.
+    #[error("Wrong password.")]
+    WrongPasswordNewChecksum(u32),
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_signing/lib.rs.html b/rustdocs/src/transaction_signing/lib.rs.html new file mode 100644 index 0000000000..c56776c68e --- /dev/null +++ b/rustdocs/src/transaction_signing/lib.rs.html @@ -0,0 +1,183 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+
#![deny(unused_crate_dependencies)]
+#![deny(rustdoc::broken_intra_doc_links)]
+
+use sp_runtime::MultiSigner;
+
+use db_handling::db_transactions::TrDbColdStub;
+use definitions::{
+    crypto::Encryption, keyring::NetworkSpecsKey, navigation::MSCContent, users::AddressDetails,
+};
+
+mod sign_message;
+use sign_message::{
+    sufficient_crypto_add_specs, sufficient_crypto_load_metadata, sufficient_crypto_load_types,
+};
+mod sign_transaction;
+#[cfg(test)]
+mod tests;
+
+mod error;
+pub use error::{Error, Result};
+
+pub use sign_transaction::{create_signature, SignatureAndChecksum, SignatureType};
+
+pub fn handle_stub(database: &sled::Db, checksum: u32) -> Result<()> {
+    Ok(TrDbColdStub::from_storage(database, checksum)?.apply(database)?)
+}
+
+pub fn handle_sign(
+    database: &sled::Db,
+    checksum: u32,
+    seed_phrase: &str,
+    pwd_entry: &str,
+    user_comment: &str,
+    idx: usize,
+    encryption: Encryption,
+) -> Result<Vec<u8>> {
+    create_signature(
+        database,
+        seed_phrase,
+        pwd_entry,
+        user_comment,
+        checksum,
+        idx,
+        encryption,
+    )
+    .map(|s| s.to_string().as_bytes().to_vec())
+}
+
+///Possible content to generate sufficient crypto for
+#[derive(Debug, Clone)]
+pub enum SufficientContent {
+    AddSpecs(NetworkSpecsKey),
+    LoadMeta(NetworkSpecsKey, u32),
+    LoadTypes,
+}
+
+pub fn sign_content(
+    database: &sled::Db,
+    multisigner: &MultiSigner,
+    address_details: &AddressDetails,
+    content: SufficientContent,
+    seed_phrase: &str,
+    pwd_entry: &str,
+) -> Result<(Vec<u8>, MSCContent)> {
+    match content {
+        SufficientContent::AddSpecs(network_specs_key) => sufficient_crypto_add_specs(
+            database,
+            &network_specs_key,
+            multisigner,
+            address_details,
+            seed_phrase,
+            pwd_entry,
+        ),
+        SufficientContent::LoadMeta(network_specs_key, version) => sufficient_crypto_load_metadata(
+            database,
+            &network_specs_key,
+            version,
+            multisigner,
+            address_details,
+            seed_phrase,
+            pwd_entry,
+        ),
+        SufficientContent::LoadTypes => sufficient_crypto_load_types(
+            database,
+            multisigner,
+            address_details,
+            seed_phrase,
+            pwd_entry,
+        ),
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_signing/sign_message.rs.html b/rustdocs/src/transaction_signing/sign_message.rs.html new file mode 100644 index 0000000000..83cd3151f2 --- /dev/null +++ b/rustdocs/src/transaction_signing/sign_message.rs.html @@ -0,0 +1,497 @@ +sign_message.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+
use parity_scale_codec::Encode;
+use sp_core::{ecdsa, ed25519, keccak_256, sr25519, Pair};
+use sp_runtime::MultiSigner;
+use zeroize::Zeroize;
+
+use crate::{Error, Result};
+use db_handling::{
+    db_transactions::TrDbCold,
+    helpers::{get_meta_values_by_name_version, get_network_specs, prep_types},
+    manage_history::events_to_batch,
+};
+use definitions::{
+    crypto::{Encryption, SufficientCrypto},
+    history::{Event, MetaValuesExport, NetworkSpecsExport, TypesExport},
+    keyring::NetworkSpecsKey,
+    navigation::{MSCContent, MSCNetworkInfo},
+    qr_transfers::{ContentAddSpecs, ContentLoadMeta},
+    users::AddressDetails,
+};
+
+pub(crate) fn sign_as_address_key(
+    to_sign: &[u8],
+    multisigner: &MultiSigner,
+    full_address: &str,
+    pwd: Option<&str>,
+    encryption: Encryption,
+) -> Result<SufficientCrypto> {
+    match multisigner {
+        MultiSigner::Ed25519(public) => {
+            let ed25519_pair =
+                ed25519::Pair::from_string(full_address, pwd).map_err(Error::CryptoError)?;
+            if public != &ed25519_pair.public() {
+                return Err(Error::WrongPassword);
+            }
+            // secret zeroize on drop, https://docs.rs/ed25519-dalek/1.0.1/src/ed25519_dalek/secret.rs.html#43
+            let signature = ed25519_pair.sign(to_sign);
+            Ok(SufficientCrypto::Ed25519 {
+                public: public.to_owned(),
+                signature,
+            })
+        }
+        MultiSigner::Sr25519(public) => {
+            let sr25519_pair =
+                sr25519::Pair::from_string(full_address, pwd).map_err(Error::CryptoError)?;
+            if public != &sr25519_pair.public() {
+                return Err(Error::WrongPassword);
+            }
+            // pair zeroize on drop, https://docs.rs/schnorrkel/0.9.1/src/schnorrkel/keys.rs.html#680
+            let signature = sr25519_pair.sign(to_sign);
+            Ok(SufficientCrypto::Sr25519 {
+                public: public.to_owned(),
+                signature,
+            })
+        }
+        MultiSigner::Ecdsa(public) => {
+            let ecdsa_pair =
+                ecdsa::Pair::from_string(full_address, pwd).map_err(Error::CryptoError)?;
+            if public != &ecdsa_pair.public() {
+                return Err(Error::WrongPassword);
+            }
+            let signature = if encryption == Encryption::Ethereum {
+                ecdsa_pair.sign_prehashed(&keccak_256(to_sign))
+            } else {
+                ecdsa_pair.sign(to_sign)
+            };
+            Ok(SufficientCrypto::Ecdsa {
+                public: public.to_owned(),
+                signature,
+            })
+        }
+    }
+}
+
+/// Function to generate `sufficient crypto line` for given public key
+fn sufficient_crypto(
+    multisigner: &MultiSigner,
+    address_details: &AddressDetails,
+    to_sign: &[u8],
+    seed_phrase: &str,
+    pwd_entry: &str,
+) -> Result<SufficientCrypto> {
+    let encryption = address_details.encryption;
+    let pwd = {
+        if address_details.has_pwd {
+            Some(pwd_entry)
+        } else {
+            None
+        }
+    };
+    let mut full_address = seed_phrase.to_owned() + &address_details.path;
+    match sign_as_address_key(to_sign, multisigner, &full_address, pwd, encryption) {
+        Ok(a) => {
+            full_address.zeroize();
+            Ok(a)
+        }
+        Err(e) => {
+            full_address.zeroize();
+            Err(e)
+        }
+    }
+}
+
+/// Function to generate hex line of qr data corresponding to `sufficient_crypto` for `load_types` message
+pub(crate) fn sufficient_crypto_load_types(
+    database: &sled::Db,
+    multisigner: &MultiSigner,
+    address_details: &AddressDetails,
+    seed_phrase: &str,
+    pwd_entry: &str,
+) -> Result<(Vec<u8>, MSCContent)> {
+    let types_content = prep_types(database)?;
+    let sufficient = match sufficient_crypto(
+        multisigner,
+        address_details,
+        &types_content.to_sign(),
+        seed_phrase,
+        pwd_entry,
+    ) {
+        Ok(s) => {
+            TrDbCold::new()
+                .set_history(events_to_batch(
+                    database,
+                    vec![Event::TypesSigned {
+                        types_export: TypesExport::get(&types_content, &s.verifier_value()),
+                    }],
+                )?)
+                .apply(database)?;
+            s.encode()
+        }
+        Err(e) => {
+            if let Error::WrongPassword = e {
+                TrDbCold::new()
+                    .set_history(events_to_batch(database, vec![Event::WrongPassword])?)
+                    .apply(database)?;
+            }
+            return Err(e);
+        }
+    };
+    let (types, pic) = types_content.show();
+    Ok((sufficient, MSCContent::LoadTypes { types, pic }))
+}
+
+/// Function to generate hex line of qr data corresponding to `sufficient_crypto` for `load_metadata` message
+pub(crate) fn sufficient_crypto_load_metadata(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+    network_version: u32,
+    multisigner: &MultiSigner,
+    address_details: &AddressDetails,
+    seed_phrase: &str,
+    pwd_entry: &str,
+) -> Result<(Vec<u8>, MSCContent)> {
+    let network_specs = get_network_specs(database, network_specs_key)?.specs;
+    let meta_values =
+        get_meta_values_by_name_version(database, &network_specs.name, network_version)?;
+    let load_meta_content =
+        ContentLoadMeta::generate(&meta_values.meta, &network_specs.genesis_hash);
+    let sufficient = match sufficient_crypto(
+        multisigner,
+        address_details,
+        &load_meta_content.to_sign(),
+        seed_phrase,
+        pwd_entry,
+    ) {
+        Ok(s) => {
+            TrDbCold::new()
+                .set_history(events_to_batch(
+                    database,
+                    vec![Event::MetadataSigned {
+                        meta_values_export: MetaValuesExport::get(
+                            &meta_values,
+                            &s.verifier_value(),
+                        ),
+                    }],
+                )?)
+                .apply(database)?;
+            s.encode()
+        }
+        Err(e) => {
+            if let Error::WrongPassword = e {
+                TrDbCold::new()
+                    .set_history(events_to_batch(database, vec![Event::WrongPassword])?)
+                    .apply(database)?;
+            }
+            return Err(e);
+        }
+    };
+    Ok((
+        sufficient,
+        MSCContent::LoadMetadata {
+            name: meta_values.name,
+            version: meta_values.version,
+        },
+    ))
+}
+
+/// Function to generate hex line of qr data corresponding to `sufficient_crypto` for `add_specs` message
+pub(crate) fn sufficient_crypto_add_specs(
+    database: &sled::Db,
+    network_specs_key: &NetworkSpecsKey,
+    multisigner: &MultiSigner,
+    address_details: &AddressDetails,
+    seed_phrase: &str,
+    pwd_entry: &str,
+) -> Result<(Vec<u8>, MSCContent)> {
+    let network_specs_to_send = get_network_specs(database, network_specs_key)?.specs;
+    let add_specs_content = ContentAddSpecs::generate(&network_specs_to_send);
+    let sufficient = match sufficient_crypto(
+        multisigner,
+        address_details,
+        &add_specs_content.to_sign(),
+        seed_phrase,
+        pwd_entry,
+    ) {
+        Ok(s) => {
+            TrDbCold::new()
+                .set_history(events_to_batch(
+                    database,
+                    vec![Event::NetworkSpecsSigned {
+                        network_specs_export: NetworkSpecsExport::get(
+                            &network_specs_to_send,
+                            &s.verifier_value(),
+                        ),
+                    }],
+                )?)
+                .apply(database)?;
+            s.encode()
+        }
+        Err(e) => {
+            if let Error::WrongPassword = e {
+                TrDbCold::new()
+                    .set_history(events_to_batch(database, vec![Event::WrongPassword])?)
+                    .apply(database)?;
+            }
+            return Err(e);
+        }
+    };
+    Ok((
+        sufficient,
+        MSCContent::AddSpecs {
+            f: MSCNetworkInfo {
+                network_title: network_specs_to_send.title,
+                network_logo: network_specs_to_send.logo,
+                network_specs_key: hex::encode(network_specs_key.key()),
+            },
+        },
+    ))
+}
+
\ No newline at end of file diff --git a/rustdocs/src/transaction_signing/sign_transaction.rs.html b/rustdocs/src/transaction_signing/sign_transaction.rs.html new file mode 100644 index 0000000000..c0aa98a93b --- /dev/null +++ b/rustdocs/src/transaction_signing/sign_transaction.rs.html @@ -0,0 +1,353 @@ +sign_transaction.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+
use definitions::crypto::Encryption;
+use parity_scale_codec::Encode;
+use sp_core::blake2_256;
+use sp_runtime::MultiSignature;
+use zeroize::Zeroize;
+
+use db_handling::db_transactions::{SignContent, TrDbColdSign};
+
+use crate::sign_message::sign_as_address_key;
+use crate::{Error, Result};
+
+#[derive(Clone, Copy, Debug, Eq, PartialEq)]
+pub enum SignatureType {
+    Transaction,
+    Message,
+}
+
+pub struct SignatureAndChecksum {
+    signature_type: SignatureType,
+    signature: MultiSignature,
+    new_checksum: u32,
+}
+
+impl SignatureAndChecksum {
+    pub fn new_checksum(&self) -> u32 {
+        self.new_checksum
+    }
+
+    pub fn signature(&self) -> &MultiSignature {
+        &self.signature
+    }
+
+    pub fn signature_type(&self) -> SignatureType {
+        self.signature_type
+    }
+}
+
+impl ToString for SignatureAndChecksum {
+    fn to_string(&self) -> String {
+        match self.signature_type {
+            SignatureType::Transaction => hex::encode(self.signature.encode()),
+            SignatureType::Message => match &self.signature {
+                MultiSignature::Ed25519(a) => hex::encode(a),
+                MultiSignature::Sr25519(a) => hex::encode(a),
+                MultiSignature::Ecdsa(a) => hex::encode(a),
+            },
+        }
+    }
+}
+
+/// Function to create signatures using RN output action line, and user entered pin and password.
+/// Also needs database name to fetch saved transaction and key.
+pub fn create_signature(
+    database: &sled::Db,
+    seed_phrase: &str,
+    pwd_entry: &str,
+    user_comment: &str,
+    checksum: u32,
+    idx: usize,
+    encryption: Encryption,
+) -> Result<SignatureAndChecksum> {
+    let sign =
+        TrDbColdSign::from_storage(database, Some(checksum))?.ok_or(db_handling::Error::Sign)?;
+    let pwd = {
+        if sign.signing_bulk[idx].has_pwd() {
+            Some(pwd_entry)
+        } else {
+            None
+        }
+    };
+    let content = sign.signing_bulk[idx].content().to_owned();
+    let content_vec = match &content {
+        SignContent::Transaction { method, extensions } => {
+            [method.to_vec(), extensions.to_vec()].concat()
+        }
+        SignContent::Message(a) => a.as_bytes().to_vec(),
+    };
+
+    // For larger transactions, their hash should be signed instead; this is not implemented
+    // upstream so we put it here
+    let content_vec = match &content {
+        SignContent::Transaction {
+            method: _,
+            extensions: _,
+        } if content_vec.len() > 257 => blake2_256(&content_vec).to_vec(),
+        _ => content_vec,
+    };
+    let mut full_address = seed_phrase.to_owned() + &sign.signing_bulk[idx].path();
+    let signature = match sign_as_address_key(
+        &content_vec,
+        &sign.signing_bulk[idx].multisigner(),
+        &full_address,
+        pwd,
+        encryption,
+    ) {
+        Ok(s) => {
+            full_address.zeroize();
+            let c = sign.apply(database, false, user_comment, idx)?;
+            Ok((s.multi_signature(), c))
+        }
+        Err(e) => {
+            full_address.zeroize();
+            if let Error::WrongPassword = e {
+                let checksum = sign.apply(database, true, user_comment, idx)?;
+                Err(Error::WrongPasswordNewChecksum(checksum))
+            } else {
+                Err(e)
+            }
+        }
+    }?;
+
+    let signature_type = match &content {
+        SignContent::Transaction {
+            method: _,
+            extensions: _,
+        } => SignatureType::Transaction,
+        SignContent::Message(_) => SignatureType::Message,
+    };
+    Ok(SignatureAndChecksum {
+        signature_type,
+        signature: signature.0,
+        new_checksum: signature.1,
+    })
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use constants::ALICE_SEED_PHRASE;
+    use db_handling::cold_default::populate_cold;
+    use definitions::navigation::TransactionAction;
+    use definitions::network_specs::Verifier;
+    use sp_core::crypto::AccountId32;
+
+    use sp_runtime::traits::Verify;
+    use tempfile::tempdir;
+    use transaction_parsing::produce_output;
+
+    #[test]
+    fn sign_long_msg() {
+        let tmp_dir = tempdir().unwrap();
+        let db = sled::open(&tmp_dir).unwrap();
+
+        populate_cold(&db, Verifier { v: None }).unwrap();
+        let message = format!("<Bytes>{}bbb</Bytes>", "a".repeat(256));
+        let line = format!("530103d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d{}e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", hex::encode(&message));
+        let output = produce_output(&db, &line).unwrap();
+        let public = sp_core::sr25519::Public::try_from(
+            hex::decode("d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d")
+                .unwrap()
+                .as_ref(),
+        )
+        .unwrap();
+        if let TransactionAction::Sign {
+            actions: _,
+            checksum,
+        } = output
+        {
+            let signature = create_signature(
+                &db,
+                ALICE_SEED_PHRASE,
+                "",
+                "",
+                checksum,
+                0,
+                Encryption::Sr25519,
+            )
+            .unwrap();
+            assert!(signature
+                .signature
+                .verify(message.as_bytes(), &AccountId32::new(public.0)));
+        } else {
+            panic!("Wrong action: {output:?}")
+        }
+    }
+}
+
\ No newline at end of file diff --git a/rustdocs/static.files/COPYRIGHT-23e9bde6c69aea69.txt b/rustdocs/static.files/COPYRIGHT-23e9bde6c69aea69.txt new file mode 100644 index 0000000000..1447df792f --- /dev/null +++ b/rustdocs/static.files/COPYRIGHT-23e9bde6c69aea69.txt @@ -0,0 +1,50 @@ +# REUSE-IgnoreStart + +These documentation pages include resources by third parties. This copyright +file applies only to those resources. The following third party resources are +included, and carry their own copyright notices and license terms: + +* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2): + + Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ + with Reserved Font Name Fira Sans. + + Copyright (c) 2014, Telefonica S.A. + + Licensed under the SIL Open Font License, Version 1.1. + See FiraSans-LICENSE.txt. + +* rustdoc.css, main.js, and playpen.js: + + Copyright 2015 The Rust Developers. + Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or + the MIT license (LICENSE-MIT.txt) at your option. + +* normalize.css: + + Copyright (c) Nicolas Gallagher and Jonathan Neal. + Licensed under the MIT license (see LICENSE-MIT.txt). + +* Source Code Pro (SourceCodePro-Regular.ttf.woff2, + SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2): + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), + with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark + of Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceCodePro-LICENSE.txt. + +* Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2, + SourceSerif4-It.ttf.woff2): + + Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name + 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United + States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceSerif4-LICENSE.md. + +This copyright file is intended to be distributed with rustdoc output. + +# REUSE-IgnoreEnd diff --git a/rustdocs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt b/rustdocs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt new file mode 100644 index 0000000000..d7e9c149b7 --- /dev/null +++ b/rustdocs/static.files/FiraSans-LICENSE-db4b642586e02d97.txt @@ -0,0 +1,98 @@ +// REUSE-IgnoreStart + +Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. +with Reserved Font Name < Fira >, + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/rustdocs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 b/rustdocs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 new file mode 100644 index 0000000000..7a1e5fc548 Binary files /dev/null and b/rustdocs/static.files/FiraSans-Medium-8f9a781e4970d388.woff2 differ diff --git a/rustdocs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 b/rustdocs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 new file mode 100644 index 0000000000..e766e06ccb Binary files /dev/null and b/rustdocs/static.files/FiraSans-Regular-018c141bf0843ffd.woff2 differ diff --git a/rustdocs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt b/rustdocs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt new file mode 100644 index 0000000000..16fe87b06e --- /dev/null +++ b/rustdocs/static.files/LICENSE-APACHE-b91fa81cba47b86a.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/rustdocs/static.files/LICENSE-MIT-65090b722b3f6c56.txt b/rustdocs/static.files/LICENSE-MIT-65090b722b3f6c56.txt new file mode 100644 index 0000000000..31aa79387f --- /dev/null +++ b/rustdocs/static.files/LICENSE-MIT-65090b722b3f6c56.txt @@ -0,0 +1,23 @@ +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/rustdocs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 b/rustdocs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 new file mode 100644 index 0000000000..1866ad4bce Binary files /dev/null and b/rustdocs/static.files/NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2 differ diff --git a/rustdocs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt b/rustdocs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt new file mode 100644 index 0000000000..4b3edc29eb --- /dev/null +++ b/rustdocs/static.files/NanumBarunGothic-LICENSE-18c5adf4b52b4041.txt @@ -0,0 +1,103 @@ +// REUSE-IgnoreStart + +Copyright (c) 2010, NAVER Corporation (https://www.navercorp.com/), + +with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, +NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, +Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, Naver NanumMyeongjoEco, +NanumMyeongjoEco, Naver NanumGothicLight, NanumGothicLight, NanumBarunGothic, +Naver NanumBarunGothic, NanumSquareRound, NanumBarunPen, MaruBuri + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/rustdocs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 b/rustdocs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 new file mode 100644 index 0000000000..462c34efcd Binary files /dev/null and b/rustdocs/static.files/SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2 differ diff --git a/rustdocs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt b/rustdocs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt new file mode 100644 index 0000000000..0d2941e148 --- /dev/null +++ b/rustdocs/static.files/SourceCodePro-LICENSE-d180d465a756484a.txt @@ -0,0 +1,97 @@ +// REUSE-IgnoreStart + +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/rustdocs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 b/rustdocs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 new file mode 100644 index 0000000000..10b558e0b6 Binary files /dev/null and b/rustdocs/static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2 differ diff --git a/rustdocs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 b/rustdocs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 new file mode 100644 index 0000000000..5ec64eef0e Binary files /dev/null and b/rustdocs/static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2 differ diff --git a/rustdocs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 b/rustdocs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 new file mode 100644 index 0000000000..181a07f63b Binary files /dev/null and b/rustdocs/static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2 differ diff --git a/rustdocs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 b/rustdocs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 new file mode 100644 index 0000000000..2ae08a7bed Binary files /dev/null and b/rustdocs/static.files/SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2 differ diff --git a/rustdocs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 b/rustdocs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 new file mode 100644 index 0000000000..0263fc3042 Binary files /dev/null and b/rustdocs/static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2 differ diff --git a/rustdocs/static.files/ayu-fd19013d6ce078bf.css b/rustdocs/static.files/ayu-fd19013d6ce078bf.css new file mode 100644 index 0000000000..ba3aa60e0d --- /dev/null +++ b/rustdocs/static.files/ayu-fd19013d6ce078bf.css @@ -0,0 +1 @@ + :root{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}h1,h2,h3,h4,h1 a,.sidebar h2 a,.sidebar h3 a,#src-sidebar>.title{color:#fff;}h4{border:none;}.docblock code{color:#ffb454;}.docblock a>code{color:#39AFD7 !important;}.code-header,.docblock pre>code,pre,pre>code,.item-info code,.rustdoc.src .example-wrap{color:#e6e1cf;}.sidebar .current,.sidebar a:hover,#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus,#src-sidebar div.files>a.selected{color:#ffb44c;}.sidebar-elems .location{color:#ff7733;}.src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}.search-results a:hover,.search-results a:focus{color:#fff !important;background-color:#3c3c3c;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}#search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}#search-tabs>button:not(.selected){border:none;background-color:transparent !important;}#search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#settings-menu>a img{filter:invert(100);} \ No newline at end of file diff --git a/rustdocs/static.files/clipboard-7571035ce49a181d.svg b/rustdocs/static.files/clipboard-7571035ce49a181d.svg new file mode 100644 index 0000000000..8adbd99630 --- /dev/null +++ b/rustdocs/static.files/clipboard-7571035ce49a181d.svg @@ -0,0 +1 @@ + diff --git a/rustdocs/static.files/dark-0a43001d3fc2282c.css b/rustdocs/static.files/dark-0a43001d3fc2282c.css new file mode 100644 index 0000000000..81032b2fa6 --- /dev/null +++ b/rustdocs/static.files/dark-0a43001d3fc2282c.css @@ -0,0 +1 @@ +:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2A2A2A;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);} \ No newline at end of file diff --git a/rustdocs/static.files/favicon-16x16-8b506e7a72182f1c.png b/rustdocs/static.files/favicon-16x16-8b506e7a72182f1c.png new file mode 100644 index 0000000000..ea4b45cae1 Binary files /dev/null and b/rustdocs/static.files/favicon-16x16-8b506e7a72182f1c.png differ diff --git a/rustdocs/static.files/favicon-2c020d218678b618.svg b/rustdocs/static.files/favicon-2c020d218678b618.svg new file mode 100644 index 0000000000..8b34b51198 --- /dev/null +++ b/rustdocs/static.files/favicon-2c020d218678b618.svg @@ -0,0 +1,24 @@ + + + + + diff --git a/rustdocs/static.files/favicon-32x32-422f7d1d52889060.png b/rustdocs/static.files/favicon-32x32-422f7d1d52889060.png new file mode 100644 index 0000000000..69b8613ce1 Binary files /dev/null and b/rustdocs/static.files/favicon-32x32-422f7d1d52889060.png differ diff --git a/rustdocs/static.files/light-1596385f77d47ef2.css b/rustdocs/static.files/light-1596385f77d47ef2.css new file mode 100644 index 0000000000..50adde5b0d --- /dev/null +++ b/rustdocs/static.files/light-1596385f77d47ef2.css @@ -0,0 +1 @@ +:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#F5F5F5;--sidebar-background-color-hover:#E0E0E0;--code-block-background-color:#F5F5F5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#ffffff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#F5F5F5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);} \ No newline at end of file diff --git a/rustdocs/static.files/main-0795b7d26be81095.js b/rustdocs/static.files/main-0795b7d26be81095.js new file mode 100644 index 0000000000..87b4338982 --- /dev/null +++ b/rustdocs/static.files/main-0795b7d26be81095.js @@ -0,0 +1,12 @@ +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileLocationTitle=document.querySelector(".mobile-topbar h2");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileLocationTitle&&locationTitle){mobileLocationTitle.innerHTML=locationTitle.innerHTML}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function loadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link)}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadCss(getVar("static-root-path")+getVar("settings-css"));loadScript(getVar("static-root-path")+getVar("settings-js"));preLoadCss(getVar("static-root-path")+getVar("theme-light-css"));preLoadCss(getVar("static-root-path")+getVar("theme-dark-css"));preLoadCss(getVar("static-root-path")+getVar("theme-ayu-css"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=function(){this.TOOLTIP_FORCE_VISIBLE=this.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!this.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(this);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointermove=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!this.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ + restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ + enum, trait, type, macro, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"","Look for functions that accept or return \ + slices and \ + arrays by writing \ + square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=function(switchFocus){hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=function(){onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/rustdocs/static.files/normalize-76eba96aa4d2e634.css b/rustdocs/static.files/normalize-76eba96aa4d2e634.css new file mode 100644 index 0000000000..469959f137 --- /dev/null +++ b/rustdocs/static.files/normalize-76eba96aa4d2e634.css @@ -0,0 +1,2 @@ + /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} \ No newline at end of file diff --git a/rustdocs/static.files/noscript-cffde32267a19fd6.css b/rustdocs/static.files/noscript-cffde32267a19fd6.css new file mode 100644 index 0000000000..12d3f6dd5f --- /dev/null +++ b/rustdocs/static.files/noscript-cffde32267a19fd6.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;} \ No newline at end of file diff --git a/rustdocs/static.files/rust-logo-151179464ae7ed46.svg b/rustdocs/static.files/rust-logo-151179464ae7ed46.svg new file mode 100644 index 0000000000..62424d8ffd --- /dev/null +++ b/rustdocs/static.files/rust-logo-151179464ae7ed46.svg @@ -0,0 +1,61 @@ + + + diff --git a/rustdocs/static.files/rustdoc-cb6f1f67f1bcd037.css b/rustdocs/static.files/rustdoc-cb6f1f67f1bcd037.css new file mode 100644 index 0000000000..ac787240c1 --- /dev/null +++ b/rustdocs/static.files/rustdoc-cb6f1f67f1bcd037.css @@ -0,0 +1,8 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p{margin:0 0 .75em 0;}p:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.src .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.src .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:300px;}.src-sidebar-expanded .src .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.sidebar .logo-container{margin-top:10px;margin-bottom:10px;text-align:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;align-items:center;vertical-align:text-bottom;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#search-tabs .count{display:block;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.src-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;} \ No newline at end of file diff --git a/rustdocs/static.files/scrape-examples-ef1e698c1d417c0c.js b/rustdocs/static.files/scrape-examples-ef1e698c1d417c0c.js new file mode 100644 index 0000000000..ba830e3744 --- /dev/null +++ b/rustdocs/static.files/scrape-examples-ef1e698c1d417c0c.js @@ -0,0 +1 @@ +"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelector(".src-line-numbers");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines.children[line].offsetTop}else{const wrapper=elt.querySelector(".code-wrapper");const halfHeight=wrapper.offsetHeight/2;const offsetTop=lines.children[loc[0]].offsetTop;const lastLine=lines.children[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function updateScrapedExample(example,isHidden){const locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");if(locs.length>1){const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};example.querySelector(".prev").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});example.querySelector(".next").addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}const expandButton=example.querySelector(".expand");if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded")}})}scrollToLoc(example,locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>updateScrapedExample(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>updateScrapedExample(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/rustdocs/static.files/search-6dfdfced5eff6596.js b/rustdocs/static.files/search-6dfdfced5eff6596.js new file mode 100644 index 0000000000..90d0eb7533 --- /dev/null +++ b/rustdocs/static.files/search-6dfdfced5eff6596.js @@ -0,0 +1,5 @@ +"use strict";(function(){const itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];const longItemTypes=["module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","primitive type","assoc type","constant","assoc const","union","foreign type","keyword","existential type","attribute macro","derive macro","trait alias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;function buildTypeMapIndex(name){if(name===""||name===null){return-1}if(typeNameIdMap.has(name)){return typeNameIdMap.get(name)}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,id);return id}}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-]".indexOf(c)!==-1}function isStopCharacter(c){return isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","}function isPathSeparator(c){return c===":"||isWhitespace(c)}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(!isWhitespace(c)){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}return{name:"never",id:-1,fullPath:["never"],pathWithoutLast:[],pathLast:"never",generics:[],typeFilter:"primitive",}}if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(path.includes("::::")){throw["Unexpected ","::::"]}else if(path.includes(" ::")){throw["Unexpected "," ::"]}else if(path.includes(":: ")){throw["Unexpected ",":: "]}const pathSegments=path.split(/::|\s+/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}return{name:name.trim(),id:-1,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast:pathSegments[pathSegments.length-1],generics:generics,typeFilter,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",","," or ",endChar,...extra,", found ",c,]}throw["Expected ",",",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(isWhitespace(c)){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,literalSearch:false,error:null,correction:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id>-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(fnType,queryElem){return unifyFunctionTypes(fnType.generics,queryElem.generics)}function unifyFunctionTypes(fnTypes,queryElems){if(queryElems.length===0){return true}if(!fnTypes||fnTypes.length===0){return false}const queryElemSet=new Map();const addQueryElemToQueryElemSet=function addQueryElemToQueryElemSet(queryElem){let currentQueryElemList;if(queryElemSet.has(queryElem.id)){currentQueryElemList=queryElemSet.get(queryElem.id)}else{currentQueryElemList=[];queryElemSet.set(queryElem.id,currentQueryElemList)}currentQueryElemList.push(queryElem)};for(const queryElem of queryElems){addQueryElemToQueryElemSet(queryElem)}const fnTypeSet=new Map();const addFnTypeToFnTypeSet=function addFnTypeToFnTypeSet(fnType){const queryContainsArrayOrSliceElem=queryElemSet.has(typeNameIdOfArrayOrSlice);if(fnType.id===-1||!(queryElemSet.has(fnType.id)||(fnType.id===typeNameIdOfSlice&&queryContainsArrayOrSliceElem)||(fnType.id===typeNameIdOfArray&&queryContainsArrayOrSliceElem))){for(const innerFnType of fnType.generics){addFnTypeToFnTypeSet(innerFnType)}return}let currentQueryElemList=queryElemSet.get(fnType.id)||[];let matchIdx=currentQueryElemList.findIndex(queryElem=>{return typePassesFilter(queryElem.typeFilter,fnType.ty)&&checkGenerics(fnType,queryElem)});if(matchIdx===-1&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)&&queryContainsArrayOrSliceElem){currentQueryElemList=queryElemSet.get(typeNameIdOfArrayOrSlice)||[];matchIdx=currentQueryElemList.findIndex(queryElem=>{return typePassesFilter(queryElem.typeFilter,fnType.ty)&&checkGenerics(fnType,queryElem)})}if(matchIdx===-1){for(const innerFnType of fnType.generics){addFnTypeToFnTypeSet(innerFnType)}return}let currentFnTypeList;if(fnTypeSet.has(fnType.id)){currentFnTypeList=fnTypeSet.get(fnType.id)}else{currentFnTypeList=[];fnTypeSet.set(fnType.id,currentFnTypeList)}currentFnTypeList.push(fnType)};for(const fnType of fnTypes){addFnTypeToFnTypeSet(fnType)}const doHandleQueryElemList=(currentFnTypeList,queryElemList)=>{if(queryElemList.length===0){return true}const queryElem=queryElemList.pop();const l=currentFnTypeList.length;for(let i=0;i{if(!fnTypeSet.has(id)){if(id===typeNameIdOfArrayOrSlice){return handleQueryElemList(typeNameIdOfSlice,queryElemList)||handleQueryElemList(typeNameIdOfArray,queryElemList)}return false}const currentFnTypeList=fnTypeSet.get(id);if(currentFnTypeList.length0?checkIfInList(row.generics,elem):false}const matchesExact=row.id===elem.id;const matchesArrayOrSlice=elem.id===typeNameIdOfArrayOrSlice&&(row.id===typeNameIdOfSlice||row.id===typeNameIdOfArray);if((matchesExact||matchesArrayOrSlice)&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem)}return true}return checkIfInList(row.generics,elem)}function checkPath(contains,ty,maxEditDistance){if(contains.length===0){return 0}let ret_dist=maxEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem);if(in_args){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem);if(returned){addIntoResults(results_returned,fullId,pos,-1,0,0,maxEditDistance)}if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems)){return}if(!unifyFunctionTypes(row.type.output,parsedQuery.returned)){return}addIntoResults(results,row.id,pos,0,0,0,Number.MAX_VALUE)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);function convertNameToId(elem){if(typeNameIdMap.has(elem.name)){elem.id=typeNameIdMap.get(elem.name)}else if(!parsedQuery.literalSearch){let match=-1;let matchDist=maxEditDistance+1;let matchName="";for(const[name,id]of typeNameIdMap){const dist=editDistance(name,elem.name,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==-1){parsedQuery.correction=matchName}elem.id=match}for(const elem2 of elem.generics){convertNameToId(elem2)}}for(const elem of parsedQuery.elems){convertNameToId(elem)}for(const elem of parsedQuery.returned){convertNameToId(elem)}if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";length+=1;const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ +${item.alias} - see \ +
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ +${item.displayPath}${name}\ +
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
"}let output=`

Results${crates}

`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;return types.map(type=>{let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}return{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:generics,}})}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){const pathIndex=functionSearchType[INPUTS_DATA];inputs=[{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){const pathIndex=functionSearchType[OUTPUT_DATA];output=[{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}return{inputs,output,}}function buildIndex(rawSearchIndex){searchIndex=[];const searchWords=[];typeNameIdMap=new Map();const charA="A".charCodeAt(0);let currentIndex=0;let id=0;typeNameIdOfArray=buildTypeMapIndex("array");typeNameIdOfSlice=buildTypeMapIndex("slice");typeNameIdOfArrayOrSlice=buildTypeMapIndex("[]");for(const crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}let crateSize=0;const crateCorpus=rawSearchIndex[crate];searchWords.push(crate);const crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),deprecated:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemDescs=crateCorpus.d;const itemParentIdxs=crateCorpus.i;const itemFunctionSearchTypes=crateCorpus.f;const deprecatedItems=new Set(crateCorpus.c);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];let len=paths.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/rustdocs/static.files/settings-8c76f75bfb6bd192.css b/rustdocs/static.files/settings-8c76f75bfb6bd192.css new file mode 100644 index 0000000000..5241bb861b --- /dev/null +++ b/rustdocs/static.files/settings-8c76f75bfb6bd192.css @@ -0,0 +1,3 @@ +.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;} \ No newline at end of file diff --git a/rustdocs/static.files/settings-de11bff964e9d4e5.js b/rustdocs/static.files/settings-de11bff964e9d4e5.js new file mode 100644 index 0000000000..cc508a861c --- /dev/null +++ b/rustdocs/static.files/settings-de11bff964e9d4e5.js @@ -0,0 +1,17 @@ +"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +
+
${setting_name}
+
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ + `});output+=`\ +
+
`}else{const checked=setting["default"]===true?" checked":"";output+=`\ +
\ + \ +
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=function(event){event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=function(event){if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/rustdocs/static.files/src-script-3280b574d94e47b4.js b/rustdocs/static.files/src-script-3280b574d94e47b4.js new file mode 100644 index 0000000000..9ea88921e2 --- /dev/null +++ b/rustdocs/static.files/src-script-3280b574d94e47b4.js @@ -0,0 +1 @@ +"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth"){addClass(document.documentElement,"src-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"src-sidebar-expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){const sidebarToggle=document.createElement("div");sidebarToggle.id="src-sidebar-toggle";const inner=document.createElement("button");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}inner.onclick=toggleSidebar;sidebarToggle.appendChild(inner);return sidebarToggle}function createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(srcIndex).forEach(key=>{srcIndex[key][NAME_OFFSET]=key;hasFoundFile=createDirEntry(srcIndex[key],sidebar,"",hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSrcLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSrcLines(match)}});onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/rustdocs/static.files/storage-db41da1a38ea3cb8.js b/rustdocs/static.files/storage-db41da1a38ea3cb8.js new file mode 100644 index 0000000000..b872813591 --- /dev/null +++ b/rustdocs/static.files/storage-db41da1a38ea3cb8.js @@ -0,0 +1 @@ +"use strict";const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}let newHref;if(newThemeName==="light"||newThemeName==="dark"||newThemeName==="ayu"){newHref=getVar("static-root-path")+getVar("theme-"+newThemeName+"-css")}else{newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css"}if(!window.currentTheme){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/rustdocs/static.files/wheel-7b819b6101059cd0.svg b/rustdocs/static.files/wheel-7b819b6101059cd0.svg new file mode 100644 index 0000000000..83c07f63d1 --- /dev/null +++ b/rustdocs/static.files/wheel-7b819b6101059cd0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rustdocs/transaction_parsing/all.html b/rustdocs/transaction_parsing/all.html new file mode 100644 index 0000000000..c4c95626f7 --- /dev/null +++ b/rustdocs/transaction_parsing/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/cards/index.html b/rustdocs/transaction_parsing/cards/index.html new file mode 100644 index 0000000000..1095394588 --- /dev/null +++ b/rustdocs/transaction_parsing/cards/index.html @@ -0,0 +1 @@ +transaction_parsing::cards - Rust
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/cards/sidebar-items.js b/rustdocs/transaction_parsing/cards/sidebar-items.js new file mode 100644 index 0000000000..5244ce01cc --- /dev/null +++ b/rustdocs/transaction_parsing/cards/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {}; \ No newline at end of file diff --git a/rustdocs/transaction_parsing/check_signature/fn.pass_crypto.html b/rustdocs/transaction_parsing/check_signature/fn.pass_crypto.html new file mode 100644 index 0000000000..86ce475126 --- /dev/null +++ b/rustdocs/transaction_parsing/check_signature/fn.pass_crypto.html @@ -0,0 +1,4 @@ +pass_crypto in transaction_parsing::check_signature - Rust
pub fn pass_crypto(
+    data_hex: &str,
+    content: TransferContent
+) -> Result<InfoPassedCrypto>
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/check_signature/index.html b/rustdocs/transaction_parsing/check_signature/index.html new file mode 100644 index 0000000000..5ef7d4ffc7 --- /dev/null +++ b/rustdocs/transaction_parsing/check_signature/index.html @@ -0,0 +1 @@ +transaction_parsing::check_signature - Rust
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/check_signature/sidebar-items.js b/rustdocs/transaction_parsing/check_signature/sidebar-items.js new file mode 100644 index 0000000000..5bf2e28b88 --- /dev/null +++ b/rustdocs/transaction_parsing/check_signature/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["pass_crypto"],"struct":["InfoPassedCrypto"]}; \ No newline at end of file diff --git a/rustdocs/transaction_parsing/check_signature/struct.InfoPassedCrypto.html b/rustdocs/transaction_parsing/check_signature/struct.InfoPassedCrypto.html new file mode 100644 index 0000000000..da9765c58c --- /dev/null +++ b/rustdocs/transaction_parsing/check_signature/struct.InfoPassedCrypto.html @@ -0,0 +1,119 @@ +InfoPassedCrypto in transaction_parsing::check_signature - Rust
pub struct InfoPassedCrypto {
+    pub verifier: Verifier,
+    pub message: Vec<u8>,
+    pub tail: Vec<u8>,
+}

Fields§

§verifier: Verifier§message: Vec<u8>§tail: Vec<u8>

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/transaction_parsing/derivations/fn.prepare_derivations_preview.html b/rustdocs/transaction_parsing/derivations/fn.prepare_derivations_preview.html new file mode 100644 index 0000000000..6a1f4469fb --- /dev/null +++ b/rustdocs/transaction_parsing/derivations/fn.prepare_derivations_preview.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_parsing/fn.prepare_derivations_preview.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_parsing/dynamic_derivations/fn.dd_transaction_msg_genesis_encryption.html b/rustdocs/transaction_parsing/dynamic_derivations/fn.dd_transaction_msg_genesis_encryption.html new file mode 100644 index 0000000000..ca2e05049f --- /dev/null +++ b/rustdocs/transaction_parsing/dynamic_derivations/fn.dd_transaction_msg_genesis_encryption.html @@ -0,0 +1,4 @@ +dd_transaction_msg_genesis_encryption in transaction_parsing::dynamic_derivations - Rust
pub fn dd_transaction_msg_genesis_encryption(
+    data_hex: &str
+) -> Result<(DynamicDerivationTransaction, Vec<u8>, H256, Encryption)>
Expand description

Partially parses dynamic derivation transaction to make it compatible with multisigner_msg_genesis_encryption

+
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/dynamic_derivations/fn.process_dynamic_derivations.html b/rustdocs/transaction_parsing/dynamic_derivations/fn.process_dynamic_derivations.html new file mode 100644 index 0000000000..9771b6463c --- /dev/null +++ b/rustdocs/transaction_parsing/dynamic_derivations/fn.process_dynamic_derivations.html @@ -0,0 +1,6 @@ +process_dynamic_derivations in transaction_parsing::dynamic_derivations - Rust
pub fn process_dynamic_derivations(
+    database: &Db,
+    seeds: HashMap<String, String>,
+    data_hex: &str
+) -> Result<DDPreview>
Expand description

Parses dynamic derivation request and returns preview of the result

+
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/dynamic_derivations/index.html b/rustdocs/transaction_parsing/dynamic_derivations/index.html new file mode 100644 index 0000000000..50c88cfdc2 --- /dev/null +++ b/rustdocs/transaction_parsing/dynamic_derivations/index.html @@ -0,0 +1 @@ +transaction_parsing::dynamic_derivations - Rust

Functions

\ No newline at end of file diff --git a/rustdocs/transaction_parsing/dynamic_derivations/sidebar-items.js b/rustdocs/transaction_parsing/dynamic_derivations/sidebar-items.js new file mode 100644 index 0000000000..57e2d1f85c --- /dev/null +++ b/rustdocs/transaction_parsing/dynamic_derivations/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["dd_transaction_msg_genesis_encryption","process_dynamic_derivations"]}; \ No newline at end of file diff --git a/rustdocs/transaction_parsing/enum.Error.html b/rustdocs/transaction_parsing/enum.Error.html new file mode 100644 index 0000000000..fee843f5df --- /dev/null +++ b/rustdocs/transaction_parsing/enum.Error.html @@ -0,0 +1,460 @@ +Error in transaction_parsing - Rust
pub enum Error {
+
Show 40 variants Definitions(Error), + Sled(Error), + Metadata(MetadataError), + Parser(Error), + TooShort, + AddrNotFound(String), + NotSubstrate(String), + BadSignature, + PayloadNotSupported(String), + DbError(Error), + HistoricalMetadata { + name: String, + }, + SpecsCollision { + name: String, + encryption: Encryption, + }, + HistoryNetworkSpecs { + name: String, + encryption: Encryption, + }, + ImportantSpecsChanged(NetworkSpecsKey), + SameNameVersionDifferentMeta { + name: String, + version: u32, + }, + EncryptionNotSupported(String), + AllExtensionsParsingFailed { + network_name: String, + errors: Vec<(u32, Error)>, + }, + SeparateMethodExtensions, + NoMetadata { + name: String, + }, + UnknownNetwork { + genesis_hash: H256, + encryption: Encryption, + }, + Codec(Error), + AddSpecsDifferentBase58 { + genesis_hash: H256, + name: String, + base58_database: u16, + base58_input: u16, + }, + AddSpecsDifferentName { + genesis_hash: H256, + name_database: String, + name_input: String, + }, + SpecsKnown { + name: String, + encryption: Encryption, + }, + NeedVerifier { + name: String, + verifier_value: VerifierValue, + }, + AddSpecsVerifierChanged { + name: String, + old_verifier_value: VerifierValue, + new_verifier_value: VerifierValue, + }, + NeedGeneralVerifier { + content: GeneralVerifierForContent, + verifier_value: VerifierValue, + }, + GeneralVerifierChanged { + content: GeneralVerifierForContent, + old_general_verifier_value: VerifierValue, + new_general_verifier_value: VerifierValue, + }, + TypesKnown, + LoadMetaUnknownNetwork { + name: String, + }, + LoadMetaNoSpecs { + name: String, + valid_current_verifier: ValidCurrentVerifier, + general_verifier: Verifier, + }, + LoadMetaWrongGenesisHash { + name_metadata: String, + name_specs: String, + genesis_hash: H256, + }, + LoadMetaSetVerifier { + name: String, + new_verifier_value: VerifierValue, + }, + LoadMetaVerifierChanged { + name: String, + old_verifier_value: VerifierValue, + new_verifier_value: VerifierValue, + }, + LoadMetaSetGeneralVerifier { + name: String, + new_general_verifier_value: VerifierValue, + }, + LoadMetaGeneralVerifierChanged { + name: String, + old_general_verifier_value: VerifierValue, + new_general_verifier_value: VerifierValue, + }, + MetadataKnown { + name: String, + version: u32, + }, + NetworkForDerivationsImport { + genesis_hash: H256, + encryption: Encryption, + }, + NotUtf8(Utf8Error), + ParserError(String), +
}
Expand description

Transaction parsing error.

+

Variants§

§

Definitions(Error)

§

Sled(Error)

§

Metadata(MetadataError)

§

Parser(Error)

§

TooShort

Received transaction is unexpectedly short, more bytes were expected.

+
§

AddrNotFound(String)

Key corresponding to the address was not found in the db

+
§

NotSubstrate(String)

All transactions are expected to be the Substrate ones, starting with +hexadecimal 53.

+

Associated data is the first two elements of the hexadecimal string in +received transaction.

+
§

BadSignature

Update payload signature is invalid for given public key, encryption +algorithm and payload content

+
§

PayloadNotSupported(String)

There is a limited number of payloads supported by the Vault. Payload +type is declared in the transaction prelude 53xxyy in yy part.

+

Currently supported payloads are:

+
    +
  • 00 mortal signable transaction
  • +
  • 02 immortal signable transaction
  • +
  • 03 text message
  • +
  • 80 load_metadata update
  • +
  • 81 load_types update
  • +
  • c1 add_specs update
  • +
  • de derivations update
  • +
  • f0 print all available cards (testing tool)
  • +
+

Other codes are not supported, the error associated data contains the +hexadecimal string with unsupported payload code.

+
§

DbError(Error)

DB error.

+
§

HistoricalMetadata

Fields

§name: String

Network metadata needed to parse historical transaction, no entries at +all for a given network name.

+
§

SpecsCollision

Fields

§name: String
§encryption: Encryption

More than one entry found for network specs with given name and +encryption, when trying to parse transaction from historical record.

+
§

HistoryNetworkSpecs

Fields

§name: String
§encryption: Encryption

OrderedNetworkSpecs needed to parse +historical transactions saved into history log, searched by network +name and encryption.

+
§

ImportantSpecsChanged(NetworkSpecsKey)

NetworkSpecs +received in add_specs payload are for a network that already has +OrderedNetworkSpecs entry in +the SPECSTREE tree of the Vault database with same +NetworkSpecsKey, and the permanent components of the network +specs stores and received are different.

+

The components that could not be changed by an update, without removing +the network completely, are:

+
    +
  • base58prefix, network-associated base58 prefix
  • +
  • decimals
  • +
  • name, network name, as it appears in the network metadata
  • +
  • unit
  • +
+
§

SameNameVersionDifferentMeta

Fields

§name: String
§version: u32

Network name and version from metadata received in load_metadata +message already have a corresponding entry in METATREE tree of the +Vault database. However, the received metadata is different from +the one already stored in the database.

+
§

EncryptionNotSupported(String)

There is a limited number of encryption algorithms supported by the +Vault. Encryption algorithm is declared in the transaction prelude +53xxyy in xx part.

+

For signable transactions (i.e. with prelude 53xx00, 53xx02 and +53xx03) currently supported encryption algorithms are:

+
    +
  • 00 for Ed25519
  • +
  • 01 for Sr25519
  • +
  • 02 for Ecdsa
  • +
+

In signable transaction the encryption algorithm corresponds to the +encryption associated with the address that generated the transaction +and can sign it (and thus to the encryption supported by the network +in which the transaction is generated).

+

Update transactions have currently supported encryption codes:

+
    +
  • 00 for Ed25519
  • +
  • 01 for Sr25519
  • +
  • 02 for Ecdsa
  • +
  • ff for unsigned update transactions
  • +
+

In signed update transactions the encryption code indicates which +algorithm to use for update signature verification.

+

Unsigned update transactions have no associated signature, are not +checked and are strongly discouraged.

+

Other encryption codes are not supported, the error associated data +contains the hexadecimal string with unsupported encryption code.

+
§

AllExtensionsParsingFailed

Fields

§network_name: String
§errors: Vec<(u32, Error)>

Error parsing extensions of a signable transaction with all available +versions of metadata for given network.

+
§

SeparateMethodExtensions

Can not separate method from extensions, bad transaction.

+
§

NoMetadata

Fields

§name: String

Received transaction that should be parsed prior to approval (with +prelude 53xx00 or 53xx02) is generated in the network that has no +metadata entries in the METATREE tree of the database.

+

Without metadata the transaction could not be decoded.

+
§

UnknownNetwork

Fields

§genesis_hash: H256
§encryption: Encryption

Received signable transaction (with prelude 53xx00, 53xx02 or +53xx03) is generated in the network that has no corresponding +OrderedNetworkSpecs entry in the +SPECSTREE tree of the database.

+
§

Codec(Error)

§

AddSpecsDifferentBase58

Fields

§genesis_hash: H256
§name: String
§base58_database: u16
§base58_input: u16

NetworkSpecs +received in add_specs payload are for a network that already has +OrderedNetworkSpecs entry in +the SPECSTREE tree of the Vault database with not necessarily +same encryption, i.e. possibly different NetworkSpecsKey, +and base58 prefix in stored network specs is different from the base58 +prefix in the received ones.

+
§

AddSpecsDifferentName

Fields

§genesis_hash: H256
§name_database: String
§name_input: String

NetworkSpecs +received in add_specs payload are for a network that already has +OrderedNetworkSpecs entry in +the SPECSTREE tree of the Vault database with not necessarily +same encryption, i.e. possibly different NetworkSpecsKey, +and network name in stored network specs is different from the network +name in the received ones.

+
§

SpecsKnown

Fields

§name: String

network name

+
§encryption: Encryption

network Encryption

+

NetworkSpecs from the +received add_specs payload already have an entry in SPECSTREE tree +of the database.

+

Not exactly an error, but Vault can’t do anything and complains.

+
§

NeedVerifier

Fields

§name: String

network name

+
§verifier_value: VerifierValue

expected verifier for this network

+

Received add_specs or load_metadata update payload is not verified.

+

Network, however, was verified previously by verifier with certain +VerifierValue and corresponding entry in VERIFIERS tree of the +database is +CurrentVerifier::Valid(ValidCurrentVerifier::Custom(Some(verifier_value))).

+

Vault does not allow downgrading the verifiers.

+
§

AddSpecsVerifierChanged

Fields

§name: String

network name

+
§old_verifier_value: VerifierValue

VerifierValue for the network in the database

+
§new_verifier_value: VerifierValue

VerifierValue for the payload

+

Received add_specs update payload is signed by new_verifier_value.

+

Network has entry in VERIFIERS tree of the database with +CurrentVerifier::Valid(ValidCurrentVerifier::Custom(Some(old_verifier_value))), +but new_verifier_value and old_verifier_value are different, and +new_verifier_value is not the general verifier.

+

Custom verifier could be upgraded only to general one, see +here.

+
§

NeedGeneralVerifier

Fields

§content: GeneralVerifierForContent

payload that requires general verifier

+
§verifier_value: VerifierValue

VerifierValue currently associated with the general verifier, +expected verifier for the data

+

Received update payload is not verified, although the verification by +currently used general verifier with certain VerifierValue was +expected.

+

Network has entry in VERIFIERS tree of the database with +CurrentVerifier::Valid(ValidCurrentVerifier::General).

+
§

GeneralVerifierChanged

Fields

§content: GeneralVerifierForContent

payload that requires general verifier

+
§old_general_verifier_value: VerifierValue

general verifier associated VerifierValue in the database

+
§new_general_verifier_value: VerifierValue

VerifierValue that was used to sign the update

+

Received add_specs or load_types is signed by +new_general_verifier_value.

+
§

TypesKnown

Types information received in the load_types payload is exactly +same, as the one already stored in the SETTREE tree of the database +under the key TYPES.

+

Not exactly an error, but Vault can’t do anything and complains.

+
§

LoadMetaUnknownNetwork

Fields

§name: String

network name as it is in the received metadata

+

User attempted to load into Vault the metadata for the network that +has no CurrentVerifier entry +in the VERIFIERS tree of the Vault database.

+
§

LoadMetaNoSpecs

Fields

§name: String

network name as it is in the received metadata

+
§valid_current_verifier: ValidCurrentVerifier

network-associated +ValidCurrentVerifier

+
§general_verifier: Verifier

Vault general verifier

+

User attempted to load into Vault the metadata for the network that +has no associated OrderedNetworkSpecs +entries in the SPECSTREE tree of the Vault database, although it has +an associated +ValidCurrentVerifier, +i.e. it was known to user at some point and never disabled.

+
§

LoadMetaWrongGenesisHash

Fields

§name_metadata: String

network name as it is in the received metadata

+
§name_specs: String

network name as it is in the network specs for genesis hash

+
§genesis_hash: H256

genesis hash from the load_metadata payload, that was used to find +the network specs and verifier information

+

User attempted to load into Vault the metadata for the network that +has a OrderedNetworkSpecs entry in the +SPECSTREE tree of the Vault database, but specs have a different +network name.

+

Most likely, wrong genesis hash was attached to the metadata update.

+

Since the network metadata in METATREE is identified by network name, +and verifier is identified by the genesis hash, this should be checked +on load_metadata.

+
§

LoadMetaSetVerifier

Fields

§name: String

network name

+
§new_verifier_value: VerifierValue

VerifierValue that has signed the update payload

+

Received load_metadata update payload is signed.

+

Network has entry in VERIFIERS tree of the database with +CurrentVerifier::Valid(ValidCurrentVerifier::Custom(None)), i.e. it was +never verified previously and its network specs were loaded unverified.

+

Verified add_specs must be loaded before any verified load_metadata.

+
§

LoadMetaVerifierChanged

Fields

§name: String

network name

+
§old_verifier_value: VerifierValue

VerifierValue for the network in the database

+
§new_verifier_value: VerifierValue

VerifierValue for the payload

+

Received load_metadata update payload is signed by new_verifier_value.

+

Network has entry in VERIFIERS tree of the database with +CurrentVerifier::Valid(ValidCurrentVerifier::Custom(Some(old_verifier_value))), +but new_verifier_value and old_verifier_value are different, and +new_verifier_value is not the general verifier.

+

Custom verifier could be upgraded only to general one, see +here, and during that network specs must be +updated prior to loading the metadata.

+
§

LoadMetaSetGeneralVerifier

Fields

§name: String

network name

+
§new_general_verifier_value: VerifierValue

VerifierValue that has signed the payload instead of the +known general verifier

+

Received load_metadata update payload is signed by +new_general_verifier_value.

+

Network has entry in VERIFIERS tree of the database with +CurrentVerifier::Valid(ValidCurrentVerifier::General), +and database value for general verifier is None, i.e. the network +specs for this network are not verified.

+

Verified add_specs must be loaded before any verified load_metadata.

+
§

LoadMetaGeneralVerifierChanged

Fields

§name: String

network name

+
§old_general_verifier_value: VerifierValue

general verifier associated VerifierValue in the database

+
§new_general_verifier_value: VerifierValue

VerifierValue that was used to sign the update

+

Received load_metadata update payload is signed by +new_general_verifier_value.

+

Network has entry in VERIFIERS tree of the database with +CurrentVerifier::Valid(ValidCurrentVerifier::General), +and database value for general verifier is +Some(old_general_verifier_value).

+

General verifier with assigned VerifierValue could not be changed +without Vault wipe. If the Vault is reset with no general verifier, +and the network in question is the default one (currently Polkadot, +Kusama, and Westend), the network will still be recorded as the one +verified by the general verifier and accepting verified add_specs for +it would result in setting the general verifier. If the network is not +the default one and if by the time its add_specs are loaded the +general verifier already has an associated VerifierValue, loading +verified add_specs would result in the network having custom verifier.

+
§

MetadataKnown

Fields

§name: String

network name (identical for received and for stored metadata)

+
§version: u32

network version (identical for received and for stored metadata)

+

Network name and version from metadata received in load_metadata +message already have a corresponding entry in METATREE tree of the +Vault database, with exactly same metadata.

+

Not exactly an error, but Vault can’t do anything and complains.

+
§

NetworkForDerivationsImport

Fields

§genesis_hash: H256

network genesis hash

+
§encryption: Encryption

network supported encryption

+

OrderedNetworkSpecs for network in +which the imported derivations are user to create addresses.

+
§

NotUtf8(Utf8Error)

§

ParserError(String)

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<MetadataError> for Error

source§

fn from(source: MetadataError) -> Self

Converts to this type from the input type.
source§

impl From<Utf8Error> for Error

source§

fn from(source: Utf8Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/transaction_parsing/enum.StubNav.html b/rustdocs/transaction_parsing/enum.StubNav.html new file mode 100644 index 0000000000..8f5e79db50 --- /dev/null +++ b/rustdocs/transaction_parsing/enum.StubNav.html @@ -0,0 +1,135 @@ +StubNav in transaction_parsing - Rust
pub enum StubNav {
+    AddSpecs {
+        n: NetworkSpecsKey,
+    },
+    LoadMeta {
+        l: NetworkSpecsKey,
+    },
+    LoadTypes,
+}
Expand description

Enum describing Stub content. +Is used for proper navigation. Variants: +AddSpecs (with associated NetworkSpecsKey), LoadMeta (with associated +NetworkSpecsKey for the first by order network using those metadata), +and LoadTypes

+

Variants§

§

AddSpecs

§

LoadMeta

§

LoadTypes

Trait Implementations§

source§

impl Clone for StubNav

source§

fn clone(&self) -> StubNav

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for StubNav

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl PartialEq<StubNav> for StubNav

source§

fn eq(&self, other: &StubNav) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for StubNav

source§

impl StructuralEq for StubNav

source§

impl StructuralPartialEq for StubNav

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/transaction_parsing/enum.TransactionAction.html b/rustdocs/transaction_parsing/enum.TransactionAction.html new file mode 100644 index 0000000000..8e4c12f2a7 --- /dev/null +++ b/rustdocs/transaction_parsing/enum.TransactionAction.html @@ -0,0 +1,141 @@ +TransactionAction in transaction_parsing - Rust
pub enum TransactionAction {
+    Derivations {
+        content: Box<TransactionCardSet, Global>,
+    },
+    Sign {
+        actions: Vec<TransactionSignAction, Global>,
+        checksum: u32,
+    },
+    Stub {
+        s: Box<TransactionCardSet, Global>,
+        u: u32,
+        stub: StubNav,
+    },
+    Read {
+        r: Box<TransactionCardSet, Global>,
+    },
+}
Expand description

Enum containing card sets for four different outcomes: +importing derivations (Derivations), signing (Sign), +accepting (Stub) and reading, for example, in case of an error (Read)

+

Variants§

§

Derivations

§

Sign

Fields

§checksum: u32
§

Stub

§

Read

Trait Implementations§

source§

impl Clone for TransactionAction

source§

fn clone(&self) -> TransactionAction

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for TransactionAction

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl PartialEq<TransactionAction> for TransactionAction

source§

fn eq(&self, other: &TransactionAction) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for TransactionAction

source§

impl StructuralEq for TransactionAction

source§

impl StructuralPartialEq for TransactionAction

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/transaction_parsing/error/enum.Error.html b/rustdocs/transaction_parsing/error/enum.Error.html new file mode 100644 index 0000000000..d7aaf845a7 --- /dev/null +++ b/rustdocs/transaction_parsing/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_parsing/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_parsing/error/type.Result.html b/rustdocs/transaction_parsing/error/type.Result.html new file mode 100644 index 0000000000..d4eb3b3985 --- /dev/null +++ b/rustdocs/transaction_parsing/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_parsing/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_parsing/fn.decode_payload.html b/rustdocs/transaction_parsing/fn.decode_payload.html new file mode 100644 index 0000000000..cd2d0bac94 --- /dev/null +++ b/rustdocs/transaction_parsing/fn.decode_payload.html @@ -0,0 +1,6 @@ +decode_payload in transaction_parsing - Rust
pub fn decode_payload(
+    payload: &str,
+    enable_dynamic_derivations: bool
+) -> Result<DecodeSequenceResult>
Expand description

Decode content of payload +enable_dynamic_derivations is a feature flag

+
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/fn.prepare_derivations_preview.html b/rustdocs/transaction_parsing/fn.prepare_derivations_preview.html new file mode 100644 index 0000000000..7e30ea60ac --- /dev/null +++ b/rustdocs/transaction_parsing/fn.prepare_derivations_preview.html @@ -0,0 +1,4 @@ +prepare_derivations_preview in transaction_parsing - Rust
pub fn prepare_derivations_preview(
+    database: &Db,
+    export_info: ExportAddrs
+) -> Result<Vec<SeedKeysPreview>>
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/fn.produce_output.html b/rustdocs/transaction_parsing/fn.produce_output.html new file mode 100644 index 0000000000..be95a96cc6 --- /dev/null +++ b/rustdocs/transaction_parsing/fn.produce_output.html @@ -0,0 +1 @@ +produce_output in transaction_parsing - Rust
pub fn produce_output(database: &Db, payload: &str) -> Result<TransactionAction>
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/index.html b/rustdocs/transaction_parsing/index.html new file mode 100644 index 0000000000..69b8089fc7 --- /dev/null +++ b/rustdocs/transaction_parsing/index.html @@ -0,0 +1,8 @@ +transaction_parsing - Rust

Re-exports

Modules

Enums

  • Transaction parsing error.
  • Enum describing Stub content. +Is used for proper navigation. Variants: +AddSpecs (with associated NetworkSpecsKey), LoadMeta (with associated +NetworkSpecsKey for the first by order network using those metadata), +and LoadTypes
  • Enum containing card sets for four different outcomes: +importing derivations (Derivations), signing (Sign), +accepting (Stub) and reading, for example, in case of an error (Read)

Functions

Type Definitions

  • Transaction parsing result.
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/parse_transaction/fn.entry_to_transactions_with_decoding.html b/rustdocs/transaction_parsing/parse_transaction/fn.entry_to_transactions_with_decoding.html new file mode 100644 index 0000000000..069b0c7959 --- /dev/null +++ b/rustdocs/transaction_parsing/parse_transaction/fn.entry_to_transactions_with_decoding.html @@ -0,0 +1,4 @@ +entry_to_transactions_with_decoding in transaction_parsing::parse_transaction - Rust
pub fn entry_to_transactions_with_decoding(
+    database: &Db,
+    entry: Entry
+) -> Result<Vec<MEventMaybeDecoded>>
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/parse_transaction/fn.parse_dd_transaction.html b/rustdocs/transaction_parsing/parse_transaction/fn.parse_dd_transaction.html new file mode 100644 index 0000000000..493d06f79d --- /dev/null +++ b/rustdocs/transaction_parsing/parse_transaction/fn.parse_dd_transaction.html @@ -0,0 +1,5 @@ +parse_dd_transaction in transaction_parsing::parse_transaction - Rust
pub fn parse_dd_transaction(
+    database: &Db,
+    data_hex: &str,
+    seeds: &HashMap<String, String>
+) -> Result<TransactionAction>
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/parse_transaction/index.html b/rustdocs/transaction_parsing/parse_transaction/index.html new file mode 100644 index 0000000000..2fff4f7fdd --- /dev/null +++ b/rustdocs/transaction_parsing/parse_transaction/index.html @@ -0,0 +1 @@ +transaction_parsing::parse_transaction - Rust
\ No newline at end of file diff --git a/rustdocs/transaction_parsing/parse_transaction/sidebar-items.js b/rustdocs/transaction_parsing/parse_transaction/sidebar-items.js new file mode 100644 index 0000000000..068da74cab --- /dev/null +++ b/rustdocs/transaction_parsing/parse_transaction/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["entry_to_transactions_with_decoding","parse_dd_transaction"]}; \ No newline at end of file diff --git a/rustdocs/transaction_parsing/sidebar-items.js b/rustdocs/transaction_parsing/sidebar-items.js new file mode 100644 index 0000000000..961cc8d77f --- /dev/null +++ b/rustdocs/transaction_parsing/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Error","StubNav","TransactionAction"],"fn":["decode_payload","prepare_derivations_preview","produce_output"],"mod":["cards","check_signature","dynamic_derivations","parse_transaction"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/transaction_parsing/type.Result.html b/rustdocs/transaction_parsing/type.Result.html new file mode 100644 index 0000000000..010ef0cd28 --- /dev/null +++ b/rustdocs/transaction_parsing/type.Result.html @@ -0,0 +1,2 @@ +Result in transaction_parsing - Rust

Type Definition transaction_parsing::Result

source ·
pub type Result<T> = Result<T, Error>;
Expand description

Transaction parsing result.

+
\ No newline at end of file diff --git a/rustdocs/transaction_signing/all.html b/rustdocs/transaction_signing/all.html new file mode 100644 index 0000000000..62b5534688 --- /dev/null +++ b/rustdocs/transaction_signing/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/rustdocs/transaction_signing/enum.Error.html b/rustdocs/transaction_signing/enum.Error.html new file mode 100644 index 0000000000..75118306ce --- /dev/null +++ b/rustdocs/transaction_signing/enum.Error.html @@ -0,0 +1,140 @@ +Error in transaction_signing - Rust
pub enum Error {
+    DbHandling(Error),
+    Other(Error),
+    WrongPassword,
+    CryptoError(SecretStringError),
+    WrongPasswordNewChecksum(u32),
+}
Expand description

Transaction signing error.

+

Variants§

§

DbHandling(Error)

A DB error.

+
§

Other(Error)

§

WrongPassword

User has entered a wrong password for a passworded address.

+

For cases when Vault database checksum is not verified. +Vault log records that password was entered incorrectly.

+
§

CryptoError(SecretStringError)

Error in SecretString.

+

SecretString consists of combined seed phrase and derivation.

+

Associated error content is +SecretStringError.

+
§

WrongPasswordNewChecksum(u32)

User has entered a wrong password for a passworded address for cases +when the Vault database checksum is verified.

+

Vault log records that password was entered incorrectly. +This changes the database checksum, and for the next attempt it must be +updated.

+

Associated data is the new checksum.

+

Trait Implementations§

source§

impl Debug for Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Error

source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Error for Error

source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.
source§

impl From<Error> for Error

source§

fn from(source: Error) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl !RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl !UnwindSafe for Error

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToString for Twhere + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> Error for Twhere + T: 'static + Debug + Display + Send + Sync,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDisplay for Twhere + T: Display,

\ No newline at end of file diff --git a/rustdocs/transaction_signing/enum.SignatureType.html b/rustdocs/transaction_signing/enum.SignatureType.html new file mode 100644 index 0000000000..851920e366 --- /dev/null +++ b/rustdocs/transaction_signing/enum.SignatureType.html @@ -0,0 +1,125 @@ +SignatureType in transaction_signing - Rust
pub enum SignatureType {
+    Transaction,
+    Message,
+}

Variants§

§

Transaction

§

Message

Trait Implementations§

source§

impl Clone for SignatureType

source§

fn clone(&self) -> SignatureType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SignatureType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<SignatureType> for SignatureType

source§

fn eq(&self, other: &SignatureType) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Copy for SignatureType

source§

impl Eq for SignatureType

source§

impl StructuralEq for SignatureType

source§

impl StructuralPartialEq for SignatureType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

§

impl<T> Member for Twhere + T: Send + Sync + Debug + Eq + PartialEq<T> + Clone + 'static,

\ No newline at end of file diff --git a/rustdocs/transaction_signing/enum.SufficientContent.html b/rustdocs/transaction_signing/enum.SufficientContent.html new file mode 100644 index 0000000000..f908adb30f --- /dev/null +++ b/rustdocs/transaction_signing/enum.SufficientContent.html @@ -0,0 +1,124 @@ +SufficientContent in transaction_signing - Rust
pub enum SufficientContent {
+    AddSpecs(NetworkSpecsKey),
+    LoadMeta(NetworkSpecsKey, u32),
+    LoadTypes,
+}
Expand description

Possible content to generate sufficient crypto for

+

Variants§

§

AddSpecs(NetworkSpecsKey)

§

LoadMeta(NetworkSpecsKey, u32)

§

LoadTypes

Trait Implementations§

source§

impl Clone for SufficientContent

source§

fn clone(&self) -> SufficientContent

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for SufficientContent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> DynClone for Twhere + T: Clone,

source§

fn __clone_box(&self, _: Private) -> *mut ()

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
source§

impl<T> ToOwned for Twhere + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeDebug for Twhere + T: Debug,

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/transaction_signing/error/enum.Error.html b/rustdocs/transaction_signing/error/enum.Error.html new file mode 100644 index 0000000000..189a5dbe8a --- /dev/null +++ b/rustdocs/transaction_signing/error/enum.Error.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_signing/enum.Error.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_signing/error/type.Result.html b/rustdocs/transaction_signing/error/type.Result.html new file mode 100644 index 0000000000..ba3d689316 --- /dev/null +++ b/rustdocs/transaction_signing/error/type.Result.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_signing/type.Result.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_signing/fn.create_signature.html b/rustdocs/transaction_signing/fn.create_signature.html new file mode 100644 index 0000000000..e931ff068d --- /dev/null +++ b/rustdocs/transaction_signing/fn.create_signature.html @@ -0,0 +1,11 @@ +create_signature in transaction_signing - Rust
pub fn create_signature(
+    database: &Db,
+    seed_phrase: &str,
+    pwd_entry: &str,
+    user_comment: &str,
+    checksum: u32,
+    idx: usize,
+    encryption: Encryption
+) -> Result<SignatureAndChecksum>
Expand description

Function to create signatures using RN output action line, and user entered pin and password. +Also needs database name to fetch saved transaction and key.

+
\ No newline at end of file diff --git a/rustdocs/transaction_signing/fn.handle_sign.html b/rustdocs/transaction_signing/fn.handle_sign.html new file mode 100644 index 0000000000..0976138c32 --- /dev/null +++ b/rustdocs/transaction_signing/fn.handle_sign.html @@ -0,0 +1,9 @@ +handle_sign in transaction_signing - Rust
pub fn handle_sign(
+    database: &Db,
+    checksum: u32,
+    seed_phrase: &str,
+    pwd_entry: &str,
+    user_comment: &str,
+    idx: usize,
+    encryption: Encryption
+) -> Result<Vec<u8>>
\ No newline at end of file diff --git a/rustdocs/transaction_signing/fn.handle_stub.html b/rustdocs/transaction_signing/fn.handle_stub.html new file mode 100644 index 0000000000..b8c4bea31f --- /dev/null +++ b/rustdocs/transaction_signing/fn.handle_stub.html @@ -0,0 +1 @@ +handle_stub in transaction_signing - Rust
pub fn handle_stub(database: &Db, checksum: u32) -> Result<()>
\ No newline at end of file diff --git a/rustdocs/transaction_signing/fn.sign_content.html b/rustdocs/transaction_signing/fn.sign_content.html new file mode 100644 index 0000000000..8c5c84f930 --- /dev/null +++ b/rustdocs/transaction_signing/fn.sign_content.html @@ -0,0 +1,8 @@ +sign_content in transaction_signing - Rust
pub fn sign_content(
+    database: &Db,
+    multisigner: &MultiSigner,
+    address_details: &AddressDetails,
+    content: SufficientContent,
+    seed_phrase: &str,
+    pwd_entry: &str
+) -> Result<(Vec<u8>, MSCContent)>
\ No newline at end of file diff --git a/rustdocs/transaction_signing/index.html b/rustdocs/transaction_signing/index.html new file mode 100644 index 0000000000..ea7cfaa961 --- /dev/null +++ b/rustdocs/transaction_signing/index.html @@ -0,0 +1,2 @@ +transaction_signing - Rust

Structs

Enums

Functions

Type Definitions

  • Transaction signing result.
\ No newline at end of file diff --git a/rustdocs/transaction_signing/sidebar-items.js b/rustdocs/transaction_signing/sidebar-items.js new file mode 100644 index 0000000000..80bfb4cd74 --- /dev/null +++ b/rustdocs/transaction_signing/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["Error","SignatureType","SufficientContent"],"fn":["create_signature","handle_sign","handle_stub","sign_content"],"struct":["SignatureAndChecksum"],"type":["Result"]}; \ No newline at end of file diff --git a/rustdocs/transaction_signing/sign_transaction/enum.SignatureType.html b/rustdocs/transaction_signing/sign_transaction/enum.SignatureType.html new file mode 100644 index 0000000000..381235330f --- /dev/null +++ b/rustdocs/transaction_signing/sign_transaction/enum.SignatureType.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_signing/enum.SignatureType.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_signing/sign_transaction/fn.create_signature.html b/rustdocs/transaction_signing/sign_transaction/fn.create_signature.html new file mode 100644 index 0000000000..3de402e43d --- /dev/null +++ b/rustdocs/transaction_signing/sign_transaction/fn.create_signature.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_signing/fn.create_signature.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_signing/sign_transaction/struct.SignatureAndChecksum.html b/rustdocs/transaction_signing/sign_transaction/struct.SignatureAndChecksum.html new file mode 100644 index 0000000000..bd8162ab29 --- /dev/null +++ b/rustdocs/transaction_signing/sign_transaction/struct.SignatureAndChecksum.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../transaction_signing/struct.SignatureAndChecksum.html...

+ + + \ No newline at end of file diff --git a/rustdocs/transaction_signing/struct.SignatureAndChecksum.html b/rustdocs/transaction_signing/struct.SignatureAndChecksum.html new file mode 100644 index 0000000000..43a50c7622 --- /dev/null +++ b/rustdocs/transaction_signing/struct.SignatureAndChecksum.html @@ -0,0 +1,115 @@ +SignatureAndChecksum in transaction_signing - Rust
pub struct SignatureAndChecksum { /* private fields */ }

Implementations§

source§

impl SignatureAndChecksum

source

pub fn new_checksum(&self) -> u32

source

pub fn signature(&self) -> &MultiSignature

source

pub fn signature_type(&self) -> SignatureType

Trait Implementations§

source§

impl ToString for SignatureAndChecksum

source§

fn to_string(&self) -> String

Converts the given value to a String. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>where + Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>where + Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere + Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> Downcast for Twhere + T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can +then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be +further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot +generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere + T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be +further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where + Self: Binary,

Causes self to use its Binary implementation when Debug-formatted. Read more
§

fn fmt_display(self) -> FmtDisplay<Self>where + Self: Display,

Causes self to use its Display implementation when +Debug-formatted. Read more
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where + Self: LowerExp,

Causes self to use its LowerExp implementation when +Debug-formatted. Read more
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where + Self: LowerHex,

Causes self to use its LowerHex implementation when +Debug-formatted. Read more
§

fn fmt_octal(self) -> FmtOctal<Self>where + Self: Octal,

Causes self to use its Octal implementation when Debug-formatted. Read more
§

fn fmt_pointer(self) -> FmtPointer<Self>where + Self: Pointer,

Causes self to use its Pointer implementation when +Debug-formatted. Read more
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where + Self: UpperExp,

Causes self to use its UpperExp implementation when +Debug-formatted. Read more
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where + Self: UpperHex,

Causes self to use its UpperHex implementation when +Debug-formatted. Read more
§

fn fmt_list(self) -> FmtList<Self>where + &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an +Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
§

impl<T, Outer> IsWrappedBy<Outer> for Twhere + Outer: AsRef<T> + AsMut<T> + From<T>, + T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

+
§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

+
§

impl<T> Pipe for Twhere + T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere + Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere + R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere + R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere + Self: Borrow<B>, + B: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( + &'a mut self, + func: impl FnOnce(&'a mut B) -> R +) -> Rwhere + Self: BorrowMut<B>, + B: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe +function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere + Self: AsRef<U>, + U: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere + Self: AsMut<U>, + U: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe +function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere + Self: Deref<Target = T>, + T: 'a + ?Sized, + R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( + &'a mut self, + func: impl FnOnce(&'a mut T) -> R +) -> Rwhere + Self: DerefMut<Target = T> + Deref, + T: 'a + ?Sized, + R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe +function.
§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Selfwhere + Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> Twhere + Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere + Self: Borrow<B>, + B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release +builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere + Self: BorrowMut<B>, + B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release +builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere + Self: AsRef<R>, + R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release +builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere + Self: AsMut<R>, + R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release +builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere + Self: Deref<Target = T>, + T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release +builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere + Self: DerefMut<Target = T> + Deref, + T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release +builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where + Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<S, T> UncheckedInto<T> for Swhere + T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for Swhere + T: Bounded, + S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for Twhere + V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +WithDispatch wrapper. Read more
§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeRefUnwindSafe for Twhere + T: RefUnwindSafe,

\ No newline at end of file diff --git a/rustdocs/transaction_signing/type.Result.html b/rustdocs/transaction_signing/type.Result.html new file mode 100644 index 0000000000..1154ac5f35 --- /dev/null +++ b/rustdocs/transaction_signing/type.Result.html @@ -0,0 +1,2 @@ +Result in transaction_signing - Rust

Type Definition transaction_signing::Result

source ·
pub type Result<T> = Result<T, Error>;
Expand description

Transaction signing result.

+
\ No newline at end of file diff --git a/searcher.js b/searcher.js new file mode 100644 index 0000000000..d2b0aeed38 --- /dev/null +++ b/searcher.js @@ -0,0 +1,483 @@ +"use strict"; +window.search = window.search || {}; +(function search(search) { + // Search functionality + // + // You can use !hasFocus() to prevent keyhandling in your key + // event handlers while the user is typing their search. + + if (!Mark || !elasticlunr) { + return; + } + + //IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith + if (!String.prototype.startsWith) { + String.prototype.startsWith = function(search, pos) { + return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; + }; + } + + var search_wrap = document.getElementById('search-wrapper'), + searchbar = document.getElementById('searchbar'), + searchbar_outer = document.getElementById('searchbar-outer'), + searchresults = document.getElementById('searchresults'), + searchresults_outer = document.getElementById('searchresults-outer'), + searchresults_header = document.getElementById('searchresults-header'), + searchicon = document.getElementById('search-toggle'), + content = document.getElementById('content'), + + searchindex = null, + doc_urls = [], + results_options = { + teaser_word_count: 30, + limit_results: 30, + }, + search_options = { + bool: "AND", + expand: true, + fields: { + title: {boost: 1}, + body: {boost: 1}, + breadcrumbs: {boost: 0} + } + }, + mark_exclude = [], + marker = new Mark(content), + current_searchterm = "", + URL_SEARCH_PARAM = 'search', + URL_MARK_PARAM = 'highlight', + teaser_count = 0, + + SEARCH_HOTKEY_KEYCODE = 83, + ESCAPE_KEYCODE = 27, + DOWN_KEYCODE = 40, + UP_KEYCODE = 38, + SELECT_KEYCODE = 13; + + function hasFocus() { + return searchbar === document.activeElement; + } + + function removeChildren(elem) { + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + // Helper to parse a url into its building blocks. + function parseURL(url) { + var a = document.createElement('a'); + a.href = url; + return { + source: url, + protocol: a.protocol.replace(':',''), + host: a.hostname, + port: a.port, + params: (function(){ + var ret = {}; + var seg = a.search.replace(/^\?/,'').split('&'); + var len = seg.length, i = 0, s; + for (;i': '>', + '"': '"', + "'": ''' + }; + var repl = function(c) { return MAP[c]; }; + return function(s) { + return s.replace(/[&<>'"]/g, repl); + }; + })(); + + function formatSearchMetric(count, searchterm) { + if (count == 1) { + return count + " search result for '" + searchterm + "':"; + } else if (count == 0) { + return "No search results for '" + searchterm + "'."; + } else { + return count + " search results for '" + searchterm + "':"; + } + } + + function formatSearchResult(result, searchterms) { + var teaser = makeTeaser(escapeHTML(result.doc.body), searchterms); + teaser_count++; + + // The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor + var url = doc_urls[result.ref].split("#"); + if (url.length == 1) { // no anchor found + url.push(""); + } + + // encodeURIComponent escapes all chars that could allow an XSS except + // for '. Due to that we also manually replace ' with its url-encoded + // representation (%27). + var searchterms = encodeURIComponent(searchterms.join(" ")).replace(/\'/g, "%27"); + + return '' + result.doc.breadcrumbs + '' + + '' + + teaser + ''; + } + + function makeTeaser(body, searchterms) { + // The strategy is as follows: + // First, assign a value to each word in the document: + // Words that correspond to search terms (stemmer aware): 40 + // Normal words: 2 + // First word in a sentence: 8 + // Then use a sliding window with a constant number of words and count the + // sum of the values of the words within the window. Then use the window that got the + // maximum sum. If there are multiple maximas, then get the last one. + // Enclose the terms in . + var stemmed_searchterms = searchterms.map(function(w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var searchterm_weight = 40; + var weighted = []; // contains elements of ["word", weight, index_in_document] + // split in sentences, then words + var sentences = body.toLowerCase().split('. '); + var index = 0; + var value = 0; + var searchterm_found = false; + for (var sentenceindex in sentences) { + var words = sentences[sentenceindex].split(' '); + value = 8; + for (var wordindex in words) { + var word = words[wordindex]; + if (word.length > 0) { + for (var searchtermindex in stemmed_searchterms) { + if (elasticlunr.stemmer(word).startsWith(stemmed_searchterms[searchtermindex])) { + value = searchterm_weight; + searchterm_found = true; + } + }; + weighted.push([word, value, index]); + value = 2; + } + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + }; + index += 1; // because we split at a two-char boundary '. ' + }; + + if (weighted.length == 0) { + return body; + } + + var window_weight = []; + var window_size = Math.min(weighted.length, results_options.teaser_word_count); + + var cur_sum = 0; + for (var wordindex = 0; wordindex < window_size; wordindex++) { + cur_sum += weighted[wordindex][1]; + }; + window_weight.push(cur_sum); + for (var wordindex = 0; wordindex < weighted.length - window_size; wordindex++) { + cur_sum -= weighted[wordindex][1]; + cur_sum += weighted[wordindex + window_size][1]; + window_weight.push(cur_sum); + }; + + if (searchterm_found) { + var max_sum = 0; + var max_sum_window_index = 0; + // backwards + for (var i = window_weight.length - 1; i >= 0; i--) { + if (window_weight[i] > max_sum) { + max_sum = window_weight[i]; + max_sum_window_index = i; + } + }; + } else { + max_sum_window_index = 0; + } + + // add around searchterms + var teaser_split = []; + var index = weighted[max_sum_window_index][2]; + for (var i = max_sum_window_index; i < max_sum_window_index+window_size; i++) { + var word = weighted[i]; + if (index < word[2]) { + // missing text from index to start of `word` + teaser_split.push(body.substring(index, word[2])); + index = word[2]; + } + if (word[1] == searchterm_weight) { + teaser_split.push("") + } + index = word[2] + word[0].length; + teaser_split.push(body.substring(word[2], index)); + if (word[1] == searchterm_weight) { + teaser_split.push("") + } + }; + + return teaser_split.join(''); + } + + function init(config) { + results_options = config.results_options; + search_options = config.search_options; + searchbar_outer = config.searchbar_outer; + doc_urls = config.doc_urls; + searchindex = elasticlunr.Index.load(config.index); + + // Set up events + searchicon.addEventListener('click', function(e) { searchIconClickHandler(); }, false); + searchbar.addEventListener('keyup', function(e) { searchbarKeyUpHandler(); }, false); + document.addEventListener('keydown', function(e) { globalKeyHandler(e); }, false); + // If the user uses the browser buttons, do the same as if a reload happened + window.onpopstate = function(e) { doSearchOrMarkFromUrl(); }; + // Suppress "submit" events so the page doesn't reload when the user presses Enter + document.addEventListener('submit', function(e) { e.preventDefault(); }, false); + + // If reloaded, do the search or mark again, depending on the current url parameters + doSearchOrMarkFromUrl(); + } + + function unfocusSearchbar() { + // hacky, but just focusing a div only works once + var tmp = document.createElement('input'); + tmp.setAttribute('style', 'position: absolute; opacity: 0;'); + searchicon.appendChild(tmp); + tmp.focus(); + tmp.remove(); + } + + // On reload or browser history backwards/forwards events, parse the url and do search or mark + function doSearchOrMarkFromUrl() { + // Check current URL for search request + var url = parseURL(window.location.href); + if (url.params.hasOwnProperty(URL_SEARCH_PARAM) + && url.params[URL_SEARCH_PARAM] != "") { + showSearch(true); + searchbar.value = decodeURIComponent( + (url.params[URL_SEARCH_PARAM]+'').replace(/\+/g, '%20')); + searchbarKeyUpHandler(); // -> doSearch() + } else { + showSearch(false); + } + + if (url.params.hasOwnProperty(URL_MARK_PARAM)) { + var words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' '); + marker.mark(words, { + exclude: mark_exclude + }); + + var markers = document.querySelectorAll("mark"); + function hide() { + for (var i = 0; i < markers.length; i++) { + markers[i].classList.add("fade-out"); + window.setTimeout(function(e) { marker.unmark(); }, 300); + } + } + for (var i = 0; i < markers.length; i++) { + markers[i].addEventListener('click', hide); + } + } + } + + // Eventhandler for keyevents on `document` + function globalKeyHandler(e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.target.type === 'textarea' || e.target.type === 'text') { return; } + + if (e.keyCode === ESCAPE_KEYCODE) { + e.preventDefault(); + searchbar.classList.remove("active"); + setSearchUrlParameters("", + (searchbar.value.trim() !== "") ? "push" : "replace"); + if (hasFocus()) { + unfocusSearchbar(); + } + showSearch(false); + marker.unmark(); + } else if (!hasFocus() && e.keyCode === SEARCH_HOTKEY_KEYCODE) { + e.preventDefault(); + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else if (hasFocus() && e.keyCode === DOWN_KEYCODE) { + e.preventDefault(); + unfocusSearchbar(); + searchresults.firstElementChild.classList.add("focus"); + } else if (!hasFocus() && (e.keyCode === DOWN_KEYCODE + || e.keyCode === UP_KEYCODE + || e.keyCode === SELECT_KEYCODE)) { + // not `:focus` because browser does annoying scrolling + var focused = searchresults.querySelector("li.focus"); + if (!focused) return; + e.preventDefault(); + if (e.keyCode === DOWN_KEYCODE) { + var next = focused.nextElementSibling; + if (next) { + focused.classList.remove("focus"); + next.classList.add("focus"); + } + } else if (e.keyCode === UP_KEYCODE) { + focused.classList.remove("focus"); + var prev = focused.previousElementSibling; + if (prev) { + prev.classList.add("focus"); + } else { + searchbar.select(); + } + } else { // SELECT_KEYCODE + window.location.assign(focused.querySelector('a')); + } + } + } + + function showSearch(yes) { + if (yes) { + search_wrap.classList.remove('hidden'); + searchicon.setAttribute('aria-expanded', 'true'); + } else { + search_wrap.classList.add('hidden'); + searchicon.setAttribute('aria-expanded', 'false'); + var results = searchresults.children; + for (var i = 0; i < results.length; i++) { + results[i].classList.remove("focus"); + } + } + } + + function showResults(yes) { + if (yes) { + searchresults_outer.classList.remove('hidden'); + } else { + searchresults_outer.classList.add('hidden'); + } + } + + // Eventhandler for search icon + function searchIconClickHandler() { + if (search_wrap.classList.contains('hidden')) { + showSearch(true); + window.scrollTo(0, 0); + searchbar.select(); + } else { + showSearch(false); + } + } + + // Eventhandler for keyevents while the searchbar is focused + function searchbarKeyUpHandler() { + var searchterm = searchbar.value.trim(); + if (searchterm != "") { + searchbar.classList.add("active"); + doSearch(searchterm); + } else { + searchbar.classList.remove("active"); + showResults(false); + removeChildren(searchresults); + } + + setSearchUrlParameters(searchterm, "push_if_new_search_else_replace"); + + // Remove marks + marker.unmark(); + } + + // Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and #heading-anchor . + // `action` can be one of "push", "replace", "push_if_new_search_else_replace" + // and replaces or pushes a new browser history item. + // "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet. + function setSearchUrlParameters(searchterm, action) { + var url = parseURL(window.location.href); + var first_search = ! url.params.hasOwnProperty(URL_SEARCH_PARAM); + if (searchterm != "" || action == "push_if_new_search_else_replace") { + url.params[URL_SEARCH_PARAM] = searchterm; + delete url.params[URL_MARK_PARAM]; + url.hash = ""; + } else { + delete url.params[URL_MARK_PARAM]; + delete url.params[URL_SEARCH_PARAM]; + } + // A new search will also add a new history item, so the user can go back + // to the page prior to searching. A updated search term will only replace + // the url. + if (action == "push" || (action == "push_if_new_search_else_replace" && first_search) ) { + history.pushState({}, document.title, renderURL(url)); + } else if (action == "replace" || (action == "push_if_new_search_else_replace" && !first_search) ) { + history.replaceState({}, document.title, renderURL(url)); + } + } + + function doSearch(searchterm) { + + // Don't search the same twice + if (current_searchterm == searchterm) { return; } + else { current_searchterm = searchterm; } + + if (searchindex == null) { return; } + + // Do the actual search + var results = searchindex.search(searchterm, search_options); + var resultcount = Math.min(results.length, results_options.limit_results); + + // Display search metrics + searchresults_header.innerText = formatSearchMetric(resultcount, searchterm); + + // Clear and insert results + var searchterms = searchterm.split(' '); + removeChildren(searchresults); + for(var i = 0; i < resultcount ; i++){ + var resultElem = document.createElement('li'); + resultElem.innerHTML = formatSearchResult(results[i], searchterms); + searchresults.appendChild(resultElem); + } + + // Display results + showResults(true); + } + + fetch(path_to_root + 'searchindex.json') + .then(response => response.json()) + .then(json => init(json)) + .catch(error => { // Try to load searchindex.js if fetch failed + var script = document.createElement('script'); + script.src = path_to_root + 'searchindex.js'; + script.onload = () => init(window.search); + document.head.appendChild(script); + }); + + // Exported functions + search.hasFocus = hasFocus; +})(window.search); diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000000..db5a099c52 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Object.assign(window.search, {"doc_urls":["index.html#polkadot-vault---turn-your-smartphone-into-a-hardware-wallet","index.html#key-features","index.html#system-requirements","index.html#getting-started","index.html#license","about/FAQ.html#faq","about/FAQ.html#about","about/FAQ.html#networks","about/FAQ.html#seeds-and-keys","about/Security-And-Privacy.html#security-and-privacy","about/Security-And-Privacy.html#device-security","about/Security-And-Privacy.html#how-to-get-it-and-use-it","about/Security-And-Privacy.html#how-to-update-polkadot-vault-securely","about/Security-And-Privacy.html#what-data-does-it-collect","tutorials/Hierarchical-Deterministic-Key-Derivation.html#polkadot-vault-accounts-management","tutorials/Hierarchical-Deterministic-Key-Derivation.html#introduction","tutorials/Hierarchical-Deterministic-Key-Derivation.html#key-generation","tutorials/Hierarchical-Deterministic-Key-Derivation.html#references","about/Changelog.html#changelog","about/Changelog.html#501","about/Changelog.html#new-in-version-500","tutorials/SUMMARY.html#user-guides","tutorials/Start.html#starting-with-vault","tutorials/Start.html#installation","tutorials/Start.html#first-start","tutorials/Upgrading.html#upgrading-vault","tutorials/Upgrading.html#preparation-to-upgrade","tutorials/Add-New-Network.html#add-new-network","tutorials/Add-New-Network.html#add-network-specs","tutorials/Add-New-Network.html#add-network-metadata","tutorials/Kusama-tutorial.html#polkadot-vault-tutorial-with-polkadot-js-apps","tutorials/Kusama-tutorial.html#summary","tutorials/Kusama-tutorial.html#1-get-polkadot-vault-mobile-application","tutorials/Kusama-tutorial.html#2-setup-or-recover-an-identity","tutorials/Kusama-tutorial.html#3-add-polkadot-vaults-account-to-polkadot-js-apps","tutorials/Recover-Account-Polkadotjs.html#recover-account-from-polkadotjs","tutorials/Recover-Account-Polkadotjs.html#get-the-mnemonic-phrase-and-path","tutorials/Recover-Account-Polkadotjs.html#recover-identity-with-mnemonic-phrase","tutorials/Recover-Account-Polkadotjs.html#create-the-account-by-path","development/Development.html#development","development/Build.html#build","development/Build.html#ios","development/Build.html#android","development/Vault-Structure.html#vault-structure","development/Vault-Structure.html#architectural-structure","development/Vault-Structure.html#functional-structure","development/Troubleshooting.html#troubleshooting","development/Troubleshooting.html#rust-side-builds-but-app-crashes-on-start-android-or-complains-about-symbols-not-found-ios","development/Troubleshooting.html#build-for-android-fails-on-macos-build-for-ios-fails-on-linux","development/Rustdocs.html#links-to-rust-docs-of-the-apps","development/UOS.html#scope","development/UOS.html#terminology","development/UOS.html#qr-code-content-types","development/UOS.html#qr-code-structure","development/UOS.html#multiframe-qr","development/UOS.html#informative-content-of-qr-code","development/UOS.html#shared-qr-code-processing-sequence","development/UOS.html#transaction","development/UOS.html#message","development/UOS.html#bulk-transactions","development/UOS.html#update","development/UOS.html#derivations-import-payload-code-de","development/Ecosystem.html#vault-ecosystem"],"index":{"documentStore":{"docInfo":{"0":{"body":108,"breadcrumbs":8,"title":6},"1":{"body":60,"breadcrumbs":4,"title":2},"10":{"body":82,"breadcrumbs":6,"title":2},"11":{"body":75,"breadcrumbs":5,"title":1},"12":{"body":137,"breadcrumbs":8,"title":4},"13":{"body":20,"breadcrumbs":6,"title":2},"14":{"body":25,"breadcrumbs":10,"title":4},"15":{"body":30,"breadcrumbs":7,"title":1},"16":{"body":172,"breadcrumbs":8,"title":2},"17":{"body":3,"breadcrumbs":7,"title":1},"18":{"body":0,"breadcrumbs":4,"title":1},"19":{"body":5,"breadcrumbs":4,"title":1},"2":{"body":8,"breadcrumbs":4,"title":2},"20":{"body":233,"breadcrumbs":6,"title":3},"21":{"body":10,"breadcrumbs":4,"title":2},"22":{"body":9,"breadcrumbs":5,"title":2},"23":{"body":140,"breadcrumbs":4,"title":1},"24":{"body":252,"breadcrumbs":5,"title":2},"25":{"body":20,"breadcrumbs":5,"title":2},"26":{"body":215,"breadcrumbs":5,"title":2},"27":{"body":125,"breadcrumbs":8,"title":3},"28":{"body":179,"breadcrumbs":8,"title":3},"29":{"body":169,"breadcrumbs":8,"title":3},"3":{"body":96,"breadcrumbs":4,"title":2},"30":{"body":34,"breadcrumbs":10,"title":6},"31":{"body":26,"breadcrumbs":5,"title":1},"32":{"body":111,"breadcrumbs":9,"title":5},"33":{"body":194,"breadcrumbs":8,"title":4},"34":{"body":272,"breadcrumbs":12,"title":8},"35":{"body":26,"breadcrumbs":8,"title":3},"36":{"body":28,"breadcrumbs":8,"title":3},"37":{"body":43,"breadcrumbs":9,"title":4},"38":{"body":47,"breadcrumbs":8,"title":3},"39":{"body":0,"breadcrumbs":2,"title":1},"4":{"body":5,"breadcrumbs":3,"title":1},"40":{"body":26,"breadcrumbs":3,"title":1},"41":{"body":59,"breadcrumbs":3,"title":1},"42":{"body":91,"breadcrumbs":3,"title":1},"43":{"body":0,"breadcrumbs":5,"title":2},"44":{"body":533,"breadcrumbs":5,"title":2},"45":{"body":1607,"breadcrumbs":5,"title":2},"46":{"body":0,"breadcrumbs":3,"title":1},"47":{"body":14,"breadcrumbs":13,"title":11},"48":{"body":9,"breadcrumbs":10,"title":8},"49":{"body":11,"breadcrumbs":7,"title":4},"5":{"body":3,"breadcrumbs":4,"title":1},"50":{"body":55,"breadcrumbs":5,"title":1},"51":{"body":38,"breadcrumbs":5,"title":1},"52":{"body":49,"breadcrumbs":8,"title":4},"53":{"body":57,"breadcrumbs":7,"title":3},"54":{"body":318,"breadcrumbs":6,"title":2},"55":{"body":111,"breadcrumbs":8,"title":4},"56":{"body":46,"breadcrumbs":9,"title":5},"57":{"body":1464,"breadcrumbs":5,"title":1},"58":{"body":60,"breadcrumbs":5,"title":1},"59":{"body":29,"breadcrumbs":6,"title":2},"6":{"body":260,"breadcrumbs":3,"title":0},"60":{"body":1683,"breadcrumbs":5,"title":1},"61":{"body":125,"breadcrumbs":9,"title":5},"62":{"body":48,"breadcrumbs":5,"title":2},"7":{"body":212,"breadcrumbs":4,"title":1},"8":{"body":255,"breadcrumbs":5,"title":2},"9":{"body":0,"breadcrumbs":6,"title":2}},"docs":{"0":{"body":"Polkadot Vault Polkadot Vault is a mobile application that allows any smartphone to act as an air-gapped crypto wallet. This is also known as \"cold storage\". You can create accounts in Substrate-based networks, sign messages/transactions, and transfer funds to and from these accounts without any sort of connectivity enabled on the device. You must turn off or even physically remove the smartphone's Wifi, Mobile Network, and Bluetooth to ensure that the mobile phone containing these accounts will not be exposed to any online threat. Switching to airplane mode suffices in many cases. Disabling the mobile phone's networking abilities is a requirement for the app to be used as intended, check our wiki for more details. Have a look at the tutorial on our wiki to learn how to use Polkadot Vault together with Polkadot-js app . Any data transfer from or to the app happens using QR code. By doing so, the most sensitive piece of information, the private keys, will never leave the phone. The Polkadot Vault mobile app can be used to store any Substrate account, this includes Polkadot (DOT) and Kusama (KSM) networks.","breadcrumbs":"About Polkadot Vault » Polkadot Vault - Turn your smartphone into a hardware wallet","id":"0","title":"Polkadot Vault - Turn your smartphone into a hardware wallet"},"1":{"body":"This is not a complete crypto wallet in itself. The Vault does not sync with blockchain, so it does not know your account balance, whether transactions were successful or even if the account exists! This is a cold wallet app that only stores keys, reads and signs messages. It should always be used with hot wallet like polkadot.js . The Vault alone does not make your accounts secure. You must maintain security yourself . Airgap should be only part of your security protocol, improper use of Vault could still lead to loss of funds and/or secrets. When properly used, Vault provides best achievable security with Substrate networks to-date.","breadcrumbs":"About Polkadot Vault » Key features","id":"1","title":"Key features"},"10":{"body":"Polkadot Vault is built to be used offline. The mobile device used to run the app will hold important information that needs to be kept securely stored. It is therefore advised to: Get a separate mobile device. Make a factory reset. Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices). Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords. Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device. Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » Device security","id":"10","title":"Device security"},"11":{"body":"Install the app The app is available in beta for Android and iOS : Android Play store iOS app store Signed APK from GitHub Please double check carefully the origin of the app, and make sure that the company distributing it is Parity Technologies . Usual security advice apply to this air-gapped wallet: When creating an account using Polkadot Vault Mobile app, make sure to write down the recovery phrase and store it in safe places. Always double check the information of the transactions you are about to sign or send. Make sure to first transfer a small amount of Ether with the app and verify that everything is working as expected before transferring larger amounts of Ether.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » How to get it and use it?","id":"11","title":"How to get it and use it?"},"12":{"body":"Once Polkadot Vault is installed, your device should never go online. This would put your private keys at threat. To update, you will need to : Make sure you possess the recovery phrase for each of your accounts. You can find it on Polkadot Vault by : v4.0 choosing an identity > click the user icon at the top right > “Show Recovery Phrase” v2.2 tapping an account > 3 dots menu at the top right > “Backup Recovery Phrase” v2.0 tapping an account > tap on the account address > “Backup Recovery Phrase” Factory reset the device. Enable full-disk encryption on the device and set a strong password (might not be on by default, for example for older Android devices). Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords. Install Polkadot Vault from the Apple store or Android store or download the APK from Polkadot Vault's Github repository (make sure you are on the right website and verify the checksum) Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth, and any other connection ability the device has. Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers. Recover your accounts.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » How to update Polkadot Vault securely","id":"12","title":"How to update Polkadot Vault securely"},"13":{"body":"None, it's as simple as that. The Polkadot Vault Mobile Android and iOS apps do not send any sort of data to Parity Technologies or any partner and work completely offline once installed.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » What data does it collect?","id":"13","title":"What data does it collect?"},"14":{"body":"Polkadot Vault v4 has introduced the Hierarchical Deterministic Key Derivation (HDKD) feature for Substrate networks. This article explains how to use this feature. Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » Polkadot Vault Accounts Management","id":"14","title":"Polkadot Vault Accounts Management"},"15":{"body":"Seed is the starting point for generating accounts. The seed itself does not have any network affiliation. For Substrate networks, generating a new accounts means entering a derivation path and choosing a network. With this feature, you can manage as many accounts as needed with just one seed phrase safely stored.","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » Introduction","id":"15","title":"Introduction"},"16":{"body":"Create an account for a Substrate based network. Key generation also refers to accounts creation, with your created Identity: Go to key manager and create a new seed or select an existing one Choose a network Tap on any key Tap Derive or N+1 Button In path derivation screen, input any path and name you like (or accept naming suggestion) (optional) type password Tap Derive Button Done, you can start using new address. The form of path Paths also refer to the chain codes which described in , though it is different from BIP-32 style: Soft derivation starts with a single slash, like: /soft Hard derivation starts with a double slash, like: //hard Users are able to create any combination of hard derivation with // and/or soft derivation with /. The encoded string are limited to 32 Bytes. For technical information about the soft and hard derivations on Substrate, please refer to introduction here . Path also could contain optional password ; in Subkey standard password is prefixed with ///. However, for convenience, Vault device has separate password entry field with password confirmation, thus do not add /// to derivation field, it will result in error - instead omit /// and type password into its' special field. It will not be stored on the device and will be required for any operation that requires private key of the account. There is no way to restore this password if it is lost so please back it up carefully. Further notes With the same BIP32 seed users could create keys under different networks. Each derived account is bound to certain networks, which prevents it to be misused in another network until it is explicitly added for that network as well. Root account is available for all networks by default.","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » Key Generation","id":"16","title":"Key Generation"},"17":{"body":"https://github.com/w3f/schnorrkel https://wiki.polkadot.network/docs/en/learn-keys","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » References:","id":"17","title":"References:"},"18":{"body":"","breadcrumbs":"About Polkadot Vault » Changelog » Changelog","id":"18","title":"Changelog"},"19":{"body":"Android version release, minor fixes","breadcrumbs":"About Polkadot Vault » Changelog » 5.0.1","id":"19","title":"5.0.1"},"2":{"body":"Currently Vault is available only for iOS. Android version is coming soon.","breadcrumbs":"About Polkadot Vault » System requirements","id":"2","title":"System requirements"},"20":{"body":"Architecture No more typescript or react native. Backend is completely in Rust, frontend is in native. Building Dependencies Number of dependencies was greatly reduced; no npm/yarn/nodejs/cocoapods, etc. All dependencies are handled by: Cargo (rust packages) Xcode (only default iOS frameworks are used) Gradle Rust backend Rust libraries were moved back into the repository. Crypto functions are imported from Substrate. All logic and most of storage is written in Rust. An important hack here is that rust/signer crate has 2 versions of Cargo.toml for android and iOS architectures, as target library features could not be adjusted by normal means. Native frontend Frontend for both iOS and Android re-written in native frameworks. Thus, standard out-of-the-box build scripts could be used for building once Rust libraries are built and linked Features Secure seed storage Secrets are stored in devices' encrypted storage and some effort is made to prevent them leaking in system memory. Thus, all is as safe as the phone is - the same credentials used for unlocking the phone are used to unlock seeds. User is responsible to keep them adequate. Transaction preview Transactions content is shown before signing; no hash signing is allowed, but signing messages is possible. History feature The Vault now logs all operations it performs. It it important to remember that this is not log of account operations, but log of device history. This history could be cleared if needed, but not modified by other means. Detected presence of network connection is also logged. N+1 derivation Much requested feature that makes Vault automatically increment numbered seeds on creation. Network and metadata updates All network data updates now could be performed through scanning QR codes. Whenever some update is needed, most probably you should just scan some QR video. Don't worry about skipped frames, it's fountain code so you only need enough frames. All updates could be signed, and signing key will be trusted on first use, so Vault device should be linked to single source of authority on correct metadata. Key re-use in different networks Keys could be used only in one network. Need to re-use key in another network? Just create key with the same derivation path in that network to allow re-use and it will work.","breadcrumbs":"About Polkadot Vault » Changelog » New in version 5.0.0","id":"20","title":"New in version 5.0.0"},"21":{"body":"Start Upgrading Add New Network Kusama tutorial Recover Account-Polkadotjs","breadcrumbs":"User Guides » User Guides","id":"21","title":"User Guides"},"22":{"body":"This is suggested usage pattern; you should adjust it to your security protocol if you are certain you know what you are doing.","breadcrumbs":"User Guides » Start » Starting with Vault","id":"22","title":"Starting with Vault"},"23":{"body":"Factory reset the phone The Vault should be installed in most secure environment possible. To achieve that, the phone should be reset to factory state. Wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor. Set up phone Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons). Install Vault Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet! Disable network Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app!","breadcrumbs":"User Guides » Start » Installation","id":"23","title":"Installation"},"24":{"body":"When you first launch Vault, it prompts you to read and accept terms and conditions and privacy policy. Once that is done, the database is pre-populated with built-in networks and Vault is ready for use. It could import network data or read transactions , but to sign anything you need to create keys. Create keys Open key manager by tapping bottom left symbol. On fresh start you will be prompted to create seed (otherwise you could always create more seeds by tapping New seed button in Key Manager). Enter any convenient seed name (it does not matter anything and is not used anywhere except for this particulat Vault device) and - if you would like to use custom seed phrase - switch to recovery mode and type the seed phrase. Custom seed phrase should be used only to recover or import existing key(s), do not input custom seed phrase unless it is properly random! Security of your accounts relies on randomness of seed phrase . If you are generating new seed phrase, use built-in random generator and do not input a custom seed phrase. Once you click create button, you will be prompted to authenticate yourself. This will happen every time cruptographic engine of the phone is used to handle seeds - on all creations, backups, derivations and signatures and in some OS versions on starting the Vault. You will see the created secret seed. Please back it up on paper and store it in safe place. If you lose your Vault device or it will become non-functional, you will be able to recover your keys using this seed phrase. Anyone could recover your keys with knowledge of this phrase. If you lose this seed phrase, though, it will be impossible to recover your keys . You can check the seed phrase anytime in Settings menu, but make sure that it is backed up at all times. Once you dismiss seed phrase backup screen, the seed and some associated keys will be created. For every network known to the Vault, a network root derivation key will be generated, hard-derived from seed phrase with network name. A root key will be generated and made available in all networks. Do not use the root key unless you know what you do! . To learn more on key generation, read subkey specifications that Vault follows tightly and Vault key management . Export public key Once you have a keypair you would like to use, you should first export it to hot wallet. Tap the key and select Export button. You will see the export QR code you can use with hot wallet. Details on signing with Pokadot.js Apps","breadcrumbs":"User Guides » Start » First start","id":"24","title":"First start"},"25":{"body":"First of all, you need to be certain you want to upgrade Vault. Starting from v5, all network information could be downloaded through QR codes and upgrades are needed only to add new software features.","breadcrumbs":"User Guides » Upgrading » Upgrading Vault","id":"25","title":"Upgrading Vault"},"26":{"body":"Back up your keys Make sure your keys are backed up - you should have all seed phrases and derivations recorded somewhere. Once you proceed to the next step, there is no way to recover lost information. Make sure to back up all keys for all networks you use. Ideally you should already have some kind of backup, make sure it is up to date. Wipe Vault device Once you are certain that you have backed up everything, open settings, select Wipe all data button and confirm your action. All data in the Vault will be factory reset; congratulations! Factory reset the phone When the Vault is removed, wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor. Set up phone Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons) Install Vault Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet! Disable network Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app! Start the Vault Start the app. Read and accept information provided on launch. Congratulations! The app is ready to use now, however it does not have any keys and only few basic built-in networks. Proceed with setting up keys and adding new networks .","breadcrumbs":"User Guides » Upgrading » Preparation to upgrade","id":"26","title":"Preparation to upgrade"},"27":{"body":"Polkadot Vault supports adding any substrate-based networks or updating an existing network via QR code. After you've installed required software , you need to add Network's Specs to Vault and add Network Metadata for this network, so that Vault is able to decode, and you could read and verify transactions you are signing on this network. If you need to update metadata for already existing network you only need to update Network Metadata . Off-the-shelf Vault comes with networks that you can update by scanning a multipart QR codes that contain recent metadata for these networks at Metadata Update Portal . Network Specs Get Sign Feed into Vault Network Metadata Get Sign Feed into Vault Prerequisites Network details RPC endpoint (websocket URL) Hint: You can RPC endpoints for some of the public networks e.g. in polkadot-js/apps repository Encryption algorithm rust a clone of parity-signer repository subkey Dedicated keypair specifically for signing updates Please make sure you have a backup and Public key (hex) of this keypair. You will be able to update a network only with metadata that is signed with the same keypair as network specs. You can generate it with any tool of your choice, e.g with subkey : subkey generate. Let's get started!","breadcrumbs":"User Guides » Add New Network » Add New Network","id":"27","title":"Add New Network"},"28":{"body":"Get Network Specs In parity-signer/rust/generate_message cargo run add-specs -u --encryption // e.g.\ncargo run add-specs -u wss://statemint-rpc.polkadot.io --encryption sr25519 For networks supporting several tokens: cargo run add-specs -d -u --encryption --token-decimals --token-unit // e.g.\ncargo run add-specs -d -u wss://karura-rpc-0.aca-api.network --encryption sr25519 --token-decimals 12 --token-unit KAR Now your is in parity-signer/rust/files/for_signing. Hint: you can read more about interface with hot database if you want to maintain it. Sign Network Spec Get signature In parity-signer/rust/files/for_signing cat | subkey sign --suri // e.g.\ncat sign_me_add_specs_statemint_sr25519 | subkey sign --suri \"bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice\" This will return a you need to make a signed QR. Make signed QR In parity-signer/rust/generate_message cargo run --release make --goal qr --crypto --msg add-specs --payload --verifier-hex --signature-hex // e.g.\ncargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemint_sr25519 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex fa3ed5e1156d3d51349cd9bb4257387d8e32d49861c0952eaff1c2d982332e13afa8856bb6dfc684263aa3570499e067d4d78ea2dfa7a9b85e8ea273d3a81a86 Now your is in parity-signer/rust/files/signed Feed Network Specs into Vault In Vault open scanner, scan your and approve chain specs.","breadcrumbs":"User Guides » Add New Network » Add Network Specs","id":"28","title":"Add Network Specs"},"29":{"body":"Get Network Metadata In parity-signer/rust/generate_message cargo run load-metadata -d -u `` // e.g.\ncargo run load-metadata -d -u wss://statemint-rpc.polkadot.io This will fetch fresh , update the database with it, and - most relevant to us currently - generate file with message body in parity-signer/rust/files/for_signing. Sign Network Metadata Get Signature In parity-signer/rust/files/for_signing cat | subkey sign --suri // e.g.\ncat sign_me_load_metadata_statemintV800 | subkey sign --suri \"bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice\" Make signed QR In parity-signer/rust/generate_message cargo run --release make --goal qr --crypto --msg load-metadata --payload --verifier-hex --signature-hex // e.g.\ncargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load-metadata_statemintV800 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex 6a8f8dab854bec99bd8534102a964a4e71f4370683e7ff116c84d7e8d5cb344efd3b90d27059b7c8058f5c4a5230b792009c351a16c007237921bcae2ede2d84 This QR might take some time to be generated. After it is finished you can find your in parity-signer/rust/files/signed. It is a multipart QR-\"movie\", if your image viewer does not render it correctly, we suggest to open it in a browser. Feed Network Metadata into Vault In Vault open scanner, scan your and accept new metadata. Congratulations! You've fetched network specs, signed them, fed them into Vault, fetched recent metadata for the network, signed and fed it into Vault as well. Now you are ready to safely sign transactions on this network.","breadcrumbs":"User Guides » Add New Network » Add Network Metadata","id":"29","title":"Add Network Metadata"},"3":{"body":"These tutorials and docs are heavily outdated at the moment, please use them as references or help improving If you are upgrading from older version of Vault, please see changelog and upgrading Vault Please note that the Vault app is an advanced tool designed for maximum security and complex features. In many use cases, more user-friendly tools would be sufficient. Getting started guide User Guides Start Upgrading Add New Network Kusama-tutorial Recover-Account-Polkadotjs About About Polkadot Vault FAQ Security-And-Privacy Hierarchical-Deterministic-Key-Derivation Legacy versions Older versions of this app could be useful for development, however, they are not safe for use in production. They are available at following branches: Last public release with React Native Non-ascii characters fix and some transaction parsing Metadata types import and message parsing in RN Rust backend with RN frontend","breadcrumbs":"About Polkadot Vault » Getting Started","id":"3","title":"Getting Started"},"30":{"body":"This tutorial will walk you through setting up a Kusama account with the Polkadot Vault Android or iOS App and then use this account together with Polkadot-js apps to see your balance and transfer funds or perform any extrinsic from this account. Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.","breadcrumbs":"User Guides » Kusama-tutorial » Polkadot Vault tutorial with Polkadot-js apps","id":"30","title":"Polkadot Vault tutorial with Polkadot-js apps"},"31":{"body":"1. Get Polkadot Vault mobile application 2. Setup or recover an identity Create an identity Recover an identity with your recovery phrase 3. Add Polkadot Vault's account to Polkadot-js apps 4. Sign a transaction","breadcrumbs":"User Guides » Kusama-tutorial » Summary","id":"31","title":"Summary"},"32":{"body":"Device security Polkadot Vault is meant to be used offline. The mobile device used to run Polkadot Vault will hold valuable information that needs to be kept securely stored. It is therefore advised to: Get a Polkadot Vault dedicated mobile device. Make a factory reset. Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices). Do not use any biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords. Once Polkadot Vault has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device. Only charge the phone using a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers. Please find more info here about the Polkadot Vault application. Install Polkadot Vault mobile application Install Polkadot Vault making sure that it originated from Parity Technologies Android iOS","breadcrumbs":"User Guides » Kusama-tutorial » 1. Get Polkadot Vault mobile application","id":"32","title":"1. Get Polkadot Vault mobile application"},"33":{"body":"When launching the app for the first time, no identity has been set up yet. At this stage, you will either want to create an identity directly from your mobile device or recover an identity previously created. Create an identity Tap on the Create button, and give a name to this identity. In the next step, your recovery phrase will be presented to you. Think of it as a master key. If you lose it, you lose your money. Write this recovery phrase down and store it in a safe place . If your phone gets stolen/broken/forgotten this will be the only way to recover your account . You will then be asked to choose a pin code. This pin will be needed later on to unlock your account to manage the identity or sign a transaction. The next screen will allow you to select a network to generate an account. If you choose an Ethereum network, the related Ethereum account will be generated for the identity, If you choose a Substrate network (like Kusama), you will first create a root account, and then you will be able to derive more accounts with specified paths and names. The name can be changed later on, but once the path is set, it can not be changed. More information about path derivation see here . For each derived account, you will be able to see the address and its related QR code. create account Recover an identity with your recovery phrase If you already have an account created with either Polkadot Vault or any other wallet, you can recover it by doing so: Tap on the top right side user icon, and choose + Add Identity. Input the new identity name and tap the Recover Identity button. Type in the recovery phrase, word suggestion helps you prevent any typo. The field will turn red if the recovery phrase is not a bip39. Tap Recover Identity. Select a PIN number and confirm it by typing it again. Identity generated, now you can select the network to create the first account. NOTICE: For V3 user, after recovering the seed phrase of Kusama account, the account will appear as an identity root account aside with identity name in the network selection screen.","breadcrumbs":"User Guides » Kusama-tutorial » 2. Setup or recover an Identity","id":"33","title":"2. Setup or recover an Identity"},"34":{"body":"To be able to follow this tutorial and interact with the Blockchain from a freshly created account on Polkadot Vault, you will need to get some KSMs on this account first. Polkadot-js apps allows you to manage your Vault account seamlessly. Visit Polkadot-js apps website. Go to Accounts from the left sidebar. Click on Add via QR button in the top right-hand corner. It will ask for the webcam permission for you to scan the Polkadot Vault's account QR code, accept it. On Polkadot Vault, choose on the account you want to copy the address of. Scan the QR code displayed on your phone with your computer's webcam. Make sure the QR code is fully displayed on your mobile's screen. You can now name this account on Polkadot-js apps. 4. Sign a transaction Assuming that your Polkadot Vault account now has funds, you will be able to send some funds securely to anyone, without transferring your private key, and without needing any internet connection on your mobile phone. On Polkadot-js apps, click on the send button next to your account. On Polkadot-js apps, enter the address of the account you want to send funds to. Make sure to try with a small amount of money first before sending larger amounts. Click on Make Transfer Review the transaction, you can add tip to this transaction. Click on Scan via QR Code when you're done. Polkadot Vault Polkadot send transaction You will now be presented with a QR code that represents the transaction. Since this transaction is sending funds from your Polkadot Vault mobile app account, only this account (sitting on your phone) can sign and authorize this transaction. This is what we'll do in the next steps: From the Polkadot Vault account overview, tap the scan button on the top right and scan the QR code presented by the Polkadot-js apps website. Review the transaction addresses and the amount to send on your phone. The amount and addresses must match what you've entered in apps. If you got phished, this is where you can realize it and reject the transaction. Once you're sure, scroll down and click Sign Transaction to enter your pin and get the QR code of the scanned transaction. Sign Polkadot apps transaction Your phone has now signed the transaction offline using your Polkadot Vault account private key. The QR code that is now displayed on your phone represents a signed transaction that can be broadcasted. We will do this in the next steps: On Polkadot-js apps, click on Scan Signature QR, this will ask to turn on your webcam again. Face your phone's display to your webcam for the website to be able to read the signed transaction. Your transaction is sent automatically. Congrats you just sent funds from an air-gapped account :)","breadcrumbs":"User Guides » Kusama-tutorial » 3. Add Polkadot Vault's account to Polkadot-js apps","id":"34","title":"3. Add Polkadot Vault's account to Polkadot-js apps"},"35":{"body":"The default behavior on Polkadot Vault and PolkadotJS Apps is a little different. This tutorial will walk you through recovering an account on Polkadot Vault from PolkadotJS Apps. Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » Recover Account from PolkadotJS","id":"35","title":"Recover Account from PolkadotJS"},"36":{"body":"When creating an account on PolkadotJS, it will give you a mnemonic phrase on the beginning without any key derivation. You can change it if you click Advanced creation options button, here you can specify any path you like, leave it as an empty string if you do not want changes. Create Account on PolkadotJS Apps","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » Get the mnemonic phrase and path","id":"36","title":"Get the mnemonic phrase and path"},"37":{"body":"On Polkadot Vault, each mnemonic phrase represents an identity, every account starts with an identity, and identity could derive infinite accounts from it. So firstly let's recover the identity from the mnemonic phrase. recover the identity . After tapping one network from the list, you will have the default account created for this network with a default path (as on the above image, //polkadot), but this one is different from the one created from Polkadot.js Apps , because the paths are different.","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » Recover identity with mnemonic phrase","id":"37","title":"Recover identity with mnemonic phrase"},"38":{"body":"On Polkadot Vault, accounts are grouped by different networks, and the accounts generated by the default way are always prefixed with the network name. For example, //polkadot//fund or //polkadot//staking. So to recover an account with an arbitrary path, we need tap Add Network Account -> Create Custom Path. Recover Account Here We can input the path from PolkadotJS Apps, if you do not have a specific path, then just leave it empty. And then after we choose the network, we will have the same account as we created from PolkadotJS Apps.","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » create the account by path","id":"38","title":"create the account by path"},"39":{"body":"","breadcrumbs":"Development » Development","id":"39","title":"Development"},"4":{"body":"Polkadot-Vault is GPL 3.0 licensed .","breadcrumbs":"About Polkadot Vault » License","id":"4","title":"License"},"40":{"body":"First and foremost, make sure you have the latest Rust installed in your system. Nothing will work without Rust. If you get errors like cargo: feature X is required, it most likely means you have an old version of Rust. Update it by running rustup update stable.","breadcrumbs":"Development » Build » Build","id":"40","title":"Build"},"41":{"body":"1. You probably already have Xcode installed if you are reading this. If not, go get it. 2. Compile the core Rust library first: cd scripts && ./build.sh ios 3. Open the NativeSigner.xcodeproj project from the ios folder in your Xcode and click Run (Cmd+R). 4. The first time you start the app, you will need to put your device into Airplane Mode. In the iOS simulator, you can do this by turning off WiFi on your Mac (yes, this is an official apple-recommended way). However, we strongly recommend that you use a real device for development, as some important parts (e.g. camera) may not work in the simulator.","breadcrumbs":"Development » Build » iOS","id":"41","title":"iOS"},"42":{"body":"1. Download Android Studio . 2. Open the project from the android directory. 3. Install NDK. Go to File -> Project Structure -> SDK Location. Next to the \"Android NDK location\" section, click \"Download Android NDK\" button. We highly recommend you to update all existing plugins and SDK's for Kotlin, Gradle, etc even if you just downloaded a fresh Android Studio. It's always a good idea to restart Android Studio after that. This can save you many hours on Stackoverflow trying to fix random errors like \"NDK not found\". 4. Connect your device or create a virtual one. Open Tools -> Device Manager and create a new phone simulator with the latest Android. 5. (macOS) Specify path to python in local.properties. rust.pythonCommand=python3 6. Run the project (Ctrl+R). It should build the Rust core library automatically.","breadcrumbs":"Development » Build » Android","id":"42","title":"Android"},"43":{"body":"","breadcrumbs":"Development » Vault structure » Vault structure","id":"43","title":"Vault structure"},"44":{"body":"On top level, Vault consists of following parts: Rust backend core FFI interface Native frontend Database Rust backend There are 3 actual endpoints in rust folder: signer, which is source of library used for Vault itself; generate_message, which is used to update Vault repo with new built-in network information and to generate over-the-airgap updates; and qr_reader_pc which is a minimalistic app to parse qr codes that we had to write since there was no reasonably working alternative. Sub-folders of the rust folder: constants — constant values defined for the whole workspace. db_handling — all database-related operations for Vault and generate_message tool. Most of the business logic is contained here. defaults — built-in and test data for database definitions — objects used across the workspace are defined here files — contains test files and is used for build and update generation processes. Most contents are gitignored. generate_message — tool to generate over-the-airgap updates and maintain network info database on hot side navigator — navigation for Vault app; it is realized in rust to unify app behavior across the platforms parser - parses signable transactions. This is internal logic for transaction_parsing that is used when signable transaction is identified, but it could be used as a standalone lib for the same purpose. printing_balance — small lib to render tokens with proper units qr_reader_pc — small standalone PC app to parse QR codes in Vault ecosystem. Also is capable of parsing multiframe payloads (theoretically, in practice it is not feasible due to PC webcam low performance) qr_reader_phone — logic to parse QR payloads in Vault qrcode_rtx — multiframe erasure-encoded payload generator for signer update QR animation. qrcode_static — generation of static qr codes used all over the workspace signer — FFI interface crate to generate bindings that bridge native code and rust backend transaction_parsing — high-level parser for all QR payloads sent into Vault transaction_signing — all operations that could be performed when user accepts payload parsed with transaction_parsing FFI interface For interfacing rust code and native interface we use uniffi framework. It is a framework intended to aid building cross-platform software in Rust especially for the cases of re-using components written in Rust in the smartphone application development contexts. Other than Vault itself one of the most notable users of the uniffi framework are the Mozilla Application Services uniffi framework provides a way for the developer to define a clear and a typesafe FFI interface between components written in Rust and languages such as Kotlin and Swift. This approach leads to a much more robust architecture than implementing a homegrown FFI with, say, passing JSON-serialized data back and forth between Kotlin and Rust code. Here is why. Suppose the application needs to pass a following structure through FFI from Kotlin to Rust or back: #[derive(Serialize, Deserialize)] struct Address { street:String, city: String, } This would mean that on the Kotlin side of the FFI there would have to be some way of turning this type from JSON into a Kotlin type. It may be some sort of scheme or even a manual JSON value-by-key data extraction. Now suppose this struct is changed by adding and removing some fields: #[derive(Serialize, Deserialize)] struct Address { country: String, city: String, index: usize, } After this change on a Rust-side the developer would have to remember to reflect these changes on the Kotlin and Swift sides and if that is not done there is a chance that it will not be caught in build-time by CI. It is quite hard to remember everything and having a guarantee that such things would be caught at compile time is much better than not having this sort of guarantee. One of the things uniffi solves is exactly this: it provides compile-time guarantees of typesafety. The other concern with the JSON serialization approach is performance. As long as small objects are transferred back and forth it is no trouble encoding them into strings. But suppose the application requires transferring bigger blobs of binary data such as png images or even some metadata files. Using JSON would force the developer to encode such blobs as Strings before passing them into FFI and decoding them back into binary blobs on the other side of the FFI. uniffi helps to avoid this also. Native frontend Native frontends are made separately for each supported platform. To keep things uniform, interfaces are made as simple as possible and as much code is written in unified Rust component, as possible. Yet, platform-specific functions, including runtime management and threading, are also accessed through native framework. The structure of native frontend follows modern (2022) reactive design pattern of View-Action-Model triad. Thus, all backend is located in data model section, along with few native business logic components. It is important to note, that native navigation is not used, as due to subtle differences in its seemingly uniform design across platforms. Navigation is instead implemented on Rust side and, as an additional advantage, is tested there at lower computational cost for CI pipelines. Database For storage of all data except secrets, a sled database is used. Choice of db was based on its lightweightness, reliability, portability. Vault database structure","breadcrumbs":"Development » Vault structure » Architectural structure","id":"44","title":"Architectural structure"},"45":{"body":"Vault has the following systems: Secure key management Signing Transaction parsing Transaction visualization Airgap data transfer Airgap updating Network detector Logging Self-signing updating capability UI These systems are located in different parts the app and some of them rely on hot-side infrastructure. The general design goal was to isolate as much as possible in easily maintainable Rust code and keep only necessary functions in native side. Currently, those include: Hardware secret storage: we rely on hardware designer's KMS in accordance with best practices Network detector: network operations are limited by OS and we try to keep network access permissions for the app to minimum while still maintaining simple breach detection Camera: currently image capture and recognition systems implementations in native environments by far surpass 3rd party ones. This might change in the future, but at least image capture will be managed by OS to maintain platform compatibility. UI: we use native frameworks and components for rendering and user interaction for best look and feel of the app. Secure key management Keypairs used in Vault are generated from secret seed phrase, derivation path and optional secret password, in accordance with specifications described in subkey manual using code imported directly from substrate codebase for best conformance. Secret seed phrase storage Secret seed phrase is stored as a string in devices original KMS. It is symmetrically encrypted with a strong key that either is stored in a hardware-protected keyring or uses biometric data (in case of legacy android devices without strongbox system). Secrets access is managed by operating system's built-in authorization interface. Authorization is required for creation of seeds, access to seeds and removal of seeds. One particular special case is addition of the first seed on iOS platform, that does not trigger authorization mechanism as the storage is empty at this moment; this is in agreement with iOS key management system design and potentially leads to a threat of attacker replacing a single key by adding it to empty device; this attack is countered by authorization on seed removal. Thus, secret seeds source of truth is KMS. To synchronize the rest of the app, list of seed identifiers is sent to backend on app startup and on all events related to changes in this list by calling update_seed_names(Vec). Random seed generator and seed recovery tools are implemented in Rust. These are the only 2 cases where seed originates not in KMS. Derivation path management The most complex part of key management is storage of derivation strings and public keys. Improper handling here may lead to user's loss of control over their assets. Key records are stored as strings in database associated with secret seed identifiers, crypto algorithm, and list of allowed networks. Public key and its cryptographic algorithm are used to deterministically generate database record key - thus by design distinct key entries directly correspond to addresses on chain. Creation of new records requires generation of public keys through derivation process, thus secret seed should be queried - so adding items to this database requires authentication. Substrate keys could be natively used across all networks supporting their crypto algorithm. This may lead to accidental re-use of keys; thus it is not forbidden by the app, but networks are isolated unless user explicitly expresses desire to enable key in given network. From user side, it is abstracted into creation of independent addresses; however, real implementation stores addresses with public keys as storage keys and thus does not distinguish between networks. To isolate networks, each key stores a field with a list of allowed networks, and when user \"creates\" address with the same pubkey as already existing one, it is just another network added to the list of networks. Keys could be imported through QR code created by generate_message tool ( instructions ). A plaintext newline-separated list of derivations should be supplied to the tool along with network identifier; the import thus is bound to certain network, however, it is not bound to any particular seed - user can select any of created seeds and, after authorization, create keys with given paths. Bulk import of password-protected keys is forbidden at the moment. Optional password Optional password (part of derivation path after ///) is never stored, only addresses that have password in their derivation path are marked. Thus, password is queried every time it is needed with a tool separate from OS authentication interface, but together with authentication screen, as password is always used with a secret seed phrase. Memory safety in secure key management All memory handles by native framework relies on native framework's memory protection mechanisms (JVM virtualization and Swift isolation and garbage collection). However, when secrets are processed in Rust, no inherent designed memory safety features are available. To prevent secrets remaining in memory after their use, zeroize library is used. Also, describe string destruction protocol or fix it Signing Every payload to be signed is first extracted from transfer payload in agreement with UOS specification and polkadot-js implementation. Only payloads that could be parsed and visualized somehow could be signed to avoid blind signing - thus on parser error no signable payload is produced and signing procedure is not initiated. When signable payload is ready, it is stored in TRANSACTION tree while user makes decision on whether to sign it. While in storage, database checksum is monitored for changes. Signing uses private key generated from KMS-protected secret seed phrase, derivation string and optional password. Signing operation itself is imported directly from substrate codebase as dependency. Signing event or its failure is logged and signature wrapped in UOS format is presented as a qr static image on the phone. Transaction parsing Transaction parsing process is described in UOS format documentation Transaction visualization Signable transaction is decomposed into hierarchical cards for clarity. All possible scale-decodable types are assigned to generalized visualization patterns (\"transaction cards\") with some types having special visualizations (balance formatted with proper decimals and units, identicons added to identities, etc.). Each card is assigned order and indent that allow the cards to be shown in a lazy view environment. Thus, any networks that have minimal metadata requirements should be decodable and visualizable. Some cards also include documentation entries fetched from metadata. Those could be expanded in UI on touch. Thus, user has opportunity to read the whole transaction before signing. Airgap data transfer Transactions are encoded in accordance to UOS standard in QR codes. QR codes can be sent into Vault - through static frames or dynamic multiframe animations - and back - only as static frames. QR codes are decoded through native image recognition system and decoded through rust backend; output QR codes are generated in png format by backend. There are 2 formats of multiframe QR codes: legacy multiframe and raptorq multiframe. Legacy multiframe format requires all frames in animation to be collected and is thus unpractical for larger payloads. RaptorQ multiframe format allows any subset of frames to be collected and thus allows large payloads to be transferred effortlessly. Fast multiframe transfer works efficiently at 30 fps. Typical large payloads contain up to 200 frames at current state of networks. This can be theoretically performed in under 10 seconds; practically this works in under 1 minute. Airgap updating Vault can download new networks and metadata updates from QR data. To prevent malicious updates from compromising security, a system of certificates is implemented. Updates could be generated by any user; they can also be distributed in signed form to delegate validity check job to trusted parties. These trusted parties should sign metadata with their asymmetric key - certificate - and they become verifiers once their update is uploaded to Vault. There are 2 tiers of certificates - \"general\" and \"custom\", with the first allowing more comfortable use of Vault at cost of only one general verifier allowed. Rules about verifier certificates are designed around simplicity of security protocol: one trusted party becomes main source of trust and updates generated by it are just accepted. If that party does not have all required updates available, other party can be added as custom verifier. That verifier is not allowed to change specs at will and suspicious activity by custom verifier would interfere with network usage thus stopping user from doing potentially harmful stuff. This allows less strenuous security policy on user side. It is important to note that certificates could not be effectively revoked considering airgapped nature of the app, thus it is recommended to keep their keys on airgapped Vault devices if updates signed by these certificates are distributed publicly. More on certificates Network detector An additional security feature is network detector. When the app is on, it runs in the background (on low-priority thread) and attempts to monitor the network availability. This detector is implemented differently on different platforms and has different features and limitations; however, it does not and could not provide full connectivity monitoring and proper maintaining of airgap is dependent on user. Vault device should always be kept in airplane mode and all other connectivity should be disabled. The basic idea of network detection alertness is that when network connectivity is detected, 3 things happen: Event is logged in history Visual indication of network status is presented to user (shield in corner of screen and message in alert activated by the shield) Certain Vault functions are disabled (user authentication, seed and key creation, etc.) - features that bring secret material into active app memory from storage When network connectivity is lost, only visual indication changes. To restore clean state of Vault, user should acknowledge safety alert by pressing on shield icon, reading and accepting the warning. Upon acknowledging, it is logged in history, visual indication changes to green and all normal Vault functions are restored. Network detector in iOS Airplane mode detection in iOS is forbidden and may lead to expulsion of the app from the App Store. Thus, detector relies on probing network interfaces. If any network interface is up, network alert is triggered. Network detector in Android Network detector is triggered directly by airplane mode change event. Bluetooth, NFC, etc, Other possible network connectivity methods are not monitored. Even though it is possible to add detectors for them, accessing their status will require the app to request corresponding permissions form OS, thus reducing app's isolation and decreasing overall security - first, by increasing chance of leak in breach event, and second, by making corrupt fake app that leaks information through network appear more normal. Furthermore, there is information that network might be connected through cable in some devices in airplane mode; there was no research on what debugging through cable is capable of for devices in airplane mode. Thus, network detector is a convenience too and should not be relied on as sole source of security; user is responsible for device isolation. Logging All events that happen in Vault are logged by backend in history tree of database. From user interface, all events are presented in chronological order on log screen. On the same screen, history checksum could be seen and custom text entries could be added to database. Checksum uses time added to history records in computation and is therefore impractical to forge. Events presented on log screen are colored to distinguish \"normal\" and \"dangerous\" events. Shown records give minimal important information about the event. On click, detailed info screen is shown, where all events happened at the same time are presented in detail (including transactions, that are decoded for review if metadata is still available). Log could also be erased for privacy; erasure event is logged and becomes the first event in recorded history. Self-signing updating capability Vault can sign network and metadata updates that could be used for other signers. User can select any update component present in Vault and any key available for any network and generate a qr code which, upon decoding, can be used by generate_message or similar tool to generate over-the-airgap update. See detailed documentation This feature was designed for elegance, but it is quite useful to maintain update signing key for large update distribution centers, for it allows to securely store secret certificate key that could not be practically revoked if compromised. UI User interface is organized through View-Action-DataModel abstraction. View Vault visual representation is abstracted in 3 visual layers placed on top of each other: screen, modal and alert. This structure is mostly an adaptation of iOS design guidelines, as android native UI is much flexible and it is easier to adopt it to iOS design patterns than vice versa. Up to one of each component could be presented simultaneously. Screen component is always present in the app, but sometimes it is fully or partially blocked by other components. Modals and alerts are dismissed on goBack action, screens have complex navigation rules. Modals require user to take action and interrupt flow. Alerts are used for short information interruptions, like error messages or confirmations. In addition to these, header bar is always present on screen and footer bar is presented in some cases. Footer bar always has same structure and only allows navigation to one of navigation roots. Top bar might contain back button, screen name, and extra menu button; status indicator is always shown on top bar. Action Almost all actions available to user are in fact handled by single operation - action() backend function, that is called through pushButton native interface. In native side, this operation is debounced by time. On rust side, actions are performed on static mutex storing app state; on blocked mutex actions is ignored, as well as impossible actions that are not allowed in current state of navigation. Thus, state of the app is protected against undefined concurrency effects by hardware button-like behavior of action(). Most actions lead to change of shown combination of screen, modal and alert; but some actions - for example, those involving keyboard input - alter contents of a UI component. In most cases, all parameters of UI components are passed as states (more or less similar concept on all platforms) and frontend framework detects updates and seamlessly performs proper rendering. Action accepts 3 parameters: action type (enum), action data (&str), secret data (&str). Secret data is used to transfer secret information and care is taken to always properly zeroize its contents; on contrary, action data could contain large strings and is optimized normally. Data model Data model as seen by native UI consists of 3 parts: secret seed content, network detection state and screen contents. Secret seed content consists of list of seed names that are used as handles to fetch secret material from secure storage. Network detection state is a 4-state variable that describes current network detection state (safe state, network is currently detected, network was detected before, error state). The rest of data model is a black box in Rust. From Rust side, model is generated by navigation crate. The state of the app is stored in lazy static State object and sufficient information required for View rendering is generated into ActionResult object that is sent into native layer on each action update.","breadcrumbs":"Development » Vault structure » Functional structure","id":"45","title":"Functional structure"},"46":{"body":"","breadcrumbs":"Development » Troubleshooting » Troubleshooting","id":"46","title":"Troubleshooting"},"47":{"body":"One common reason for this is inconsistency in uniffi version - make sure that installed version matches one stated in Cargo.toml","breadcrumbs":"Development » Troubleshooting » Rust side builds but app crashes on start (Android) or complains about symbols not found (iOS)","id":"47","title":"Rust side builds but app crashes on start (Android) or complains about symbols not found (iOS)"},"48":{"body":"This is a known issue, does not seem to be solvable at the moment. Please use 2 machines, as we do.","breadcrumbs":"Development » Troubleshooting » Build for Android fails on macOS, build for iOS fails on linux","id":"48","title":"Build for Android fails on macOS, build for iOS fails on linux"},"49":{"body":"Polkadot Vault Navigation Transaction parser Data handling logic generate message qr_reader_pc","breadcrumbs":"Development » Rust docs » Links to rust docs of the apps","id":"49","title":"Links to rust docs of the apps"},"5":{"body":"About Networks Seeds and keys","breadcrumbs":"About Polkadot Vault » FAQ » FAQ","id":"5","title":"FAQ"},"50":{"body":"This document provides an interpretation of the UOS format used by Polkadot Vault. The upstream version of the published format has diverged significantly from the actual implementation, so this document represents the current state of the UOS format that is compatible with Polkadot Vault. It only applies to networks compatible with Polkadot Vault, i.e. Substrate-based networks. The document also describes special payloads used to maintain a Polkadot Vault instance. Therefore, this document effectively describes the input and output format for QR codes used by Polkadot Vault.","breadcrumbs":"Development » Universal offline signature » Scope","id":"50","title":"Scope"},"51":{"body":"The Vault receives information over an air-gap as QR codes. These codes are read as u8 vectors and must always be parsed by the Vault before use. QR codes can contain information that a user wants to sign with one of the Vault keys, or they may contain update information to ensure smooth operation of the Vault without the need for a reset or connection to the network.","breadcrumbs":"Development » Universal offline signature » Terminology","id":"51","title":"Terminology"},"52":{"body":"Transaction/extrinsic - a single transaction that is to be signed Bulk transactions - a set of transactions that are to be signed in a single session Message - a message that is to be signed with a key Chain metadata: up-to-date metadata allows the Vault to read transactions content Chain specs: adds new network to the Vault Metadata types: is used to update older versions runtime metadata (V13 and below) Key derivations: is used to import and export Vault key paths","breadcrumbs":"Development » Universal offline signature » QR code content types","id":"52","title":"QR code content types"},"53":{"body":"QR code envelope has the following structure: QR code prefix content ending spacer padding 4 bits byte-aligned content 4 bits remainder QR code prefix always starts with 0x4 symbol indicating \"raw\" encoding. Subsequent 2 bytes encode content length. Using this number, QR code parser can instantly extract content and disregard the rest of QR code. Actual content is shifted by half-byte, otherwise it is a normal byte sequence.","breadcrumbs":"Development » Universal offline signature » QR code structure","id":"53","title":"QR code structure"},"54":{"body":"The information transferred through QR channel into Vault is always enveloped in multiframe packages (although minimal number of multiframe packages is 1). There are two standards for the multiframe: RaptorQ erasure coding and legacy non-erasure multiframe. The type of envelope is determined by the first bit of the QR code data: 0 indicates legacy multiframe, 1 indicates RaptorQ RaptorQ multipart payload RaptorQ (RFC6330) is a variable rate (fountain) erasure code protocol with reference implementation in Rust Wrapping content in RaptorQ protocol allows for arbitrary amounts of data to be transferred reliably within reasonable time. It is recommended to wrap all payloads into this type of envelope. Each QR code in RaptorQ encoded multipart payload contains following parts: bytes [0..4] bytes [4..] 0x80000000 || payload_size RaptorQ serialized packet payload_size MUST contain payload size in bytes, represented as big-endian 32-bit unsigned integer. payload_size MUST NOT exceed 7FFFFFFF payload_size MUST be identical in all codes encoding the payload payload_size and RaptorQ serialized packet MUST be stored by the Cold Vault, in no particular order, until their amount is sufficient to decode the payload. Hot Wallet MUST continuously loop through all the frames showing each frame for at least 1/30 seconds (recommended frame rate: 4 FPS). Cold Vault MUST be able to start scanning the Multipart Payload at any frame . Cold Vault MUST NOT expect the frames to come in any particular order. Cold Vault SHOULD show a progress indicator of how many frames it has successfully scanned out of the estimated minimum required amount. Hot Wallet SHOULD generate sufficient number of recovery frames (recommended overhead: 100%; minimal reasonable overhead: square root of number of packets). Payloads fitting in 1 frame SHOULD be shown without recovery frames as static image. Once sufficient number of frames is collected, they could be processed into single payload and treated as data vector (\"QR code content\"). Legacy Multipart Payload In real implementation, the Polkadot Vault ecosystem generalized all payloads as multipart messages. bytes position [0] [1..3] [3..5] [5..] content 00 frame_count frame_index data frame MUST the number of current frame, '0000' represented as big-endian 16-bit unsigned integer. frame_count MUST the total number of frames, represented as big-endian 16-bit unsigned integer. part_data MUST be stored by the Cold Vault, ordered by frame number, until all frames are scanned. Hot Wallet MUST continuously loop through all the frames showing each frame for about 2 seconds. Cold Vault MUST be able to start scanning the Multipart Payload at any frame . Cold Vault MUST NOT expect the frames to come in any particular order. Cold Vault SHOULD show a progress indicator of how many frames it has successfully scanned out of the total count. Once all frames are combined, the part_data must be concatenated into a single binary blob and treated as data vector (\"QR code content\").","breadcrumbs":"Development » Universal offline signature » Multiframe QR","id":"54","title":"Multiframe QR"},"55":{"body":"Every QR code content starts with a prelude [0x53, 0x, 0x]. 0x53 is always expected and indicates Substrate-related content. for signables indicates encryption algorithm that will be used to generate the signature: 0x00 Ed25519 0x01 Sr25519 0x02 Ecdsa for updates indicates encryption algorithm that was used to sign the update: 0x00 Ed25519 0x01 Sr25519 0x02 Ecdsa 0xff unsigned Derivations import and testing are always unsigned, with always 0xff. Vault supports following variants: 0x00 legacy mortal transaction 0x02 transaction (both mortal and immortal) 0x03 message 0x04 bulk transactions 0x80 load metadata update 0x81 load types update 0xc1 add specs update 0xde derivations import Note: old UOS specified 0x00 as mortal transaction and 0x02 as immortal one, but currently both mortal and immortal transactions from polkadot-js are 0x02.","breadcrumbs":"Development » Universal offline signature » Informative content of QR code","id":"55","title":"Informative content of QR code"},"56":{"body":"Read QR code, try interpreting it, and get the hexadecimal string from into Rust (hexadecimal string is getting changed to raw bytes soon). If QR code is not processable, nothing happens and the scanner keeps trying to catch a processable one. Analyze prelude: is it Substrate? is it a known payload type? If not, Vault always produces an error and suggests to scan supported payload. Further processing is done based on the payload type.","breadcrumbs":"Development » Universal offline signature » Shared QR code processing sequence:","id":"56","title":"Shared QR code processing sequence:"},"57":{"body":"Transaction has the following structure: preludepublic keySCALE-encoded call dataSCALE-encoded extensionsnetwork genesis hash Public key is the key that can sign the transaction. Its length depends on the declared in transaction prelude: Encryption Public key length, bytes Ed25519 32 Sr25519 32 Ecdsa 33 Call data is Vec representation of transaction content. Call data must be parsed by Vault prior to signature generation and becomes a part of signed blob. Within transaction, the call data is SCALE-encoded, i.e. effectively is prefixed with compact of its length in bytes. Extensions contain data additional to the call data, and also are part of a signed blob. Typical extensions are Era, Nonce, metadata version, etc. Extensions content and order, in principle, can vary between the networks and metadata versions. Network genesis hash determines the network in which the transaction is created. At the moment genesis hash is fixed-length 32 bytes. Thus, the transaction structure could also be represented as: preludepublic keycompact of call data lengthcall dataSCALE-encoded extensionsnetwork genesis hash Bold-marked transaction pieces are used in the blob for which the signature is produced. If the blob is short, 257 bytes or below, the signature is produced for it as is. For blobs longer than 257 bytes, 32 byte hash (blake2_256) is signed instead. This is inherited from earlier Vault versions, and is currently compatible with polkadot-js. Transaction parsing sequence Cut the QR data and get: encryption (single u8 from prelude) transaction author public key, its length matching the encryption (32 or 33 u8 immediately after the prelude) network genesis hash (32 u8 at the end) SCALE-encoded call data and SCALE-encoded extensions as a combined blob (everything that remains in between the transaction author public kay and the network genesis hash) If the data length is insufficient, Vault produces an error and suggests to load non-damaged transaction. Search the Vault database for the network specs (from the network genesis hash and encryption). If the network specs are not found, Vault shows: public key and encryption of the transaction author key error message, that suggests to add network with found genesis hash Search the Vault database for the address key (from the transaction author public key and encryption). Vault will try to interpret and display the transaction in any case. Signing will be possible only if the parsing is successful and the address key is known to Vault and is extended to the network in question. Address key not found. Signing not possible. Output shows: public key and encryption of the transaction author key call and extensions parsing result warning message, that suggests to add the address into Vault Address key is found, but it is not extended to the network used. Signing not possible. Output shows: detailed author key information (base58 representation, identicon, address details such as address being passworded etc) call and extensions parsing result warning message, that suggests extending the address into the network used Address key is found and is extended to the network used. Vault will proceed to try and interpret the call and extensions. Detailed author information will be shown regardless of the parsing outcome. The signing will be allowed only if the parsing is successful. Separate the call and extensions. Call is prefixed by its length compact, the compact is cut off, the part with length that was indicated in the compact goes into call data, the part that remains goes into extensions data. If no compact is found or the length is insufficient, Vault produces an error that call and extensions could not be separated. Get the metadata set from the Vault database, by the network name from the network specs. Metadata is used to interpret extensions and then the call itself. If there are no metadata entries for the network at all, Vault produces an error and asks to load the metadata. RuntimeMetadata versions supported by Vault are V12, V13, and V14. The crucial feature of the V14 is that the metadata contains the description of the types used in the call and extensions production. V12 and V13 are legacy versions and provide only text identifiers for the types, and in order to use them, the supplemental types information is needed. Process the extensions. Vault already knows in which network the transaction was made, but does not yet know the metadata version. Metadata version must be one of the signable extensions. At the same time, the extensions and their order are recorded in the network metadata. Thus, all metadata entries from the set are checked, from newest to oldest, in an attempt to find metadata that both decodes the extensions and has a version that matches the metadata version decoded from the extensions. If processing extensions with a single metadata entry results in an error, the next metadata entry is tried. The errors would be displayed to user only if all attempts with existing metadata have failed. Typically, the extensions are quite stable in between the metadata versions and in between the networks, however, they can be and sometimes are different. In legacy metadata (RuntimeMetadata version being V12 and V13) extensions have identifiers only, and in Vault the extensions for V12 and V13 are hardcoded as: Era era Compact(u64) nonce Compact(u128) tip u32 metadata version u32 tx version H256 genesis hash H256 block hash If the extensions could not be decoded as the standard set or not all extensions blob is used, the Vault rejects this metadata version and adds error into the error set. Metadata V14 has extensions with both identifiers and properly described types, and Vault decodes extensions as they are recorded in the metadata. For this, ExtrinsicMetadata part of the metadata RuntimeMetadataV14 is used. Vector signed_extensions in ExtrinsicMetadata is scanned twice, first for types in ty of the SignedExtensionMetadata and then for types in additional_signed of the SignedExtensionMetadata. The types, when resolved through the types database from the metadata, allow to cut correct length blobs from the whole SCALE-encoded extensions blob and decode them properly. If any of these small decodings fails, the metadata version gets rejected by the Vault and an error is added to the error set. Same happens if after all extensions are scanned, some part of extensions blob remains unused. There are some special extensions that must be treated separately. The identifier in SignedExtensionMetadata and ident segment of the type Path are used to trigger types interpretation as specially treated extensions. Each identifier is encountered twice, once for ty scan, and once for additional_signed scan. In some cases only one of those types has non-empty content, in some cases it is both. To distinguish the two, the type-associated path is used, which points to where the type is defined in Substrate code. Type-associated path has priority over the identifier. Path triggers: | Path | Type is interpreted as | | :- | :- | | Era | Era | | CheckNonce | Nonce | | ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs | Identifier triggers, are used if the path trigger was not activated: | Identifier | Type, if not empty and if there is no path trigger, is interpreted as | Note | | :- | :- | :- | | CheckSpecVersion | metadata version | gets checked with the metatada version from the metadata | | CheckTxVersion | tx version | | | CheckGenesis | network genesis hash | must match the genesis hash that was cut from the tail of the transaction | | CheckMortality | block hash | must match the genesis hash if the transaction is immortal; Era has same identifier, but is distinguished by the path | | CheckNonce | nonce | | | ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs | If the extension is not a special case, it is displayed as normal parser output and does not participate in deciding if the transaction could be signed. After all extensions are processed, the decoding must yield following extensions: exactly one Era exactly one Nonce <- this is not so currently, fix it exactly one BlockHash exactly one GenesisHash <- this is not so currently, fix it exactly one metadata version If the extension set is different, this results in Vault error for this particular metadata version, this error goes into error set. The extensions in the metadata are checked on the metadata loading step, long before any transactions are even produced. Metadata with incomplete extensions causes a warning on load_metadata update generation step, and another one when an update with such metadata gets loaded into Vault. Nevertheless, such metadata loading into Vault is allowed, as there could be other uses for metadata except signable transaction signing. Probably. If the metadata version in extensions does not match the metadata version of the metadata used, this results in Vault error for this particular metadata version, this error goes into error set. If the extensions are completely decoded, with correct set of the special extensions and the metadata version from the extensions match the metadata version of the metadata used, the extensions are considered correctly parsed, and Vault can proceed to the call decoding. If all metadata entries from the Vault database were tested and no suitable solution is found, Vault produces an error stating that all attempts to decode extensions have failed. This could be used by variety of reasons (see above), but so far the most common one observed was users having the metadata in Vault not up-to-date with the metadata on chain. Thus, the error must have a recommendation to update the metadata first. Process the call data. After the metadata with correct version is established, it is used to parse the call data itself. Each call begins with u8 pallet index, this is the decoding entry point. For V14 metadata the correct pallet is found in the set of available ones in pallets field of RuntimeMetadataV14 , by index field in corresponding PalletMetadata . The calls field of this PalletMetadata, if it is Some(_), contains PalletCallMetadata that provides the available calls enum described in types registry of the RuntimeMetadataV14. For each type in the registry, including this calls enum, encoded data size is determined, and the decoding is done according to the type. For V12 and V13 metadata the correct pallet is also found by scanning the available pallets and searching for correct pallet index. Then the call is found using the call index (second u8 of the call data). Each call has associated set of argument names and argument types, however, the argument type is just a text identifier. The type definitions are not in the metadata and transactions decoding requires supplemental types information. By default, the Vault contains types information that was constructed for Westend when Westend was still using V13 metadata and it was so far reasonably sufficient for simple transactions parsing. If the Vault does not find the type information in the database and has to decode the transaction using V12 or V13 metadata, error is produced, indicating that there are no types. Elsewise, for each encountered argument type the encoded data size is determined, and the decoding is done according to the argument type. There are types requiring special display: calls (for cases when a call contains other calls) numbers that are processed as the balances Calls in V14 parsing are distinguished by Call in ident segment of the type Path . Calls in V12 and V13 metadata are distinguished by any element of the set of calls type identifiers in string argument type. At the moment the numbers that should be displayed as balance in transactions with V14 metadata are determined by the type name type_name of the corresponding Field being: Balance T::Balance BalanceOf ExtendedBalance BalanceOf DepositBalance PalletBalanceOf Similar identifiers are used in V12 and V13, the checked value is the string argument type itself. There could be other instances when the number should be displayed as balance. However, sometimes the balance is not the balance in the units in the network specs, for example in the assets pallet. See issue #1050 and comments there for details. If no errors were encountered while parsing and all call data was used in the process, the transaction is considered parsed and is displayed to the user, either ready for signing (if all other checks have passed) or as read-only. If the user chooses to sign the transaction, the Vault produces QR code with signature, that should be read back into the hot side. As soon as the signature QR code is generated, the Vault considers the transaction signed. All signed transactions are entered in the history log, and could be seen and decoded again from the history log. Transactions not signed by the user do not go in the history log. If the key used for the transaction is passworded, user has three attempts to enter the password correctly. Each incorrect password entry is reflected in the history. In the time interval between Vault displaying the parsed transaction and the user approving it, the transaction details needed to generate the signature and history log details are temporarily stored in the database. The temporary storage gets cleared each time before and after use. Vault extracts the stored transaction data only if the database checksum stored in navigator state is same as the current checksum of the database. If the password is entered incorrectly, the database is updated with \"wrong password\" history entry, and the checksum in the state gets updated accordingly. Eventually, all transaction info can and will be moved into state itself and temporary storage will not be used. Example Alice makes transfer to Bob in Westend network. Transaction: 530102d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27da40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e Part Meaning Byte position 53 Substrate-related content 0 01 Sr25519 encryption algorithm 1 02 Transaction 2 d435..a27d [1] Alice public key 3..=34 a404..4817 [2] SCALE-encoded call data 35..=76 a4 Compact call data length, 41 35 0403..4817 [3] Call data 36..=76 04 Pallet index 4 in metadata, entry point for decoding 36 b501..3f33 [4] Extensions 77..=153 e143..423e [5] Westend genesis hash 154..=185 d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d a40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817 0403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817 b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33 e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e Call content is parsed using Westend metadata, in this particular case westend9010 Call part Meaning 04 Pallet index 4 (Balances) in metadata, entry point for decoding 03 Method index 3 in pallet 4 (transfer_keep_alive), search in metadata what the method contains. Here it is MultiAddress for transfer destination and Compact(u128) balance. 00 Enum variant in MultiAddress, AccountId 8eaf..6a48 [6] Associated AccountId data, Bob public key 0700e8764817 Compact(u128) balance. Amount paid: 100000000000 or, with Westend decimals and unit, 100.000000000 mWND. 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 Extensions content Extensions part Meaning b501 Era: phase 27, period 64 b8 Nonce: 46 00 Tip: 0 pWND 32230000 Metadata version: 9010 05000000 Tx version: 5 e143..423e [7] Westend genesis hash 538a..3f33 [8] Block hash e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e 538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33","breadcrumbs":"Development » Universal offline signature » Transaction","id":"57","title":"Transaction"},"58":{"body":"Message has the following structure: prelude public key [u8] slice network genesis hash [u8] slice is represented as String if all bytes are valid UTF-8. If not all bytes are valid UTF-8, the Vault produces an error. It is critical that the message payloads are always clearly distinguishable from the transaction payloads, i.e. it is never possible to trick user to sign transaction posing as a message. Current proposal is to enable message signing only with Sr25519 encryption algorithm, with designated signing context, different from the signing context used for transactions signing.","breadcrumbs":"Development » Universal offline signature » Message","id":"58","title":"Message"},"59":{"body":"Bulk transactions is a SCALE-encoded TransactionBulk structure that consists of concatenated Vec transactions. Bulking is a way to sign multiple translations at once and reduce the number of QR codes to scan. Bulk transactions are processed in exactly the same way as single transactions.","breadcrumbs":"Development » Universal offline signature » Bulk transactions","id":"59","title":"Bulk transactions"},"6":{"body":"What is Vault? Vault is an app for an air-gapped device, it turns an offline device — usually a smartphone — into a secure hardware wallet. Vault offers you a way to securely generate, store, manage and use your blockchain credentials. Should I use Vault? Vault is optimized for the highest security requirements. If you already manage many accounts on multiple networks, Vault is great for you. If you have little experience with blockchain networks but still want good security affordances, you might find the learning curve steep. We strive to make Vault as intuitive as possible; get in touch via signer@parity.io or GitHub Issues if you can help us get there! How does an offline device communicate with the outside world? Communication happens through scanning and generating QR codes. Scanned with Vault input-QRs interact with keys stored in Vault to, generate response-QRs on behalf of those keys. Usually, input-QR is a blockchain transaction, and a response-QR is a signature for this transaction. There are tried and true cryptographic algorithms that power these QR codes, as well as some smart engineering that make your dedicated device safe to use. How do I keep my keys secure? Vault is a safe way to use your keys. However, that alone won't be enough to keep your keys secure. Devices break and get lost. This is why we always recommend backing up your seed phrases and derivation paths on paper. We are such big fans of paper backups that we even support a special tool to power your paper backup game by splitting your backups into shards called Banana Split . How do I know I am not interacting with malicious apps or actors? The Vault does not interact with a network. The app itself does not have a way to check if an app or an account you're interacting with is malicious. If you use Vault with PolkadotJS Browser Extension, PolkadotJS Apps, or Signer Component Browser Extension they will rely on a community-driven curated list of potentially less-than-honest operators: https://polkadot.js.org/phishing/# to prevent you from interacting with certain sites and addresses. However, there are no limitations on the use of Vault with other tools. I want to play with Vault to get a better feeling of how it works. Is there a way to do it without spending valuable tokens? Yes. In Vault, you should add a key for an address on Westend network and request test tokens for that address, see the step-by-step guide on Polkadot Network Wiki . You can use test tokens in the same way you would use value-bearing tokens. For example with PolkadotJS Apps you can create a transaction on behalf of your account, generate a signature with Vault and submit it to the network. All of this without keys ever leaving your offline device.","breadcrumbs":"About Polkadot Vault » FAQ » About","id":"6","title":"About"},"60":{"body":"Update has following general structure: preludeverifier public key (if signed)update payloadsignature (if signed)reserved tail Note that the verifier public key and signature parts appear only in signed uploads. Preludes [0x53, 0xff, 0x] are followed by the update payload. Every time user receives an unsigned update, the Vault displays a warning that the update is not verified. Generally, the use of unsigned updates is discouraged. For update signing it is recommended to use a dedicated key, not used for transactions. This way, if the signed data was not really the update data, but something else posing as the update data, the signature produced could not do any damage. Encryption Public key length, bytes Signature length, bytes Ed25519 32 64 Sr25519 32 64 Ecdsa 33 65 no encryption 0 0 reserved tail currently is not used and is expected to be empty. It could be used later if the multisignatures are introduced for the updates. Expecting reserved tail in update processing is done to keep code continuity in case multisignatures introduction ever happens. Because of the reserved tail, the update payload length has to be always exactly declared, so that the update payload part could be cut correctly from the update. Detailed description of the update payloads and form in which they are used in update itself and for generating update signature, could be found in Rust module definitions::qr_transfers. add_specs update payload, payload code c1 Introduces a new network to Vault, i.e. adds network specs to the Vault database. Update payload is ContentAddSpecs in to_transfer() form, i.e. double SCALE-encoded NetworkSpecsToSend (second SCALE is to have the exact payload length). Payload signature is generated for SCALE-encoded NetworkSpecsToSend. Network specs are stored in dedicated SPECSTREE tree of the Vault database. Network specs identifier is NetworkSpecsKey, a key built from encryption used by the network and the network genesis hash. There could be networks with multiple encryption algorithms supported, thus the encryption is part of the key. Some elements of the network specs could be slightly different for networks with the same genesis hash and different encryptions. There are: Invariant specs, identical between all different encryptions: name (network name as it appears in metadata) base58 prefix The reason is that the network name is and the base58 prefix can be a part of the network metadata, and the network metadata is not encryption-specific. Specs static for given encryption, that should not change over time once set: decimals unit To replace these, the user would need to remove the network and add it again, i.e. it won't be possible to do by accident. Flexible display-related and convenience specs, that can change and could be changed by simply loading new ones over the old ones: color and secondary color (both currently not used, but historically are there and may return at some point) logo path (default derivation path for network, //) title (network title as it gets displayed in the Vault) load_metadata update payload, payload code 80 Loads metadata for a network already known to Vault, i.e. for a network with network specs in the Vault database. Update payload is ContentLoadMeta in to_transfer() form, and consists of concatenated SCALE-encoded metadata Vec and network genesis hash (H256, always 32 bytes). Same blob is used to generate the signature. Network metadata is stored in dedicated METATREE tree of the Vault database. Network metadata identifier in is MetaKey, a key built from the network name and network metadata version. Metadata suitable for Vault Network metadata that can get into Vault and can be used by Vault only if it complies with following requirements: metadata vector starts with b\"meta\" prelude part of the metadata vector after b\"meta\" prelude is decodable as RuntimeMetadata RuntimeMetadata version of the metadata is V12, V13 or V14 Metadata has System pallet There is Version constant in System pallet Version is decodable as RuntimeVersion If the metadata contains base58 prefix, it must be decodable as u16 or u8 Additionally, if the metadata V14 is received, its associated extensions will be scanned and user will be warned if the extensions are incompatible with transactions signing. Also in case of the metadata V14 the type of the encoded data stored in the Version constant is also stored in the metadata types registry and in principle could be different from RuntimeVersion above. At the moment, the type of the Version is hardcoded, and any other types would not be processed and would get rejected with an error. load_types update payload, payload code 81 Load types information. Type information is needed to decode transactions made in networks with metadata RuntimeMetadata version V12 or V13. Most of the networks are already using RuntimeMetadata version V14, which has types information incorporated in the metadata itself. The load_types update is expected to become obsolete soon. Update payload is ContentLoadTypes in to_transfer(), i.e. double SCALE-encoded Vec (second SCALE is to have the exact payload length). Payload signature is generated for SCALE-encoded Vec. Types information is stored in SETTREE tree of the Vault database, under key TYPES. Verifiers Vault can accept both verified and non-verified updates, however, information once verified can not be replaced or updated by a weaker verifier without full Vault reset. A verifier could be Some(_) with corresponding public key inside or None. All verifiers for the data follow trust on first use principle. Vault uses: a single general verifier a network verifier for each of the networks introduced to the Vault General verifier information is stored in SETTREE tree of the Vault database, under key GENERALVERIFIER. General verifier is always set to a value, be it Some(_) or None. Removing the general verifier means setting it to None. If no general verifier entry is found in the database, the database is considered corrupted and the Vault must be reset. Network verifier information is stored in dedicated VERIFIERS tree of the Vault database. Network verifier identifier is VerifierKey, a key built from the network genesis hash. Same network verifier is used for network specs with any encryption algorithm and for network metadata. Network verifier could be valid or invalid. Valid network verifier could be general or custom. Verifiers installed as a result of an update are always valid. Invalid network verifier blocks the use of the network unless the Vault is reset, it appears if user marks custom verifier as no longer trusted. Updating verifier could cause some data verified by the old verifier to be removed, to avoid confusion regarding which verifier has signed the data currently stored in the database. The data removed is called \"hold\", and user receives a warning if accepting new update would cause hold data to be removed. General verifier General verifier is the strongest and the most reliable verifier known to the Vault. General verifier could sign all kinds of updates. By default the Vault uses Parity-associated key as general verifier, but users can remove it and set their own. There could be only one general verifier at any time. General verifier could be removed only by complete wipe of the Vault, through Remove general certificate button in the Settings. This will reset the Vault database to the default content and set the general verifier as None, that will be updated to the first verifier encountered by the Vault. Expected usage for this is that the user removes old general verifier and immediately afterwards loads an update from the preferred source, thus setting the general verifier to the user-preferred value. General verifier can be updated from None to Some(_) by accepting a verified update. This would result in removing \"general hold\", i.e.: all network data (network specs and metadata) for the networks for which the verifier is set to the general one types information General verifier could not be changed from Some(_) to another, different Some(_) by simply accepting updates. Note that if the general verifier is None, none of the custom verifiers could be Some(_). Similarly, if the verifier is recorded as custom in the database, its value can not be the same as the value of the general verifier. If found, those situations indicate the database corruption. Custom verifiers Custom verifiers could be used for network information that was verified, but not with the general verifier. There could be as many as needed custom verifiers at any time. Custom verifier is considered weaker than the general verifier. Custom verifier set to None could be updated to: Another custom verifier set to Some(_) General verifier Custom verifier set to Some(_) could be updated to general verifier. These verifier updates can be done by accepting an update signed by a new verifier. Any of the custom network verifier updates would result in removing \"hold\", i.e. all network specs entries (for all encryption algorithms on file) and all network metadata entries. Common update processing sequence: Cut the QR data and get: encryption used by verifier (single u8 from prelude) (only if the update is signed, i.e. the encryption is not 0xff) update verifier public key, its length matching the encryption (32 or 33 u8 immediately after the prelude) concatenated update payload, verifier signature (only if the update is signed) and reserved tail. If the data length is insufficient, Vault produces an error and suggests to load non-damaged update. Using the payload type from the prelude, determine the update payload length and cut payload from the concatenated verifier signature and reserved tail. If the data length is insufficient, Vault produces an error and suggests to load non-damaged update. (only if the update is signed, i.e. the encryption is not 0xff) Cut verifier signature, its length matching the encryption (64 or 65 u8 immediately after the update payload). Remaining data is reserved tail, currently it is not used. If the data length is insufficient, Vault produces an error and suggests to load non-damaged update. Verify the signature for the payload. If this fails, Vault produces an error indicating that the update has invalid signature. add_specs processing sequence Update payload is transformed into ContentAddSpecs and the incoming NetworkSpecsToSend are retrieved, or the Vault produces an error indicating that the add_specs payload is damaged. Vault checks that there is no change in invariant specs occurring. If there are entries in the SPECSTREE of the Vault database with same genesis hash as in newly received specs (the encryption not necessarily matches), the Vault checks that the name and base58 prefix in the received specs are same as in the specs already in the Vault database. Vault checks the verifier entry for the received genesis hash. If there are no entries, i.e. the network is altogether new to the Vault, the specs could be added into the database. During the same database transaction the network verifier is set up: | add_specs update verification | General verifier in Vault database | Action | | :- | :- | :- | | unverified, 0xff update encryption code | None or Some(_) | (1) set network verifier to custom, None (regardless of the general verifier); (2) add specs | | verified by a | None | (1) set network verifier to general; (2) set general verifier to Some(a), process the general hold; (3) add specs | | verified by a | Some(b) | (1) set network verifier to custom, Some(a); (2) add specs | | verified by a | Some(a) | (1) set network verifier to general; (2) add specs | If there are entries, i.e. the network was known to the Vault at some point after the last Vault reset, the network verifier in the database and the verifier of the update are compared. The specs could be added in the database if there are no verifier mismatches encountered (i.e. verifier same or stronger) received data causes no change in specs static for encryption the specs are not yet in the database in exactly same form Note that if the exactly same specs as already in the database are received with updated verifier and the user accepts the update, the verifier will get updated and the specs will stay in the database. | add_specs update verification | Network verifier in Vault database | General verifier in Vault database | Action | | :- | :- | :- | :- | | unverified, 0xff update encryption code | custom, None | None | accept specs if good | | unverified, 0xff update encryption code | custom, None | Some(a) | accept specs if good | | unverified, 0xff update encryption code | general | None | accept specs if good | | unverified, 0xff update encryption code | general | Some(a) | error: update should have been signed by a | | verified by a | custom, None | None | (1) change network verifier to general, process the network hold; (2) set general verifier to Some(a), process the general hold; (3) accept specs if good | | verified by a | custom, None | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | | verified by a | custom, None | Some(b) | (1) change network verifier to custom, Some(a), process the network hold; (2) accept specs if good | | verified by a | custom, Some(a) | Some(b) | accept specs if good | | verified by a | custom, Some(b) | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | | verified by a | custom, Some(b) | Some(c) | error: update should have been signed by b or c | Before the NetworkSpecsToSend are added in the SPECSTREE, they get transformed into NetworkSpecs, and have the order field (display order in Vault network lists) added. Each new network specs entry gets added in the end of the list. load_meta processing sequence Update payload is transformed into ContentLoadMeta, from which the metadata and the genesis hash are retrieved, or the Vault produces an error indicating that the load_metadata payload is damaged. Vault checks that the received metadata fulfills all Vault metadata requirements outlined above . Otherwise an error is produced indicating that the received metadata is invalid. Incoming MetaValues are produced, that contain network name, network metadata version and optional base58 prefix (if it is recorded in the metadata). Network genesis hash is used to generate VerifierKey and check if the network has an established network verifier in the Vault database. If there is no network verifier associated with genesis hash, an error is produced, indicating that the network metadata could be loaded only for networks introduced to Vault. SPECSTREE tree of the Vault database is scanned in search of entries with genesis hash matching the one received in payload. Vault accepts load_metadata updates only for the networks that have at least one network specs entry in the database. Note that if the verifier in step (3) above is found, it not necessarily means that the specs are found (for example, if a network verified by general verifier was removed by user). If the specs are found, the Vault checks that the network name and, if present, base58 prefix from the received metadata match the ones in network specs from the database. If the values do not match, the Vault produces an error. Vault compares the verifier of the received update and the verifier for the network from the database. The update verifier must be exactly the same as the verifier already in the database. If there is mismatch, Vault produces an error, indication that the load_metadata update for the network must be signed by the specified verifier (general or custom) or unsigned. If the update has passed all checks above, the Vault searches for the metadata entry in the METATREE of the Vault database, using network name and version from update to produce MetaKey. If the key is not found in the database, the metadata could be added. If the key is found in the database and metadata is exactly the same , the Vault produces an error indicating that the metadata is already in the database. This is expected to be quite common outcome. If the key is found in the database and the metadata is different , the Vault produces an error. Metadata must be not acceptable. This situation can occur if there was a silent metadata update or if the metadata is corrupted. load_types processing sequence Update payload is transformed into ContentLoadTypes, from which the types description vector Vec is retrieved, or the Vault produces an error indicating that the load_types payload is damaged. load_types updates must be signed by the general verifier. | load_types update verification | General verifier in Vault database | Action | | :- | :- | :- | | unverified, 0xff update encryption code | None | load types if the types are not yet in the database | | verified by a | None | (1) set general verifier to Some(a), process the general hold; (2) load types, warn if the types are the same as before | | verified by a | Some(b) | reject types, error indicates that load_types requires general verifier signature | | verified by a | Some(a) | load types if the types are not yet in the database | If the load_types verifier is same as the general verifier in the database and the types are same as the types in the database, the Vault produces an error indicating that the types are already known. Each time the types are loaded, the Vault produces a warning. load_types is rare and quite unexpected operation.","breadcrumbs":"Development » Universal offline signature » Update","id":"60","title":"Update"},"61":{"body":"Derivations import has the following structure: preludederivations import payload Derivations import payload is a SCALE-encoded ExportAddrs structure. It does not contain any private keys or seed phrases. ExportAddrs structure holds the following information about each key: name and public key of the seed the derived key belongs to ss58 address of the derived key (h160 for ethereum based chains) derivation path encryption type genesis hash of the network the key is used in When processing derivations import, all data after prelude is transformed into ExportAddrs. Network genesis hash, encryption and derivations set are derived from it, or the Vault produces a warning indicating that the derivation import payload is corrupted. Vault checks that the network for which the derivations are imported has network specs in the Vault database. If not, a warning is produced. Vault checks that the derivation set contains only valid derivations. If any derivation is unsuitable, a warning is produced indicating this. If the user accepts the derivations import, Vault generates a key for each valid derivation. If one of the derived keys already exists, it gets ignored, i.e. no error is produced. If there are two derivations with identical path within the payload, only one derived key is created.","breadcrumbs":"Development » Universal offline signature » Derivations import, payload code de","id":"61","title":"Derivations import, payload code de"},"62":{"body":"Vault repository contains 3 tools that are part of Vault ecosystem Polkadot Vault app generate_message network data management tool qr_reader_pc qr scanner app for PC Greater Vault ecosystem: metadata portal Signer companion polkadot-js libraries for QR code data transfer UOS interface specification - since no tools support original upstream specification, here is standard interpretation that is used in Vault.","breadcrumbs":"Development » Vault ecosystem » Vault ecosystem","id":"62","title":"Vault ecosystem"},"7":{"body":"What networks does Vault support? From-the-shelf Polkadot Vault supports Polkadot, Kusama, and Westend networks. But it's not limited to these networks. More experienced users can generate metadata for any network to expand the capability of Polkadot Vault. How can I update metadata version for a network? Parity verifies and publishes recent metadata versions on Metadata Update Portal . With off-the-shelf Vault you can scan one of the multipart QR-\"movies\" same way you scan transaction QR: in Vault open scanner, scan the QR for the respective network and accept new metadata. Currently, Metadata Update Portal follows Polkadot, Kusama, and Westend network metadata updates. Parity is open to collaboration with participants of other networks and is currently exploring safe and more decentralized ways of publishing verified metadata. If you want to update networks that you've added manually, please follow the Add Metadata steps in Add New Network guide. Why do I need to update network metadata versions at all? It's a safety feature. Substrate-based blockchain networks can be updated and otherwise changed; without recent metadata version of a network Vault won't be able to parse a transaction correctly, and you won't be able to read it and verify what you sign. Given that Vault is an app for an air-gapped device, you have to update the network version by using camera. How can I add a new network to Vault? Parity verifies and publishes network specs on Metadata Update Portal . To add one of the listed networks, in Metadata Update Portal click \"Chain Specs\", scan the network specs QR same way you scan transaction QR: in Vault open scanner, scan the QR and accept new network spec. Then scan the multipart QR-\"movie\" containing recent metadata for this network. Can I add a network that does not have network specs and metadata QR published anywhere? Yes. Follow the Add New Network step-by-step guide. Currently, the process requires you to have rust , subkey and parity-signer repository on your machine.","breadcrumbs":"About Polkadot Vault » FAQ » Networks","id":"7","title":"Networks"},"8":{"body":"Can I import my keys from polkadot{.js} apps or extension to Polkadot Vault? Yes. Keys are compatible between polkadot{.js} and Polkadot Vault, except for the keys generated with Ledger (BIP39). To import seed keys into Polkadot Vault, you need to know: Seed phrase It should always be backed up in paper! Network you are adding address to and whether Polkadot Vault installed on your device has metadata for the respective network. If (2) is not one of the default built-in networks, you will need to add network yourself or find a distribution center for adding networks. Derivation path Only if you are importing a derived key, usually keys generated with polkadot{.js} are seed keys. In Polkadot Vault go to Keys, then press \"Plus\" icon in the top right of the screen, select \"Recover seed\", enter display name to identify your seed, press \"Next\", enter the seed phrase. Done, you've got your seed key imported! If you are importing a derived key select the seed from which your key is derived, select account's network, press \"Plus\" icon next to \"Derived keys\", enter your derivation path. What is the difference between seed key and derived key? Why should I use derived keys? A seed key is a single key pair generated from a seed phrase. You can “grow” as many derived keys from a single seed by adding derivation paths to your seed phrase. Learn more about types of derivation paths on substrate.io . Derivation path is sensitive information, but knowing the derivation path is not enough to recover a key. Derived keys cannot be backed up without both of the ingredients: seed phrase (can be shared between multiple keys) and a derivation path (unique for each of the keys “grown” from that seed). The main reason to use derived keys is how easy it is to back up (and restore from a backup) a derivation path compared to seed phrase. What is an identicon, the image next to my keys? An identicon is a visual hash of a public key — a unique picture generated from your public key. The same public key should have the same identicon regardless of the application. It is a good tool to distinguish quickly between keys. However, when interacting with keys, i.g. verifying a recipient of a transaction, do not rely only on identicons, it is better to check the full public address. How can I rename one of my seeds? Due to security considerations, you cannot rename a seed. Please back up the seed and derived keys, remove it and add the seed again with a new name instead.","breadcrumbs":"About Polkadot Vault » FAQ » Seeds and keys","id":"8","title":"Seeds and keys"},"9":{"body":"","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » Security and Privacy","id":"9","title":"Security and Privacy"}},"length":63,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{".":{"4":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"1":{"df":1,"docs":{"57":{"tf":1.0}}},"2":{"df":1,"docs":{"57":{"tf":1.0}}},"3":{"df":1,"docs":{"57":{"tf":1.0}}},"4":{"0":{"3":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"5":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"0":{"0":{"df":0,"docs":{},"e":{"8":{"7":{"6":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"x":{"0":{"0":{"df":1,"docs":{"55":{"tf":2.0}}},"1":{"df":1,"docs":{"55":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"55":{"tf":2.23606797749979}}},"3":{"df":1,"docs":{"55":{"tf":1.0}}},"4":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"53":{"tf":1.0}}},"5":{"3":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"8":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"55":{"tf":1.0}}},"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"9":{"2":{"7":{"c":{"3":{"0":{"7":{"6":{"1":{"4":{"d":{"b":{"a":{"6":{"df":0,"docs":{},"e":{"c":{"4":{"2":{"df":0,"docs":{},"f":{"8":{"4":{"4":{"1":{"1":{"c":{"c":{"1":{"df":0,"docs":{},"e":{"9":{"3":{"c":{"6":{"5":{"7":{"9":{"8":{"9":{"3":{"8":{"5":{"9":{"c":{"df":0,"docs":{},"e":{"5":{"a":{"7":{"a":{"c":{"3":{"d":{"8":{"c":{"2":{"df":0,"docs":{},"f":{"b":{"1":{"6":{"4":{"9":{"d":{"1":{"5":{"4":{"2":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"55":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"55":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":3.0}}}}}},"1":{".":{".":{"3":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{".":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"54":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"45":{"tf":1.0}}},"2":{"df":1,"docs":{"28":{"tf":1.0}}},"5":{"4":{".":{".":{"=":{"1":{"8":{"5":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":8,"docs":{"31":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.0}}},"2":{"0":{"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":3.0},"8":{"tf":1.0}}},"3":{".":{".":{"5":{"df":1,"docs":{"54":{"tf":1.0}}},"=":{"3":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"3":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"16":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"3":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"5":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"6":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":10,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"62":{"tf":1.0}},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"4":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":8,"docs":{"31":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.0}}},"5":{".":{"0":{".":{"0":{"df":1,"docs":{"20":{"tf":1.0}}},"1":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"8":{"a":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"d":{"7":{"a":{"0":{"a":{"c":{"1":{"7":{"df":0,"docs":{},"e":{"b":{"6":{"d":{"d":{"0":{"0":{"4":{"5":{"7":{"8":{"c":{"b":{"8":{"df":0,"docs":{},"e":{"2":{"3":{"8":{"c":{"3":{"8":{"4":{"a":{"1":{"0":{"df":0,"docs":{},"f":{"5":{"7":{"c":{"9":{"9":{"9":{"a":{"3":{"df":0,"docs":{},"f":{"a":{"1":{"2":{"0":{"0":{"4":{"0":{"9":{"c":{"d":{"9":{"b":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"6":{"4":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}},"5":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":2,"docs":{"42":{"tf":1.0},"57":{"tf":1.0}}},"7":{"7":{".":{".":{"=":{"1":{"5":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"54":{"tf":1.0}}}}}}}}}},"8":{"0":{"df":1,"docs":{"60":{"tf":1.0}}},"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"a":{"df":0,"docs":{},"f":{".":{".":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"4":{"1":{"5":{"1":{"6":{"8":{"7":{"7":{"3":{"6":{"3":{"2":{"6":{"c":{"9":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"1":{"7":{"df":0,"docs":{},"e":{"2":{"5":{"df":0,"docs":{},"f":{"c":{"5":{"2":{"8":{"7":{"6":{"1":{"3":{"6":{"9":{"3":{"c":{"9":{"1":{"2":{"9":{"0":{"9":{"c":{"b":{"2":{"2":{"6":{"a":{"a":{"4":{"7":{"9":{"4":{"df":0,"docs":{},"f":{"2":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"4":{"0":{"4":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"o":{"df":0,"docs":{},"v":{"df":3,"docs":{"37":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":4.0},"61":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}}}}},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"8":{"tf":1.0}}},"df":20,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"33":{"tf":3.605551275463989},"34":{"tf":4.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"38":{"tf":2.6457513110645907},"6":{"tf":1.7320508075688772}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"1":{"tf":1.0},"23":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.123105625617661},"60":{"tf":1.7320508075688772}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"v":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}},"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":19,"docs":{"16":{"tf":1.0},"21":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":2.6457513110645907},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"38":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.449489742783178},"8":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"60":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"57":{"tf":3.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}}}},"df":9,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"57":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"22":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"i":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"p":{"df":5,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":2.8284271247461903}}}}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":7,"docs":{"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}}}}},"i":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":10,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":3.4641016151377544},"52":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":9,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"54":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.6457513110645907},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"34":{"tf":2.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"z":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"16":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":13,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.4142135623730951},"42":{"tf":2.8284271247461903},"45":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"k":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"p":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":27,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":2.449489742783178},"12":{"tf":1.0},"13":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"3":{"tf":1.4142135623730951},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":3.3166247903554},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":4.123105625617661},"47":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":2.449489742783178},"62":{"tf":1.4142135623730951},"7":{"tf":1.0},"8":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"33":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"l":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}},"i":{"c":{"df":7,"docs":{"0":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":1.7320508075688772},"44":{"tf":2.0},"8":{"tf":1.0}}},"df":2,"docs":{"11":{"tf":1.0},"50":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":2,"docs":{"28":{"tf":1.0},"57":{"tf":1.0}}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"38":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"34":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":2.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"45":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.6457513110645907}}}}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"11":{"tf":1.0},"16":{"tf":1.0},"2":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"\"":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"5":{"0":{"1":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"df":1,"docs":{"57":{"tf":1.0}}},"a":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"1":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":3.3166247903554}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"e":{"5":{"8":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":10,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"26":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"60":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.7320508075688772}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":10,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.0},"57":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"61":{"tf":1.0}}}},"w":{"df":2,"docs":{"52":{"tf":1.0},"57":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"t":{"a":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.0},"8":{"tf":2.0}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"54":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.0}}}}},"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}},"p":{"3":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"9":{"df":2,"docs":{"33":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}},"t":{"df":2,"docs":{"53":{"tf":1.4142135623730951},"54":{"tf":2.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"2":{"_":{"2":{"5":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"b":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"54":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"1":{"tf":1.0},"34":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}},"o":{"b":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"x":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"41":{"tf":1.0}}}}},"df":6,"docs":{"20":{"tf":1.7320508075688772},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":4,"docs":{"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":2.0}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"53":{"tf":2.0},"54":{"tf":2.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}}},"c":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":6.324555320336759},"6":{"tf":1.0},"60":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"d":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"11":{"tf":1.0},"16":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"40":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":6,"docs":{"0":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"d":{"df":1,"docs":{"41":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"45":{"tf":2.8284271247461903},"60":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":2.8284271247461903},"56":{"tf":1.0},"60":{"tf":3.1622776601683795},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"18":{"tf":1.0},"3":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":2.0},"12":{"tf":2.0},"32":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"0":{"tf":1.0},"11":{"tf":1.4142135623730951},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":3,"docs":{"12":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}}}},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"27":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":7,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"38":{"tf":1.0},"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"k":{"df":8,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"m":{"d":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":23,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":2.8284271247461903},"44":{"tf":2.6457513110645907},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":2.449489742783178},"54":{"tf":2.6457513110645907},"55":{"tf":2.8284271247461903},"56":{"tf":1.7320508075688772},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":3,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"54":{"tf":2.8284271247461903}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"54":{"tf":1.4142135623730951}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"47":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.7320508075688772}}}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"57":{"tf":2.449489742783178}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"r":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":4,"docs":{"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"1":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}},"x":{"df":2,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"i":{"df":1,"docs":{"60":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.4142135623730951},"53":{"tf":2.23606797749979},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"60":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":2.449489742783178}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"29":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"47":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":16,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"24":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":2.8284271247461903},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":2.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"6":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"2":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.0},"60":{"tf":2.0},"7":{"tf":1.7320508075688772}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":2.0},"38":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":4.898979485566356}}}}}},"t":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":2.0}}}}},"d":{"4":{"3":{"5":{".":{".":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"3":{"c":{"7":{"1":{"5":{"df":0,"docs":{},"f":{"d":{"d":{"3":{"1":{"c":{"6":{"1":{"1":{"4":{"1":{"a":{"b":{"d":{"0":{"4":{"a":{"9":{"9":{"df":0,"docs":{},"f":{"d":{"6":{"8":{"2":{"2":{"c":{"8":{"5":{"5":{"8":{"8":{"5":{"4":{"c":{"c":{"d":{"df":0,"docs":{},"e":{"3":{"9":{"a":{"5":{"6":{"8":{"4":{"df":0,"docs":{},"e":{"7":{"a":{"5":{"6":{"d":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":8,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.449489742783178},"57":{"tf":3.1622776601683795},"60":{"tf":6.4031242374328485},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":13,"docs":{"0":{"tf":1.0},"13":{"tf":1.4142135623730951},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"54":{"tf":2.23606797749979},"57":{"tf":4.69041575982343},"60":{"tf":4.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":4,"docs":{"1":{"tf":1.0},"26":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0}}}}},"b":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"44":{"tf":1.0}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":4,"docs":{"28":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"54":{"tf":1.0},"57":{"tf":4.242640687119285},"60":{"tf":2.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"27":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":1,"docs":{"61":{"tf":1.0}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":12,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":19,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":3.1622776601683795},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":2.8284271247461903},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":4.358898943540674},"8":{"tf":4.242640687119285}},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":4,"docs":{"3":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":3.1622776601683795}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":3.3166247903554}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"14":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":2.0}}}}}},"i":{"c":{"df":15,"docs":{"0":{"tf":1.0},"10":{"tf":2.6457513110645907},"12":{"tf":2.449489742783178},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"32":{"tf":2.6457513110645907},"33":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"6":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":2.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":4,"docs":{"34":{"tf":2.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":1.0},"8":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"o":{"c":{"df":2,"docs":{"3":{"tf":1.0},"49":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"50":{"tf":2.0}}}}}}}},"df":4,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"t":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"16":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":6,"docs":{"12":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"41":{"tf":1.0}}}},"1":{"4":{"3":{".":{".":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"2":{"3":{"8":{"0":{"3":{"a":{"c":{"5":{"0":{"df":0,"docs":{},"e":{"8":{"df":0,"docs":{},"f":{"6":{"df":0,"docs":{},"f":{"8":{"df":0,"docs":{},"e":{"6":{"2":{"6":{"9":{"5":{"d":{"1":{"c":{"df":0,"docs":{},"e":{"9":{"df":0,"docs":{},"e":{"4":{"df":0,"docs":{},"e":{"1":{"d":{"6":{"8":{"a":{"a":{"3":{"6":{"c":{"1":{"c":{"d":{"2":{"c":{"df":0,"docs":{},"f":{"d":{"1":{"5":{"3":{"4":{"0":{"2":{"1":{"3":{"df":0,"docs":{},"f":{"3":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":11,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.7320508075688772},"57":{"tf":2.6457513110645907},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":1.7320508075688772}}}}}}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"36":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.4142135623730951},"45":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":9,"docs":{"16":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.0},"32":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.898979485566356},"61":{"tf":1.4142135623730951}}}}}}},"d":{"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.4142135623730951},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"0":{"tf":1.0},"51":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"8":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.1622776601683795},"60":{"tf":3.3166247903554}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"r":{"a":{"df":1,"docs":{"57":{"tf":2.8284271247461903}},"s":{"df":1,"docs":{"45":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":9,"docs":{"16":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":4.47213595499958},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"t":{"c":{"df":4,"docs":{"20":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":1,"docs":{"45":{"tf":3.605551275463989}},"u":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"11":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"44":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"24":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":2.0},"52":{"tf":1.0}}}},"s":{"df":1,"docs":{"0":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":2.0}},"e":{"d":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":4,"docs":{"57":{"tf":6.708203932499369},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"30":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"f":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"32":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"48":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"q":{"df":2,"docs":{"3":{"tf":1.0},"5":{"tf":1.0}}},"r":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"1":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"d":{"df":3,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":2,"docs":{"26":{"tf":1.0},"44":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":3.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"16":{"tf":1.7320508075688772},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"n":{"d":{"df":6,"docs":{"12":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.7320508075688772},"25":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}},"t":{"df":3,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0}}},"x":{"df":5,"docs":{"19":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":13,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.0},"61":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}}}},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":2.6457513110645907},"50":{"tf":2.0}}}},"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"42":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":3.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":4.58257569495584}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979}}}}}}},"d":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":2.23606797749979}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"r":{"b":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":18,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"24":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.7320508075688772},"38":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":4.0},"49":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":2.0},"60":{"tf":7.416198487095663},"61":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":2.0}}},"s":{"df":0,"docs":{},"i":{"df":4,"docs":{"57":{"tf":3.7416573867739413},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}},"t":{"df":6,"docs":{"3":{"tf":1.4142135623730951},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"61":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":5,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":1,"docs":{"57":{"tf":2.0}}},"o":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.8284271247461903},"8":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"r":{"a":{"d":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}},"w":{"df":1,"docs":{"8":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"21":{"tf":1.0},"3":{"tf":1.4142135623730951},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"h":{"1":{"6":{"0":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"5":{"6":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"53":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"34":{"tf":1.0}},"l":{"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":2.0},"49":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"16":{"tf":2.0},"24":{"tf":1.0},"44":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"0":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"df":6,"docs":{"20":{"tf":1.0},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"k":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}}},"x":{"a":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":2.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"14":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.0},"28":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}},"i":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":2.449489742783178},"57":{"tf":2.449489742783178}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"10":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"60":{"tf":3.3166247903554},"61":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"t":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"3":{"df":0,"docs":{},"f":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":5,"docs":{"50":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":3.4641016151377544},"61":{"tf":1.0}},"g":{"df":1,"docs":{"8":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"a":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}},"l":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"31":{"tf":1.7320508075688772},"33":{"tf":4.0},"37":{"tf":2.449489742783178},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":2.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.4641016151377544},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"29":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"55":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"61":{"tf":2.8284271247461903},"8":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"v":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":4,"docs":{"0":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"x":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":2.6457513110645907}}}},"i":{"c":{"df":7,"docs":{"45":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"o":{"df":4,"docs":{"32":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"r":{"df":0,"docs":{},"m":{"df":18,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"32":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.7320508075688772},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":3.0},"61":{"tf":1.0},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"23":{"tf":2.449489742783178},"26":{"tf":2.0},"27":{"tf":1.0},"32":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"n":{"c":{"df":2,"docs":{"50":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"53":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":4,"docs":{"16":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"34":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"c":{"df":4,"docs":{"28":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.6457513110645907},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"n":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"50":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.449489742783178},"62":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"14":{"tf":1.0},"60":{"tf":2.0}},"t":{"df":3,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"o":{"df":10,"docs":{"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":2.0},"45":{"tf":2.449489742783178},"47":{"tf":1.0},"48":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.449489742783178}}}},"s":{"df":0,"docs":{},"u":{"df":3,"docs":{"48":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"t":{"'":{"df":4,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":7,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":1,"docs":{"27":{"tf":1.0}}}}},"df":0,"docs":{}},"df":8,"docs":{"0":{"tf":1.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.0},"34":{"tf":2.8284271247461903},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":2.23606797749979}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"k":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}},"y":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}},"y":{"(":{"df":1,"docs":{"24":{"tf":1.0}}},"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":27,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.449489742783178},"17":{"tf":1.0},"20":{"tf":2.23606797749979},"24":{"tf":3.872983346207417},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":5.385164807134504},"5":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"6":{"tf":2.6457513110645907},"60":{"tf":4.0},"61":{"tf":3.0},"8":{"tf":5.5677643628300215}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":1.0}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":2.449489742783178}}}}}}},"s":{"df":0,"docs":{},"m":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"m":{"a":{"df":6,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"42":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":3,"docs":{"1":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}},"v":{"df":4,"docs":{"0":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"6":{"tf":1.0}}}},"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"g":{"a":{"c":{"df":0,"docs":{},"i":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":3.3166247903554},"60":{"tf":3.3166247903554}}}}}},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"t":{"'":{"df":2,"docs":{"27":{"tf":1.0},"37":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"i":{"b":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"20":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"4":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0},"7":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"49":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"48":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"37":{"tf":1.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"35":{"tf":1.0},"6":{"tf":1.0}}}}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":3.0}}}}}},"df":4,"docs":{"29":{"tf":2.0},"55":{"tf":1.4142135623730951},"57":{"tf":2.23606797749979},"60":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":2.0},"45":{"tf":3.1622776601683795},"57":{"tf":2.0}},"i":{"c":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":2.0},"49":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"60":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"g":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"45":{"tf":1.0}}},"p":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"24":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}},"s":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"t":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":1,"docs":{"41":{"tf":1.0}},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"48":{"tf":1.0},"7":{"tf":1.0}}}}},"o":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"50":{"tf":1.0}}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"6":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":10,"docs":{"0":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"54":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"34":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"3":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"32":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":2.449489742783178}}}}}},"n":{"df":0,"docs":{},"u":{"df":3,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":13,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":2.6457513110645907},"29":{"tf":3.7416573867739413},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"52":{"tf":2.0},"55":{"tf":1.0},"57":{"tf":7.681145747868608},"60":{"tf":6.244997998398398},"62":{"tf":1.0},"7":{"tf":3.872983346207417},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"t":{"a":{"d":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772}}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"13":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951}},"e":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}},"d":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.0}}}},"df":0,"docs":{},"e":{"df":9,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.0}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"0":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":2.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"55":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":1.0}}},"i":{"df":2,"docs":{"29":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"54":{"tf":2.449489742783178}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":2.449489742783178},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"+":{"1":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"20":{"tf":2.0},"3":{"tf":1.0},"44":{"tf":3.0},"45":{"tf":3.4641016151377544}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"44":{"tf":2.0},"45":{"tf":2.23606797749979},"49":{"tf":1.0},"57":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"42":{"tf":2.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":22,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"27":{"tf":1.0}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":2.6457513110645907},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.449489742783178},"25":{"tf":1.0},"26":{"tf":2.6457513110645907},"27":{"tf":4.0},"28":{"tf":2.6457513110645907},"29":{"tf":2.8284271247461903},"3":{"tf":1.0},"33":{"tf":2.23606797749979},"37":{"tf":1.4142135623730951},"38":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":6.557438524302},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":4.898979485566356},"58":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":9.0},"61":{"tf":2.0},"62":{"tf":1.0},"7":{"tf":4.898979485566356},"8":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.0}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"32":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}}},"w":{"df":18,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.23606797749979},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.7320508075688772}}}}},"f":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":5,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"e":{"df":2,"docs":{"13":{"tf":1.0},"60":{"tf":4.58257569495584}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}},"h":{"df":2,"docs":{"40":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0}}},"df":0,"docs":{}}},"w":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"44":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":2.6457513110645907},"57":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"10":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"6":{"tf":1.7320508075688772}}}}}}},"l":{"d":{"df":3,"docs":{"40":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.0},"52":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"n":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":16,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"37":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}},"r":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"51":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"36":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"11":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}}}},"s":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"24":{"tf":1.0},"53":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":5,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"34":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}}}},"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"57":{"tf":3.1622776601683795},"60":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":2.0}}}}},"s":{"df":6,"docs":{"3":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":2.0},"51":{"tf":1.0},"57":{"tf":3.872983346207417},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"49":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"1":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":2.23606797749979},"62":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"57":{"tf":1.0},"7":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}},"t":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"45":{"tf":2.449489742783178}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"13":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"32":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":2.23606797749979},"42":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.0},"57":{"tf":3.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"8":{"tf":2.8284271247461903}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":3,"docs":{"22":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":11,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":2.8284271247461903},"50":{"tf":1.0},"54":{"tf":3.4641016151377544},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"60":{"tf":5.477225575051661},"61":{"tf":2.23606797749979}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"34":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"'":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}},"df":12,"docs":{"0":{"tf":1.4142135623730951},"10":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"24":{"tf":1.0},"26":{"tf":2.6457513110645907},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":2.449489742783178},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":16,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"15":{"tf":1.0},"24":{"tf":3.605551275463989},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.449489742783178},"36":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"61":{"tf":1.0},"8":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"0":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"0":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"34":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":2.0}}}}}}},"y":{"df":2,"docs":{"11":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":9,"docs":{"11":{"tf":1.0},"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.7320508075688772},"32":{"tf":1.0},"48":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":2,"docs":{"1":{"tf":1.0},"37":{"tf":1.0}}}},"/":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":27,"docs":{"0":{"tf":2.6457513110645907},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":2.23606797749979},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":2.0},"31":{"tf":1.7320508075688772},"32":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":4.358898943540674},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":2.23606797749979},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.4142135623730951},"7":{"tf":2.0},"8":{"tf":2.23606797749979}},"j":{"df":6,"docs":{"21":{"tf":1.0},"3":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}},"{":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"58":{"tf":1.0},"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"12":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"24":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"x":{"df":5,"docs":{"16":{"tf":1.0},"38":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"61":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":4,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"60":{"tf":1.0}}}}},"s":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"20":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"26":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.0},"57":{"tf":2.449489742783178},"59":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":6,"docs":{"45":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":2.0}},"t":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"45":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":2.23606797749979},"61":{"tf":1.0},"8":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"50":{"tf":1.0},"7":{"tf":2.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"c":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":1,"docs":{"44":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":24,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":2.449489742783178},"29":{"tf":2.6457513110645907},"33":{"tf":1.0},"34":{"tf":3.1622776601683795},"44":{"tf":2.449489742783178},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.0},"53":{"tf":2.449489742783178},"54":{"tf":2.449489742783178},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"7":{"tf":2.8284271247461903}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"q":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.8284271247461903}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"w":{"df":2,"docs":{"53":{"tf":1.0},"56":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"3":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"d":{"df":13,"docs":{"1":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"i":{"df":5,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"34":{"tf":1.0},"44":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"8":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"51":{"tf":1.0},"60":{"tf":3.605551275463989}}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"v":{"df":11,"docs":{"12":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":2.8284271247461903},"35":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"38":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"24":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.23606797749979},"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"d":{"df":1,"docs":{"33":{"tf":1.0}},"u":{"c":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"20":{"tf":2.0},"44":{"tf":1.0},"45":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"3":{"tf":1.0},"54":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"19":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"3":{"tf":1.0}}}},"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"8":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":5,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":6,"docs":{"0":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":3.4641016151377544},"8":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":1,"docs":{"44":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"12":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":6,"docs":{"34":{"tf":1.4142135623730951},"37":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.4142135623730951},"2":{"tf":1.0},"27":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":3.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}},"t":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"53":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"60":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"f":{"c":{"6":{"3":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"12":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}}},"n":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"54":{"tf":1.0}}}}},"p":{"c":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"32":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"52":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"v":{"1":{"4":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"42":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":14,"docs":{"20":{"tf":2.449489742783178},"27":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":3.872983346207417},"45":{"tf":2.6457513110645907},"47":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":12,"docs":{"11":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.872983346207417},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"42":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"45":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"n":{"df":12,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.6457513110645907},"54":{"tf":2.23606797749979},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"7":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"45":{"tf":3.605551275463989},"8":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.58257569495584}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":15,"docs":{"1":{"tf":2.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"34":{"tf":1.0},"45":{"tf":3.3166247903554},"6":{"tf":2.449489742783178},"8":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":4.358898943540674},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":4.795831523312719},"5":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.4142135623730951},"8":{"tf":4.58257569495584}}},"df":7,"docs":{"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0}},"m":{"df":1,"docs":{"48":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"n":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":2.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"f":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"d":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"34":{"tf":2.6457513110645907}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"8":{"tf":1.0}}}}},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.0}}}}}}},"t":{"df":10,"docs":{"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"52":{"tf":1.0},"57":{"tf":3.4641016151377544},"60":{"tf":4.358898943540674},"61":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"31":{"tf":1.0},"33":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"56":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"27":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"w":{"df":3,"docs":{"12":{"tf":1.0},"54":{"tf":2.0},"57":{"tf":1.7320508075688772}},"n":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":5,"docs":{"33":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":2.6457513110645907},"47":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":11,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.0},"34":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"6":{"tf":1.4142135623730951},"60":{"tf":3.605551275463989}}}}}},"df":22,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":2.23606797749979},"28":{"tf":2.23606797749979},"29":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.6457513110645907},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":3.872983346207417},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":3.7416573867739413},"7":{"tf":1.0}},"e":{"d":{")":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"@":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"13":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}},"i":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}},"t":{"df":1,"docs":{"34":{"tf":1.0}},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.4142135623730951},"44":{"tf":1.0},"6":{"tf":1.0}},"e":{"'":{"df":1,"docs":{"0":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":2.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"25":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"_":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":3.0}}},"a":{"df":1,"docs":{"60":{"tf":3.4641016151377544}}},"b":{"df":1,"docs":{"60":{"tf":2.449489742783178}}},"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"2":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":10,"docs":{"27":{"tf":1.7320508075688772},"28":{"tf":4.0},"29":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":6.164414002968976},"61":{"tf":1.0},"7":{"tf":2.23606797749979}},"i":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"24":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.4142135623730951}},"i":{"df":5,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":2.0}}}}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"54":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"2":{"5":{"5":{"1":{"9":{"df":6,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"5":{"8":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"40":{"tf":1.0},"57":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":17,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"3":{"tf":1.7320508075688772},"37":{"tf":1.0},"41":{"tf":1.0},"47":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"45":{"tf":3.7416573867739413},"47":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":2.0}}},"i":{"c":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"y":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":7,"docs":{"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"1":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"0":{"tf":1.0},"20":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":18,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":3.3166247903554},"54":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.4142135623730951},"60":{"tf":2.8284271247461903}}}}},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":7,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"12":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"r":{"df":10,"docs":{"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.7320508075688772},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"45":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"b":{"df":1,"docs":{"44":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0},"7":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"53":{"tf":1.0}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"50":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"1":{"tf":1.0},"57":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}}}}}},"df":0,"docs":{},"h":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":2.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"32":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"47":{"tf":1.0}}},"i":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"47":{"tf":1.0},"53":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"1":{"tf":1.0}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":7,"docs":{"2":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951}}}}}}}},"t":{":":{":":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"29":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":7,"docs":{"12":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"k":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":12,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}}},"u":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":4.242640687119285},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":11,"docs":{"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979}}}},"p":{"df":2,"docs":{"34":{"tf":1.0},"57":{"tf":2.0}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"o":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"0":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"28":{"tf":2.23606797749979},"44":{"tf":1.0},"6":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"l":{"df":8,"docs":{"27":{"tf":1.0},"3":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"6":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"8":{"tf":1.0}}}},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":22,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":4.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"52":{"tf":2.0},"55":{"tf":2.23606797749979},"57":{"tf":6.244997998398398},"58":{"tf":1.7320508075688772},"59":{"tf":2.23606797749979},"6":{"tf":1.7320508075688772},"60":{"tf":2.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"52":{"tf":1.0}}}}}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"_":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"0":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"60":{"tf":2.0},"61":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}},"i":{"a":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":6,"docs":{"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":2.23606797749979}}}}}}},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"46":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"34":{"tf":1.0},"35":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"o":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"x":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":14,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":5.830951894845301},"60":{"tf":4.795831523312719},"61":{"tf":1.0},"8":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"u":{"1":{"6":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"8":{"df":4,"docs":{"51":{"tf":1.0},"57":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"df":2,"docs":{"28":{"tf":2.0},"29":{"tf":1.4142135623730951}},"i":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.8284271247461903}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":2.23606797749979},"47":{"tf":1.0}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"t":{"df":5,"docs":{"28":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}}}}}}},"o":{"df":4,"docs":{"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"55":{"tf":1.0},"62":{"tf":1.0}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"12":{"tf":1.4142135623730951},"20":{"tf":2.0},"27":{"tf":2.6457513110645907},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":2.23606797749979},"60":{"tf":8.831760866327848},"7":{"tf":3.1622776601683795}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"16":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.8284271247461903},"30":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"52":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":2.0}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":4,"docs":{"21":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"3":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"50":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"22":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}},"b":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":3.0},"23":{"tf":1.0},"24":{"tf":3.1622776601683795},"26":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.0},"32":{"tf":2.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":3.4641016151377544},"45":{"tf":4.358898943540674},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":5.0990195135927845},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":4.69041575982343},"61":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":16,"docs":{"12":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":4.47213595499958},"51":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.0},"6":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"f":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}}},"v":{"1":{"2":{"df":2,"docs":{"57":{"tf":2.8284271247461903},"60":{"tf":1.4142135623730951}}},"3":{"df":3,"docs":{"52":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"df":0,"docs":{}},"2":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"2":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"df":1,"docs":{"33":{"tf":1.0}}},"4":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"14":{"tf":1.4142135623730951},"30":{"tf":1.0},"35":{"tf":1.0}}},"5":{"df":1,"docs":{"25":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"'":{"df":3,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951}}},"df":46,"docs":{"0":{"tf":2.23606797749979},"1":{"tf":2.0},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":2.0},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"23":{"tf":2.8284271247461903},"24":{"tf":2.8284271247461903},"25":{"tf":1.4142135623730951},"26":{"tf":3.3166247903554},"27":{"tf":2.449489742783178},"28":{"tf":1.4142135623730951},"29":{"tf":2.0},"3":{"tf":2.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":2.8284271247461903},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":3.1622776601683795},"45":{"tf":3.872983346207417},"49":{"tf":1.0},"50":{"tf":2.23606797749979},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"54":{"tf":3.1622776601683795},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":5.744562646538029},"58":{"tf":1.0},"6":{"tf":4.0},"60":{"tf":7.810249675906654},"61":{"tf":2.23606797749979},"62":{"tf":2.449489742783178},"7":{"tf":3.0},"8":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}}}}}}},"u":{"8":{"df":3,"docs":{"57":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}},"i":{"df":9,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"60":{"tf":10.862780491200215},"7":{"tf":2.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}},"s":{"a":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.7320508075688772},"30":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"40":{"tf":1.0},"47":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":5.291502622129181},"60":{"tf":3.1622776601683795},"7":{"tf":2.23606797749979}}}}}}}},"i":{"a":{"df":3,"docs":{"27":{"tf":1.0},"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":3.1622776601683795},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"/":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"30":{"tf":1.0},"35":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.7320508075688772},"6":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"28":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772}}}},"y":{"df":11,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"b":{"c":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"34":{"tf":2.0},"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"34":{"tf":1.7320508075688772}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"16":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"57":{"tf":2.6457513110645907},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0}}}},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":3,"docs":{"6":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"s":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"40":{"tf":1.0}}},"y":{"df":0,"docs":{},"e":{"df":4,"docs":{"41":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"'":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"v":{"df":5,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"8":{"tf":1.0}}}}}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"breadcrumbs":{"root":{"0":{".":{".":{"4":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"1":{"df":1,"docs":{"57":{"tf":1.0}}},"2":{"df":1,"docs":{"57":{"tf":1.0}}},"3":{"df":1,"docs":{"57":{"tf":1.0}}},"4":{"0":{"3":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"5":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"0":{"0":{"df":0,"docs":{},"e":{"8":{"7":{"6":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"x":{"0":{"0":{"df":1,"docs":{"55":{"tf":2.0}}},"1":{"df":1,"docs":{"55":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"55":{"tf":2.23606797749979}}},"3":{"df":1,"docs":{"55":{"tf":1.0}}},"4":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"53":{"tf":1.0}}},"5":{"3":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"8":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"55":{"tf":1.0}}},"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"9":{"2":{"7":{"c":{"3":{"0":{"7":{"6":{"1":{"4":{"d":{"b":{"a":{"6":{"df":0,"docs":{},"e":{"c":{"4":{"2":{"df":0,"docs":{},"f":{"8":{"4":{"4":{"1":{"1":{"c":{"c":{"1":{"df":0,"docs":{},"e":{"9":{"3":{"c":{"6":{"5":{"7":{"9":{"8":{"9":{"3":{"8":{"5":{"9":{"c":{"df":0,"docs":{},"e":{"5":{"a":{"7":{"a":{"c":{"3":{"d":{"8":{"c":{"2":{"df":0,"docs":{},"f":{"b":{"1":{"6":{"4":{"9":{"d":{"1":{"5":{"4":{"2":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"55":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"55":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":3.0}}}}}},"1":{".":{".":{"3":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{".":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"54":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"45":{"tf":1.0}}},"2":{"df":1,"docs":{"28":{"tf":1.0}}},"5":{"4":{".":{".":{"=":{"1":{"8":{"5":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":8,"docs":{"31":{"tf":1.0},"32":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.0}}},"2":{"0":{"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":3.0},"8":{"tf":1.0}}},"3":{".":{".":{"5":{"df":1,"docs":{"54":{"tf":1.0}}},"=":{"3":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"3":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"16":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"3":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"5":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"6":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":10,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"62":{"tf":1.0}},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"4":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":8,"docs":{"31":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.0}}},"5":{".":{"0":{".":{"0":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"1":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"8":{"a":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"d":{"7":{"a":{"0":{"a":{"c":{"1":{"7":{"df":0,"docs":{},"e":{"b":{"6":{"d":{"d":{"0":{"0":{"4":{"5":{"7":{"8":{"c":{"b":{"8":{"df":0,"docs":{},"e":{"2":{"3":{"8":{"c":{"3":{"8":{"4":{"a":{"1":{"0":{"df":0,"docs":{},"f":{"5":{"7":{"c":{"9":{"9":{"9":{"a":{"3":{"df":0,"docs":{},"f":{"a":{"1":{"2":{"0":{"0":{"4":{"0":{"9":{"c":{"d":{"9":{"b":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"6":{"4":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}},"5":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":2,"docs":{"42":{"tf":1.0},"57":{"tf":1.0}}},"7":{"7":{".":{".":{"=":{"1":{"5":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"54":{"tf":1.0}}}}}}}}}},"8":{"0":{"df":1,"docs":{"60":{"tf":1.0}}},"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"a":{"df":0,"docs":{},"f":{".":{".":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"4":{"1":{"5":{"1":{"6":{"8":{"7":{"7":{"3":{"6":{"3":{"2":{"6":{"c":{"9":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"1":{"7":{"df":0,"docs":{},"e":{"2":{"5":{"df":0,"docs":{},"f":{"c":{"5":{"2":{"8":{"7":{"6":{"1":{"3":{"6":{"9":{"3":{"c":{"9":{"1":{"2":{"9":{"0":{"9":{"c":{"b":{"2":{"2":{"6":{"a":{"a":{"4":{"7":{"9":{"4":{"df":0,"docs":{},"f":{"2":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"4":{"0":{"4":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"o":{"df":0,"docs":{},"v":{"df":3,"docs":{"37":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":4.0},"61":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}}}}},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"8":{"tf":1.0}}},"df":20,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":2.23606797749979},"14":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"33":{"tf":3.605551275463989},"34":{"tf":4.123105625617661},"35":{"tf":2.0},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"38":{"tf":3.0},"6":{"tf":1.7320508075688772}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"1":{"tf":1.0},"23":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.123105625617661},"60":{"tf":1.7320508075688772}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"v":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}},"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":19,"docs":{"16":{"tf":1.0},"21":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":2.23606797749979},"28":{"tf":3.0},"29":{"tf":1.7320508075688772},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"38":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.449489742783178},"8":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"60":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"57":{"tf":3.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}}}},"df":9,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"57":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"22":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"i":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"p":{"df":5,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":2.8284271247461903}}}}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":7,"docs":{"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}}}}},"i":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":10,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":3.4641016151377544},"52":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":9,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"54":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.6457513110645907},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"34":{"tf":2.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"z":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"16":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":13,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.4142135623730951},"42":{"tf":3.0},"45":{"tf":1.7320508075688772},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"k":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"p":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":27,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":2.449489742783178},"12":{"tf":1.0},"13":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"3":{"tf":1.4142135623730951},"30":{"tf":2.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":3.4641016151377544},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":4.123105625617661},"47":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"6":{"tf":2.449489742783178},"62":{"tf":1.4142135623730951},"7":{"tf":1.0},"8":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"33":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"l":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}},"i":{"c":{"df":7,"docs":{"0":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":2.0},"44":{"tf":2.0},"8":{"tf":1.0}}},"df":2,"docs":{"11":{"tf":1.0},"50":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":2,"docs":{"28":{"tf":1.0},"57":{"tf":1.0}}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"38":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"34":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":2.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"45":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.6457513110645907}}}}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"11":{"tf":1.0},"16":{"tf":1.0},"2":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"\"":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"5":{"0":{"1":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"df":1,"docs":{"57":{"tf":1.0}}},"a":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"1":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":3.3166247903554}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"e":{"5":{"8":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":10,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"26":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"60":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.7320508075688772}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":10,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.0},"57":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"61":{"tf":1.0}}}},"w":{"df":2,"docs":{"52":{"tf":1.0},"57":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"t":{"a":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.0},"8":{"tf":2.0}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"54":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.0}}}}},"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}},"p":{"3":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"9":{"df":2,"docs":{"33":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}},"t":{"df":2,"docs":{"53":{"tf":1.4142135623730951},"54":{"tf":2.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"2":{"_":{"2":{"5":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"b":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"54":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"1":{"tf":1.0},"34":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}},"o":{"b":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"x":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"41":{"tf":1.0}}}}},"df":7,"docs":{"20":{"tf":1.7320508075688772},"40":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"47":{"tf":1.4142135623730951},"48":{"tf":2.0}}},"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":4,"docs":{"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"53":{"tf":2.0},"54":{"tf":2.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}}},"c":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":6.324555320336759},"6":{"tf":1.0},"60":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"d":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"11":{"tf":1.0},"16":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"40":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":6,"docs":{"0":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"d":{"df":1,"docs":{"41":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"45":{"tf":2.8284271247461903},"60":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":2.8284271247461903},"56":{"tf":1.0},"60":{"tf":3.1622776601683795},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":4,"docs":{"18":{"tf":1.7320508075688772},"19":{"tf":1.0},"20":{"tf":1.0},"3":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":2.0},"12":{"tf":2.0},"32":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"0":{"tf":1.0},"11":{"tf":1.4142135623730951},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":3,"docs":{"12":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}}}},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"27":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":7,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"38":{"tf":1.0},"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"k":{"df":8,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"m":{"d":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":23,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":2.8284271247461903},"44":{"tf":2.6457513110645907},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.4142135623730951},"53":{"tf":2.6457513110645907},"54":{"tf":2.6457513110645907},"55":{"tf":3.0},"56":{"tf":2.0},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":3,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"54":{"tf":2.8284271247461903}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"54":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"54":{"tf":1.4142135623730951}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"47":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.7320508075688772}}}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"57":{"tf":2.449489742783178}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"r":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":4,"docs":{"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"47":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"1":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}},"x":{"df":2,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"i":{"df":1,"docs":{"60":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.7320508075688772},"53":{"tf":2.23606797749979},"54":{"tf":2.0},"55":{"tf":2.0},"57":{"tf":2.449489742783178},"60":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":2.449489742783178}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"29":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"47":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":16,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"24":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":2.8284271247461903},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":2.0},"42":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":2.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"6":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"2":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.0},"60":{"tf":2.0},"7":{"tf":1.7320508075688772}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":2.0},"38":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":4.898979485566356}}}}}},"t":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":2.0}}}}},"d":{"4":{"3":{"5":{".":{".":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"3":{"c":{"7":{"1":{"5":{"df":0,"docs":{},"f":{"d":{"d":{"3":{"1":{"c":{"6":{"1":{"1":{"4":{"1":{"a":{"b":{"d":{"0":{"4":{"a":{"9":{"9":{"df":0,"docs":{},"f":{"d":{"6":{"8":{"2":{"2":{"c":{"8":{"5":{"5":{"8":{"8":{"5":{"4":{"c":{"c":{"d":{"df":0,"docs":{},"e":{"3":{"9":{"a":{"5":{"6":{"8":{"4":{"df":0,"docs":{},"e":{"7":{"a":{"5":{"6":{"d":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":8,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.449489742783178},"57":{"tf":3.1622776601683795},"60":{"tf":6.4031242374328485},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":13,"docs":{"0":{"tf":1.0},"13":{"tf":1.7320508075688772},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"54":{"tf":2.23606797749979},"57":{"tf":4.69041575982343},"60":{"tf":4.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":4,"docs":{"1":{"tf":1.0},"26":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0}}}}},"b":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"44":{"tf":1.0}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":4,"docs":{"28":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"54":{"tf":1.0},"57":{"tf":4.242640687119285},"60":{"tf":2.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"27":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":1,"docs":{"61":{"tf":1.4142135623730951}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":12,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":20,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":3.3166247903554},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":2.8284271247461903},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":4.47213595499958},"8":{"tf":4.242640687119285}},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":4,"docs":{"3":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":3.1622776601683795}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":3.3166247903554}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":25,"docs":{"3":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0}}}}}},"i":{"c":{"df":15,"docs":{"0":{"tf":1.0},"10":{"tf":2.8284271247461903},"12":{"tf":2.449489742783178},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"32":{"tf":2.6457513110645907},"33":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"6":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":2.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":4,"docs":{"34":{"tf":2.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":1.0},"8":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"o":{"c":{"df":2,"docs":{"3":{"tf":1.0},"49":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"50":{"tf":2.0}}}}}}}},"df":4,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"t":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"16":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":6,"docs":{"12":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"41":{"tf":1.0}}}},"1":{"4":{"3":{".":{".":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"2":{"3":{"8":{"0":{"3":{"a":{"c":{"5":{"0":{"df":0,"docs":{},"e":{"8":{"df":0,"docs":{},"f":{"6":{"df":0,"docs":{},"f":{"8":{"df":0,"docs":{},"e":{"6":{"2":{"6":{"9":{"5":{"d":{"1":{"c":{"df":0,"docs":{},"e":{"9":{"df":0,"docs":{},"e":{"4":{"df":0,"docs":{},"e":{"1":{"d":{"6":{"8":{"a":{"a":{"3":{"6":{"c":{"1":{"c":{"d":{"2":{"c":{"df":0,"docs":{},"f":{"d":{"1":{"5":{"3":{"4":{"0":{"2":{"1":{"3":{"df":0,"docs":{},"f":{"3":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":11,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.7320508075688772},"57":{"tf":2.6457513110645907},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":2.23606797749979}}}}}}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"36":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.4142135623730951},"45":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":9,"docs":{"16":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.0},"32":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.898979485566356},"61":{"tf":1.4142135623730951}}}}}}},"d":{"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.4142135623730951},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"0":{"tf":1.0},"51":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"8":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.1622776601683795},"60":{"tf":3.3166247903554}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"r":{"a":{"df":1,"docs":{"57":{"tf":2.8284271247461903}},"s":{"df":1,"docs":{"45":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":9,"docs":{"16":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":4.47213595499958},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"t":{"c":{"df":4,"docs":{"20":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":1,"docs":{"45":{"tf":3.605551275463989}},"u":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"11":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"44":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"24":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":2.0},"52":{"tf":1.0}}}},"s":{"df":1,"docs":{"0":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":2.0}},"e":{"d":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":4,"docs":{"57":{"tf":6.708203932499369},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"30":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"f":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"32":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"48":{"tf":2.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"q":{"df":5,"docs":{"3":{"tf":1.0},"5":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"r":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"1":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"d":{"df":3,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":2,"docs":{"26":{"tf":1.0},"44":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":3.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"16":{"tf":1.7320508075688772},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"n":{"d":{"df":6,"docs":{"12":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":2.0},"25":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}},"t":{"df":3,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0}}},"x":{"df":5,"docs":{"19":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":13,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.0},"61":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}}}},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":2.6457513110645907},"50":{"tf":2.0}}}},"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"42":{"tf":1.0},"47":{"tf":1.4142135623730951},"57":{"tf":3.1622776601683795},"60":{"tf":3.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":4.58257569495584}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178}}}}}}},"d":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":2.23606797749979}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"r":{"b":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":18,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"24":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.7320508075688772},"38":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":4.0},"49":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":2.0},"60":{"tf":7.416198487095663},"61":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":2.0}}},"s":{"df":0,"docs":{},"i":{"df":4,"docs":{"57":{"tf":3.7416573867739413},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}},"t":{"df":6,"docs":{"3":{"tf":1.7320508075688772},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"61":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":5,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":1,"docs":{"57":{"tf":2.0}}},"o":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.8284271247461903},"8":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"r":{"a":{"d":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}},"w":{"df":1,"docs":{"8":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":21,"docs":{"21":{"tf":1.7320508075688772},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"h":{"1":{"6":{"0":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"5":{"6":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"53":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"34":{"tf":1.0}},"l":{"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":2.0},"49":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"16":{"tf":2.0},"24":{"tf":1.0},"44":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"0":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"df":6,"docs":{"20":{"tf":1.0},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"k":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}}},"x":{"a":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":2.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.0},"28":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}},"i":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":2.449489742783178},"57":{"tf":2.449489742783178}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"10":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"60":{"tf":3.3166247903554},"61":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"t":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"3":{"df":0,"docs":{},"f":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":5,"docs":{"50":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":3.4641016151377544},"61":{"tf":1.0}},"g":{"df":1,"docs":{"8":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"a":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}},"l":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"31":{"tf":1.7320508075688772},"33":{"tf":4.123105625617661},"37":{"tf":2.6457513110645907},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":2.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.4641016151377544},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"29":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"55":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"61":{"tf":3.0},"8":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"v":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":4,"docs":{"0":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"x":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":2.6457513110645907}}}},"i":{"c":{"df":7,"docs":{"45":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"o":{"df":4,"docs":{"32":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"r":{"df":0,"docs":{},"m":{"df":18,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"32":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.7320508075688772},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":2.449489742783178},"60":{"tf":3.0},"61":{"tf":1.0},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"23":{"tf":2.6457513110645907},"26":{"tf":2.0},"27":{"tf":1.0},"32":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"n":{"c":{"df":2,"docs":{"50":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"53":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":4,"docs":{"16":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"34":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"c":{"df":4,"docs":{"28":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.6457513110645907},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"n":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"50":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.449489742783178},"62":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"14":{"tf":1.0},"60":{"tf":2.0}},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"o":{"df":10,"docs":{"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.449489742783178}}}},"s":{"df":0,"docs":{},"u":{"df":3,"docs":{"48":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"t":{"'":{"df":4,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":7,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":1,"docs":{"27":{"tf":1.0}}}}},"df":0,"docs":{}},"df":8,"docs":{"0":{"tf":1.0},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"34":{"tf":3.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":2.23606797749979}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"k":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}},"y":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}},"y":{"(":{"df":1,"docs":{"24":{"tf":1.0}}},"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":28,"docs":{"0":{"tf":1.0},"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":2.8284271247461903},"17":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"24":{"tf":3.872983346207417},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":5.385164807134504},"5":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"6":{"tf":2.6457513110645907},"60":{"tf":4.0},"61":{"tf":3.0},"8":{"tf":5.656854249492381}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":1.0}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":2.449489742783178}}}}}}},"s":{"df":0,"docs":{},"m":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"m":{"a":{"df":9,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"42":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":3,"docs":{"1":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}},"v":{"df":4,"docs":{"0":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"6":{"tf":1.0}}}},"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"g":{"a":{"c":{"df":0,"docs":{},"i":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":3.3166247903554},"60":{"tf":3.3166247903554}}}}}},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"t":{"'":{"df":2,"docs":{"27":{"tf":1.0},"37":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"i":{"b":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"20":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"4":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0},"7":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"37":{"tf":1.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"35":{"tf":1.0},"6":{"tf":1.0}}}}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":3.0}}}}}},"df":4,"docs":{"29":{"tf":2.0},"55":{"tf":1.4142135623730951},"57":{"tf":2.23606797749979},"60":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":2.0},"45":{"tf":3.1622776601683795},"57":{"tf":2.0}},"i":{"c":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":2.0},"49":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"60":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"g":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"45":{"tf":1.0}}},"p":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"24":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}},"s":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"t":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":1,"docs":{"41":{"tf":1.0}},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"48":{"tf":1.0},"7":{"tf":1.0}}}}},"o":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"50":{"tf":1.0}}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"6":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":10,"docs":{"0":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"54":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"34":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"3":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"32":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":2.449489742783178}}}}}},"n":{"df":0,"docs":{},"u":{"df":3,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":13,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":2.6457513110645907},"29":{"tf":3.872983346207417},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"52":{"tf":2.0},"55":{"tf":1.0},"57":{"tf":7.681145747868608},"60":{"tf":6.244997998398398},"62":{"tf":1.0},"7":{"tf":3.872983346207417},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"t":{"a":{"d":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.7320508075688772},"37":{"tf":2.0}}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"13":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":2.23606797749979},"33":{"tf":1.0},"34":{"tf":1.4142135623730951}},"e":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}},"d":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.0}}}},"df":0,"docs":{},"e":{"df":9,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.0}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"0":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":2.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"55":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":1.0}}},"i":{"df":2,"docs":{"29":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"54":{"tf":2.6457513110645907}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":2.449489742783178},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"+":{"1":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"20":{"tf":2.0},"3":{"tf":1.0},"44":{"tf":3.0},"45":{"tf":3.4641016151377544}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"44":{"tf":2.0},"45":{"tf":2.23606797749979},"49":{"tf":1.0},"57":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"42":{"tf":2.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":22,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"27":{"tf":1.0}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":2.6457513110645907},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.449489742783178},"25":{"tf":1.0},"26":{"tf":2.6457513110645907},"27":{"tf":4.242640687119285},"28":{"tf":3.0},"29":{"tf":3.1622776601683795},"3":{"tf":1.0},"33":{"tf":2.23606797749979},"37":{"tf":1.4142135623730951},"38":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":6.557438524302},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":4.898979485566356},"58":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":9.0},"61":{"tf":2.0},"62":{"tf":1.0},"7":{"tf":5.0},"8":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.0}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"32":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}}},"w":{"df":19,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"3":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.23606797749979},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.7320508075688772}}}}},"f":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":5,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"e":{"df":2,"docs":{"13":{"tf":1.0},"60":{"tf":4.58257569495584}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}},"h":{"df":2,"docs":{"40":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0}}},"df":0,"docs":{}}},"w":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"44":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":2.6457513110645907},"57":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":17,"docs":{"10":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.0},"61":{"tf":1.0}}}}}}},"l":{"d":{"df":3,"docs":{"40":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.0},"52":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"n":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":16,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"37":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}},"r":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"51":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"36":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"11":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}}}},"s":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"24":{"tf":1.0},"53":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":5,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"34":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}}}},"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"57":{"tf":3.1622776601683795},"60":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":2.0}}}}},"s":{"df":6,"docs":{"3":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":2.0},"51":{"tf":1.0},"57":{"tf":3.872983346207417},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"49":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"1":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":2.23606797749979},"62":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"57":{"tf":1.0},"7":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}},"t":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"45":{"tf":2.449489742783178}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"13":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"32":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"37":{"tf":1.4142135623730951},"38":{"tf":2.449489742783178},"42":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.0},"57":{"tf":3.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"8":{"tf":2.8284271247461903}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":3,"docs":{"22":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":11,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":2.8284271247461903},"50":{"tf":1.0},"54":{"tf":3.4641016151377544},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"60":{"tf":5.477225575051661},"61":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"34":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"'":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}},"df":12,"docs":{"0":{"tf":1.4142135623730951},"10":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"24":{"tf":1.0},"26":{"tf":2.6457513110645907},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":2.449489742783178},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":16,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"15":{"tf":1.0},"24":{"tf":3.605551275463989},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.449489742783178},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"61":{"tf":1.0},"8":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"0":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"0":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"34":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":2.0}}}}}}},"y":{"df":2,"docs":{"11":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":9,"docs":{"11":{"tf":1.0},"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.7320508075688772},"32":{"tf":1.0},"48":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":2,"docs":{"1":{"tf":1.0},"37":{"tf":1.0}}}},"/":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":37,"docs":{"0":{"tf":3.0},"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":2.6457513110645907},"13":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"30":{"tf":2.449489742783178},"31":{"tf":1.7320508075688772},"32":{"tf":3.0},"33":{"tf":1.0},"34":{"tf":4.58257569495584},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"45":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":2.23606797749979},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"7":{"tf":2.23606797749979},"8":{"tf":2.449489742783178},"9":{"tf":1.0}},"j":{"df":7,"docs":{"21":{"tf":1.0},"3":{"tf":1.0},"35":{"tf":2.23606797749979},"36":{"tf":1.7320508075688772},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"6":{"tf":1.7320508075688772}}},"{":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"58":{"tf":1.0},"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"12":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"24":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"x":{"df":5,"docs":{"16":{"tf":1.0},"38":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"61":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":4,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"60":{"tf":1.0}}}}},"s":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"20":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"26":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"59":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":6,"docs":{"45":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":2.0}},"t":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"45":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":2.23606797749979},"61":{"tf":1.0},"8":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"50":{"tf":1.0},"7":{"tf":2.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"c":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":1,"docs":{"44":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":24,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":2.449489742783178},"29":{"tf":2.6457513110645907},"33":{"tf":1.0},"34":{"tf":3.1622776601683795},"44":{"tf":2.449489742783178},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"53":{"tf":2.6457513110645907},"54":{"tf":2.6457513110645907},"55":{"tf":1.7320508075688772},"56":{"tf":2.0},"57":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"7":{"tf":2.8284271247461903}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"q":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.8284271247461903}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"w":{"df":2,"docs":{"53":{"tf":1.0},"56":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"3":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"d":{"df":13,"docs":{"1":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"i":{"df":5,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"34":{"tf":1.0},"44":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"8":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"51":{"tf":1.0},"60":{"tf":3.605551275463989}}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"v":{"df":12,"docs":{"12":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":3.0},"35":{"tf":2.0},"36":{"tf":1.0},"37":{"tf":2.23606797749979},"38":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"24":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.23606797749979},"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"d":{"df":1,"docs":{"33":{"tf":1.0}},"u":{"c":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"20":{"tf":2.0},"44":{"tf":1.0},"45":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"3":{"tf":1.0},"54":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"19":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"3":{"tf":1.0}}}},"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"8":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":5,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":6,"docs":{"0":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":3.4641016151377544},"8":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":1,"docs":{"44":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"12":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":6,"docs":{"34":{"tf":1.4142135623730951},"37":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"27":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":3.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}},"t":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"53":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"60":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"f":{"c":{"6":{"3":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"12":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}}},"n":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"54":{"tf":1.0}}}}},"p":{"c":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"32":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"52":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"v":{"1":{"4":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"42":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":14,"docs":{"20":{"tf":2.449489742783178},"27":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":3.872983346207417},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":12,"docs":{"11":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.872983346207417},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"42":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"45":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"n":{"df":12,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.6457513110645907},"54":{"tf":2.23606797749979},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"7":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"45":{"tf":3.605551275463989},"8":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.58257569495584}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":16,"docs":{"1":{"tf":2.0},"10":{"tf":2.23606797749979},"11":{"tf":1.4142135623730951},"12":{"tf":2.0},"13":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"34":{"tf":1.0},"45":{"tf":3.3166247903554},"6":{"tf":2.449489742783178},"8":{"tf":1.0},"9":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"e":{"d":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":4.358898943540674},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":4.795831523312719},"5":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.4142135623730951},"8":{"tf":4.69041575982343}}},"df":7,"docs":{"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0}},"m":{"df":1,"docs":{"48":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"n":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":2.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"f":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"d":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"34":{"tf":2.6457513110645907}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"8":{"tf":1.0}}}}},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.0}}}}}}},"t":{"df":10,"docs":{"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"52":{"tf":1.0},"57":{"tf":3.4641016151377544},"60":{"tf":4.358898943540674},"61":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"31":{"tf":1.0},"33":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"56":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"27":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"w":{"df":3,"docs":{"12":{"tf":1.0},"54":{"tf":2.0},"57":{"tf":1.7320508075688772}},"n":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":5,"docs":{"33":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"57":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":20,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.0},"34":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":3.7416573867739413},"61":{"tf":1.0}}}}}},"df":22,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":2.23606797749979},"28":{"tf":2.23606797749979},"29":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.6457513110645907},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":3.872983346207417},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":3.7416573867739413},"7":{"tf":1.0}},"e":{"d":{")":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"@":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"13":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}},"i":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}},"t":{"df":1,"docs":{"34":{"tf":1.0}},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.7320508075688772},"44":{"tf":1.0},"6":{"tf":1.0}},"e":{"'":{"df":1,"docs":{"0":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":2.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"25":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"_":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":3.0}}},"a":{"df":1,"docs":{"60":{"tf":3.4641016151377544}}},"b":{"df":1,"docs":{"60":{"tf":2.449489742783178}}},"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"2":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":10,"docs":{"27":{"tf":1.7320508075688772},"28":{"tf":4.123105625617661},"29":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":6.164414002968976},"61":{"tf":1.0},"7":{"tf":2.23606797749979}},"i":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"24":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.4142135623730951}},"i":{"df":5,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":2.0}}}}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"54":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"2":{"5":{"5":{"1":{"9":{"df":6,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"5":{"8":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"40":{"tf":1.0},"57":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":17,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":2.0},"24":{"tf":2.23606797749979},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"3":{"tf":2.0},"37":{"tf":1.0},"41":{"tf":1.0},"47":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"45":{"tf":3.7416573867739413},"47":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":2.0}}},"i":{"c":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"y":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":7,"docs":{"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"1":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"0":{"tf":1.0},"20":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":18,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":3.3166247903554},"54":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.4142135623730951},"60":{"tf":2.8284271247461903}}}}},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":7,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"12":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"r":{"df":10,"docs":{"42":{"tf":1.0},"43":{"tf":1.7320508075688772},"44":{"tf":2.449489742783178},"45":{"tf":2.23606797749979},"53":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"45":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"b":{"df":1,"docs":{"44":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0},"7":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"53":{"tf":1.0}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"50":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"1":{"tf":1.0},"57":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}}}}}},"df":0,"docs":{},"h":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":2.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"32":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"47":{"tf":1.0}}},"i":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"47":{"tf":1.4142135623730951},"53":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"1":{"tf":1.0}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":7,"docs":{"2":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951}}}}}}}},"t":{":":{":":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"29":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":7,"docs":{"12":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.4142135623730951}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"k":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":12,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}}},"u":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":4.242640687119285},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":11,"docs":{"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979}}}},"p":{"df":2,"docs":{"34":{"tf":1.0},"57":{"tf":2.0}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"o":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"0":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"28":{"tf":2.23606797749979},"44":{"tf":1.0},"6":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"l":{"df":8,"docs":{"27":{"tf":1.0},"3":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"6":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"8":{"tf":1.0}}}},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":22,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":4.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"52":{"tf":2.0},"55":{"tf":2.23606797749979},"57":{"tf":6.324555320336759},"58":{"tf":1.7320508075688772},"59":{"tf":2.449489742783178},"6":{"tf":1.7320508075688772},"60":{"tf":2.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"52":{"tf":1.0}}}}}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"_":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"0":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"60":{"tf":2.0},"61":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}},"i":{"a":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":6,"docs":{"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":2.23606797749979}}}}}}},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"46":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":9,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":2.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"o":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"x":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":14,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"52":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":5.830951894845301},"60":{"tf":4.795831523312719},"61":{"tf":1.0},"8":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"u":{"1":{"6":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"8":{"df":4,"docs":{"51":{"tf":1.0},"57":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"df":2,"docs":{"28":{"tf":2.0},"29":{"tf":1.4142135623730951}},"i":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.8284271247461903}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":2.23606797749979},"47":{"tf":1.0}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"t":{"df":5,"docs":{"28":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":12,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}}}}}}},"o":{"df":4,"docs":{"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"55":{"tf":1.0},"62":{"tf":1.0}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"12":{"tf":1.7320508075688772},"20":{"tf":2.0},"27":{"tf":2.6457513110645907},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":2.23606797749979},"60":{"tf":8.888194417315589},"7":{"tf":3.1622776601683795}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"16":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.8284271247461903},"30":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"52":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":2.0}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":4,"docs":{"21":{"tf":1.0},"25":{"tf":2.23606797749979},"26":{"tf":1.7320508075688772},"3":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"50":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"22":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}},"b":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.7320508075688772},"11":{"tf":1.7320508075688772},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":3.0},"23":{"tf":1.0},"24":{"tf":3.1622776601683795},"26":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.0},"32":{"tf":2.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":3.4641016151377544},"45":{"tf":4.358898943540674},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":5.0990195135927845},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":4.69041575982343},"61":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":30,"docs":{"12":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.7320508075688772},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":4.47213595499958},"51":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.0},"6":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"f":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}}},"v":{"1":{"2":{"df":2,"docs":{"57":{"tf":2.8284271247461903},"60":{"tf":1.4142135623730951}}},"3":{"df":3,"docs":{"52":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"df":0,"docs":{}},"2":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"2":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"df":1,"docs":{"33":{"tf":1.0}}},"4":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"14":{"tf":1.4142135623730951},"30":{"tf":1.0},"35":{"tf":1.0}}},"5":{"df":1,"docs":{"25":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"'":{"df":3,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.7320508075688772}}},"df":52,"docs":{"0":{"tf":2.6457513110645907},"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":2.449489742783178},"13":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"24":{"tf":2.8284271247461903},"25":{"tf":1.7320508075688772},"26":{"tf":3.3166247903554},"27":{"tf":2.449489742783178},"28":{"tf":1.4142135623730951},"29":{"tf":2.0},"3":{"tf":2.23606797749979},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"32":{"tf":3.0},"33":{"tf":1.0},"34":{"tf":2.8284271247461903},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"44":{"tf":3.3166247903554},"45":{"tf":4.0},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":2.23606797749979},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"54":{"tf":3.1622776601683795},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":5.744562646538029},"58":{"tf":1.0},"6":{"tf":4.123105625617661},"60":{"tf":7.810249675906654},"61":{"tf":2.23606797749979},"62":{"tf":2.8284271247461903},"7":{"tf":3.1622776601683795},"8":{"tf":2.449489742783178},"9":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}}}}}}},"u":{"8":{"df":3,"docs":{"57":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}},"i":{"df":9,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"60":{"tf":10.862780491200215},"7":{"tf":2.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}},"s":{"a":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.7320508075688772},"30":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"40":{"tf":1.0},"47":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":5.291502622129181},"60":{"tf":3.1622776601683795},"7":{"tf":2.23606797749979}}}}}}}},"i":{"a":{"df":3,"docs":{"27":{"tf":1.0},"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":3.1622776601683795},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"/":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"30":{"tf":1.0},"35":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.7320508075688772},"6":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"28":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772}}}},"y":{"df":11,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"b":{"c":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"34":{"tf":2.0},"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"34":{"tf":1.7320508075688772}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"16":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"57":{"tf":2.6457513110645907},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0}}}},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":3,"docs":{"6":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"s":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"40":{"tf":1.0}}},"y":{"df":0,"docs":{},"e":{"df":4,"docs":{"41":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"'":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"v":{"df":5,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"8":{"tf":1.0}}}}}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"title":{"root":{"1":{"df":1,"docs":{"32":{"tf":1.0}}},"2":{"df":1,"docs":{"33":{"tf":1.0}}},"3":{"df":1,"docs":{"34":{"tf":1.0}}},"5":{".":{"0":{".":{"0":{"df":1,"docs":{"20":{"tf":1.0}}},"1":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"14":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0}}}}}}},"df":0,"docs":{}},"d":{"d":{"df":4,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"42":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":4,"docs":{"30":{"tf":1.0},"34":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":3,"docs":{"40":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"52":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"13":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"52":{"tf":1.0},"55":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"13":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"61":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"61":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"i":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"c":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"62":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}},"q":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"47":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"33":{"tf":1.0},"37":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"o":{"df":3,"docs":{"41":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0}}}},"j":{"df":0,"docs":{},"s":{"df":2,"docs":{"30":{"tf":1.0},"34":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":3,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"8":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"49":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"48":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.0},"37":{"tf":1.0}}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"32":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":4,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"7":{"tf":1.0}}}}}}},"w":{"df":2,"docs":{"20":{"tf":1.0},"27":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"36":{"tf":1.0},"38":{"tf":1.0}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"30":{"tf":1.4142135623730951},"32":{"tf":1.0},"34":{"tf":1.4142135623730951}},"j":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"r":{"df":5,"docs":{"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":3,"docs":{"33":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"47":{"tf":1.0},"49":{"tf":1.0}}}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"47":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.0}}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"46":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"30":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"52":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":2,"docs":{"25":{"tf":1.0},"26":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":9,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.0},"43":{"tf":1.0},"62":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":20,"teaser_word_count":30},"search_options":{"bool":"AND","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":2},"title":{"boost":2}}}}); \ No newline at end of file diff --git a/searchindex.json b/searchindex.json new file mode 100644 index 0000000000..c4bc1ccb37 --- /dev/null +++ b/searchindex.json @@ -0,0 +1 @@ +{"doc_urls":["index.html#polkadot-vault---turn-your-smartphone-into-a-hardware-wallet","index.html#key-features","index.html#system-requirements","index.html#getting-started","index.html#license","about/FAQ.html#faq","about/FAQ.html#about","about/FAQ.html#networks","about/FAQ.html#seeds-and-keys","about/Security-And-Privacy.html#security-and-privacy","about/Security-And-Privacy.html#device-security","about/Security-And-Privacy.html#how-to-get-it-and-use-it","about/Security-And-Privacy.html#how-to-update-polkadot-vault-securely","about/Security-And-Privacy.html#what-data-does-it-collect","tutorials/Hierarchical-Deterministic-Key-Derivation.html#polkadot-vault-accounts-management","tutorials/Hierarchical-Deterministic-Key-Derivation.html#introduction","tutorials/Hierarchical-Deterministic-Key-Derivation.html#key-generation","tutorials/Hierarchical-Deterministic-Key-Derivation.html#references","about/Changelog.html#changelog","about/Changelog.html#501","about/Changelog.html#new-in-version-500","tutorials/SUMMARY.html#user-guides","tutorials/Start.html#starting-with-vault","tutorials/Start.html#installation","tutorials/Start.html#first-start","tutorials/Upgrading.html#upgrading-vault","tutorials/Upgrading.html#preparation-to-upgrade","tutorials/Add-New-Network.html#add-new-network","tutorials/Add-New-Network.html#add-network-specs","tutorials/Add-New-Network.html#add-network-metadata","tutorials/Kusama-tutorial.html#polkadot-vault-tutorial-with-polkadot-js-apps","tutorials/Kusama-tutorial.html#summary","tutorials/Kusama-tutorial.html#1-get-polkadot-vault-mobile-application","tutorials/Kusama-tutorial.html#2-setup-or-recover-an-identity","tutorials/Kusama-tutorial.html#3-add-polkadot-vaults-account-to-polkadot-js-apps","tutorials/Recover-Account-Polkadotjs.html#recover-account-from-polkadotjs","tutorials/Recover-Account-Polkadotjs.html#get-the-mnemonic-phrase-and-path","tutorials/Recover-Account-Polkadotjs.html#recover-identity-with-mnemonic-phrase","tutorials/Recover-Account-Polkadotjs.html#create-the-account-by-path","development/Development.html#development","development/Build.html#build","development/Build.html#ios","development/Build.html#android","development/Vault-Structure.html#vault-structure","development/Vault-Structure.html#architectural-structure","development/Vault-Structure.html#functional-structure","development/Troubleshooting.html#troubleshooting","development/Troubleshooting.html#rust-side-builds-but-app-crashes-on-start-android-or-complains-about-symbols-not-found-ios","development/Troubleshooting.html#build-for-android-fails-on-macos-build-for-ios-fails-on-linux","development/Rustdocs.html#links-to-rust-docs-of-the-apps","development/UOS.html#scope","development/UOS.html#terminology","development/UOS.html#qr-code-content-types","development/UOS.html#qr-code-structure","development/UOS.html#multiframe-qr","development/UOS.html#informative-content-of-qr-code","development/UOS.html#shared-qr-code-processing-sequence","development/UOS.html#transaction","development/UOS.html#message","development/UOS.html#bulk-transactions","development/UOS.html#update","development/UOS.html#derivations-import-payload-code-de","development/Ecosystem.html#vault-ecosystem"],"index":{"documentStore":{"docInfo":{"0":{"body":108,"breadcrumbs":8,"title":6},"1":{"body":60,"breadcrumbs":4,"title":2},"10":{"body":82,"breadcrumbs":6,"title":2},"11":{"body":75,"breadcrumbs":5,"title":1},"12":{"body":137,"breadcrumbs":8,"title":4},"13":{"body":20,"breadcrumbs":6,"title":2},"14":{"body":25,"breadcrumbs":10,"title":4},"15":{"body":30,"breadcrumbs":7,"title":1},"16":{"body":172,"breadcrumbs":8,"title":2},"17":{"body":3,"breadcrumbs":7,"title":1},"18":{"body":0,"breadcrumbs":4,"title":1},"19":{"body":5,"breadcrumbs":4,"title":1},"2":{"body":8,"breadcrumbs":4,"title":2},"20":{"body":233,"breadcrumbs":6,"title":3},"21":{"body":10,"breadcrumbs":4,"title":2},"22":{"body":9,"breadcrumbs":5,"title":2},"23":{"body":140,"breadcrumbs":4,"title":1},"24":{"body":252,"breadcrumbs":5,"title":2},"25":{"body":20,"breadcrumbs":5,"title":2},"26":{"body":215,"breadcrumbs":5,"title":2},"27":{"body":125,"breadcrumbs":8,"title":3},"28":{"body":179,"breadcrumbs":8,"title":3},"29":{"body":169,"breadcrumbs":8,"title":3},"3":{"body":96,"breadcrumbs":4,"title":2},"30":{"body":34,"breadcrumbs":10,"title":6},"31":{"body":26,"breadcrumbs":5,"title":1},"32":{"body":111,"breadcrumbs":9,"title":5},"33":{"body":194,"breadcrumbs":8,"title":4},"34":{"body":272,"breadcrumbs":12,"title":8},"35":{"body":26,"breadcrumbs":8,"title":3},"36":{"body":28,"breadcrumbs":8,"title":3},"37":{"body":43,"breadcrumbs":9,"title":4},"38":{"body":47,"breadcrumbs":8,"title":3},"39":{"body":0,"breadcrumbs":2,"title":1},"4":{"body":5,"breadcrumbs":3,"title":1},"40":{"body":26,"breadcrumbs":3,"title":1},"41":{"body":59,"breadcrumbs":3,"title":1},"42":{"body":91,"breadcrumbs":3,"title":1},"43":{"body":0,"breadcrumbs":5,"title":2},"44":{"body":533,"breadcrumbs":5,"title":2},"45":{"body":1607,"breadcrumbs":5,"title":2},"46":{"body":0,"breadcrumbs":3,"title":1},"47":{"body":14,"breadcrumbs":13,"title":11},"48":{"body":9,"breadcrumbs":10,"title":8},"49":{"body":11,"breadcrumbs":7,"title":4},"5":{"body":3,"breadcrumbs":4,"title":1},"50":{"body":55,"breadcrumbs":5,"title":1},"51":{"body":38,"breadcrumbs":5,"title":1},"52":{"body":49,"breadcrumbs":8,"title":4},"53":{"body":57,"breadcrumbs":7,"title":3},"54":{"body":318,"breadcrumbs":6,"title":2},"55":{"body":111,"breadcrumbs":8,"title":4},"56":{"body":46,"breadcrumbs":9,"title":5},"57":{"body":1464,"breadcrumbs":5,"title":1},"58":{"body":60,"breadcrumbs":5,"title":1},"59":{"body":29,"breadcrumbs":6,"title":2},"6":{"body":260,"breadcrumbs":3,"title":0},"60":{"body":1683,"breadcrumbs":5,"title":1},"61":{"body":125,"breadcrumbs":9,"title":5},"62":{"body":48,"breadcrumbs":5,"title":2},"7":{"body":212,"breadcrumbs":4,"title":1},"8":{"body":255,"breadcrumbs":5,"title":2},"9":{"body":0,"breadcrumbs":6,"title":2}},"docs":{"0":{"body":"Polkadot Vault Polkadot Vault is a mobile application that allows any smartphone to act as an air-gapped crypto wallet. This is also known as \"cold storage\". You can create accounts in Substrate-based networks, sign messages/transactions, and transfer funds to and from these accounts without any sort of connectivity enabled on the device. You must turn off or even physically remove the smartphone's Wifi, Mobile Network, and Bluetooth to ensure that the mobile phone containing these accounts will not be exposed to any online threat. Switching to airplane mode suffices in many cases. Disabling the mobile phone's networking abilities is a requirement for the app to be used as intended, check our wiki for more details. Have a look at the tutorial on our wiki to learn how to use Polkadot Vault together with Polkadot-js app . Any data transfer from or to the app happens using QR code. By doing so, the most sensitive piece of information, the private keys, will never leave the phone. The Polkadot Vault mobile app can be used to store any Substrate account, this includes Polkadot (DOT) and Kusama (KSM) networks.","breadcrumbs":"About Polkadot Vault » Polkadot Vault - Turn your smartphone into a hardware wallet","id":"0","title":"Polkadot Vault - Turn your smartphone into a hardware wallet"},"1":{"body":"This is not a complete crypto wallet in itself. The Vault does not sync with blockchain, so it does not know your account balance, whether transactions were successful or even if the account exists! This is a cold wallet app that only stores keys, reads and signs messages. It should always be used with hot wallet like polkadot.js . The Vault alone does not make your accounts secure. You must maintain security yourself . Airgap should be only part of your security protocol, improper use of Vault could still lead to loss of funds and/or secrets. When properly used, Vault provides best achievable security with Substrate networks to-date.","breadcrumbs":"About Polkadot Vault » Key features","id":"1","title":"Key features"},"10":{"body":"Polkadot Vault is built to be used offline. The mobile device used to run the app will hold important information that needs to be kept securely stored. It is therefore advised to: Get a separate mobile device. Make a factory reset. Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices). Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords. Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device. Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » Device security","id":"10","title":"Device security"},"11":{"body":"Install the app The app is available in beta for Android and iOS : Android Play store iOS app store Signed APK from GitHub Please double check carefully the origin of the app, and make sure that the company distributing it is Parity Technologies . Usual security advice apply to this air-gapped wallet: When creating an account using Polkadot Vault Mobile app, make sure to write down the recovery phrase and store it in safe places. Always double check the information of the transactions you are about to sign or send. Make sure to first transfer a small amount of Ether with the app and verify that everything is working as expected before transferring larger amounts of Ether.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » How to get it and use it?","id":"11","title":"How to get it and use it?"},"12":{"body":"Once Polkadot Vault is installed, your device should never go online. This would put your private keys at threat. To update, you will need to : Make sure you possess the recovery phrase for each of your accounts. You can find it on Polkadot Vault by : v4.0 choosing an identity > click the user icon at the top right > “Show Recovery Phrase” v2.2 tapping an account > 3 dots menu at the top right > “Backup Recovery Phrase” v2.0 tapping an account > tap on the account address > “Backup Recovery Phrase” Factory reset the device. Enable full-disk encryption on the device and set a strong password (might not be on by default, for example for older Android devices). Do not use any kind of biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords. Install Polkadot Vault from the Apple store or Android store or download the APK from Polkadot Vault's Github repository (make sure you are on the right website and verify the checksum) Once the app has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth, and any other connection ability the device has. Only charge the phone on a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers. Recover your accounts.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » How to update Polkadot Vault securely","id":"12","title":"How to update Polkadot Vault securely"},"13":{"body":"None, it's as simple as that. The Polkadot Vault Mobile Android and iOS apps do not send any sort of data to Parity Technologies or any partner and work completely offline once installed.","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » What data does it collect?","id":"13","title":"What data does it collect?"},"14":{"body":"Polkadot Vault v4 has introduced the Hierarchical Deterministic Key Derivation (HDKD) feature for Substrate networks. This article explains how to use this feature. Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » Polkadot Vault Accounts Management","id":"14","title":"Polkadot Vault Accounts Management"},"15":{"body":"Seed is the starting point for generating accounts. The seed itself does not have any network affiliation. For Substrate networks, generating a new accounts means entering a derivation path and choosing a network. With this feature, you can manage as many accounts as needed with just one seed phrase safely stored.","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » Introduction","id":"15","title":"Introduction"},"16":{"body":"Create an account for a Substrate based network. Key generation also refers to accounts creation, with your created Identity: Go to key manager and create a new seed or select an existing one Choose a network Tap on any key Tap Derive or N+1 Button In path derivation screen, input any path and name you like (or accept naming suggestion) (optional) type password Tap Derive Button Done, you can start using new address. The form of path Paths also refer to the chain codes which described in , though it is different from BIP-32 style: Soft derivation starts with a single slash, like: /soft Hard derivation starts with a double slash, like: //hard Users are able to create any combination of hard derivation with // and/or soft derivation with /. The encoded string are limited to 32 Bytes. For technical information about the soft and hard derivations on Substrate, please refer to introduction here . Path also could contain optional password ; in Subkey standard password is prefixed with ///. However, for convenience, Vault device has separate password entry field with password confirmation, thus do not add /// to derivation field, it will result in error - instead omit /// and type password into its' special field. It will not be stored on the device and will be required for any operation that requires private key of the account. There is no way to restore this password if it is lost so please back it up carefully. Further notes With the same BIP32 seed users could create keys under different networks. Each derived account is bound to certain networks, which prevents it to be misused in another network until it is explicitly added for that network as well. Root account is available for all networks by default.","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » Key Generation","id":"16","title":"Key Generation"},"17":{"body":"https://github.com/w3f/schnorrkel https://wiki.polkadot.network/docs/en/learn-keys","breadcrumbs":"About Polkadot Vault » Hierarchical-Deterministic-Key-Derivation » References:","id":"17","title":"References:"},"18":{"body":"","breadcrumbs":"About Polkadot Vault » Changelog » Changelog","id":"18","title":"Changelog"},"19":{"body":"Android version release, minor fixes","breadcrumbs":"About Polkadot Vault » Changelog » 5.0.1","id":"19","title":"5.0.1"},"2":{"body":"Currently Vault is available only for iOS. Android version is coming soon.","breadcrumbs":"About Polkadot Vault » System requirements","id":"2","title":"System requirements"},"20":{"body":"Architecture No more typescript or react native. Backend is completely in Rust, frontend is in native. Building Dependencies Number of dependencies was greatly reduced; no npm/yarn/nodejs/cocoapods, etc. All dependencies are handled by: Cargo (rust packages) Xcode (only default iOS frameworks are used) Gradle Rust backend Rust libraries were moved back into the repository. Crypto functions are imported from Substrate. All logic and most of storage is written in Rust. An important hack here is that rust/signer crate has 2 versions of Cargo.toml for android and iOS architectures, as target library features could not be adjusted by normal means. Native frontend Frontend for both iOS and Android re-written in native frameworks. Thus, standard out-of-the-box build scripts could be used for building once Rust libraries are built and linked Features Secure seed storage Secrets are stored in devices' encrypted storage and some effort is made to prevent them leaking in system memory. Thus, all is as safe as the phone is - the same credentials used for unlocking the phone are used to unlock seeds. User is responsible to keep them adequate. Transaction preview Transactions content is shown before signing; no hash signing is allowed, but signing messages is possible. History feature The Vault now logs all operations it performs. It it important to remember that this is not log of account operations, but log of device history. This history could be cleared if needed, but not modified by other means. Detected presence of network connection is also logged. N+1 derivation Much requested feature that makes Vault automatically increment numbered seeds on creation. Network and metadata updates All network data updates now could be performed through scanning QR codes. Whenever some update is needed, most probably you should just scan some QR video. Don't worry about skipped frames, it's fountain code so you only need enough frames. All updates could be signed, and signing key will be trusted on first use, so Vault device should be linked to single source of authority on correct metadata. Key re-use in different networks Keys could be used only in one network. Need to re-use key in another network? Just create key with the same derivation path in that network to allow re-use and it will work.","breadcrumbs":"About Polkadot Vault » Changelog » New in version 5.0.0","id":"20","title":"New in version 5.0.0"},"21":{"body":"Start Upgrading Add New Network Kusama tutorial Recover Account-Polkadotjs","breadcrumbs":"User Guides » User Guides","id":"21","title":"User Guides"},"22":{"body":"This is suggested usage pattern; you should adjust it to your security protocol if you are certain you know what you are doing.","breadcrumbs":"User Guides » Start » Starting with Vault","id":"22","title":"Starting with Vault"},"23":{"body":"Factory reset the phone The Vault should be installed in most secure environment possible. To achieve that, the phone should be reset to factory state. Wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor. Set up phone Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons). Install Vault Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet! Disable network Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app!","breadcrumbs":"User Guides » Start » Installation","id":"23","title":"Installation"},"24":{"body":"When you first launch Vault, it prompts you to read and accept terms and conditions and privacy policy. Once that is done, the database is pre-populated with built-in networks and Vault is ready for use. It could import network data or read transactions , but to sign anything you need to create keys. Create keys Open key manager by tapping bottom left symbol. On fresh start you will be prompted to create seed (otherwise you could always create more seeds by tapping New seed button in Key Manager). Enter any convenient seed name (it does not matter anything and is not used anywhere except for this particulat Vault device) and - if you would like to use custom seed phrase - switch to recovery mode and type the seed phrase. Custom seed phrase should be used only to recover or import existing key(s), do not input custom seed phrase unless it is properly random! Security of your accounts relies on randomness of seed phrase . If you are generating new seed phrase, use built-in random generator and do not input a custom seed phrase. Once you click create button, you will be prompted to authenticate yourself. This will happen every time cruptographic engine of the phone is used to handle seeds - on all creations, backups, derivations and signatures and in some OS versions on starting the Vault. You will see the created secret seed. Please back it up on paper and store it in safe place. If you lose your Vault device or it will become non-functional, you will be able to recover your keys using this seed phrase. Anyone could recover your keys with knowledge of this phrase. If you lose this seed phrase, though, it will be impossible to recover your keys . You can check the seed phrase anytime in Settings menu, but make sure that it is backed up at all times. Once you dismiss seed phrase backup screen, the seed and some associated keys will be created. For every network known to the Vault, a network root derivation key will be generated, hard-derived from seed phrase with network name. A root key will be generated and made available in all networks. Do not use the root key unless you know what you do! . To learn more on key generation, read subkey specifications that Vault follows tightly and Vault key management . Export public key Once you have a keypair you would like to use, you should first export it to hot wallet. Tap the key and select Export button. You will see the export QR code you can use with hot wallet. Details on signing with Pokadot.js Apps","breadcrumbs":"User Guides » Start » First start","id":"24","title":"First start"},"25":{"body":"First of all, you need to be certain you want to upgrade Vault. Starting from v5, all network information could be downloaded through QR codes and upgrades are needed only to add new software features.","breadcrumbs":"User Guides » Upgrading » Upgrading Vault","id":"25","title":"Upgrading Vault"},"26":{"body":"Back up your keys Make sure your keys are backed up - you should have all seed phrases and derivations recorded somewhere. Once you proceed to the next step, there is no way to recover lost information. Make sure to back up all keys for all networks you use. Ideally you should already have some kind of backup, make sure it is up to date. Wipe Vault device Once you are certain that you have backed up everything, open settings, select Wipe all data button and confirm your action. All data in the Vault will be factory reset; congratulations! Factory reset the phone When the Vault is removed, wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor. Set up phone Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons) Install Vault Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet! Disable network Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app! Start the Vault Start the app. Read and accept information provided on launch. Congratulations! The app is ready to use now, however it does not have any keys and only few basic built-in networks. Proceed with setting up keys and adding new networks .","breadcrumbs":"User Guides » Upgrading » Preparation to upgrade","id":"26","title":"Preparation to upgrade"},"27":{"body":"Polkadot Vault supports adding any substrate-based networks or updating an existing network via QR code. After you've installed required software , you need to add Network's Specs to Vault and add Network Metadata for this network, so that Vault is able to decode, and you could read and verify transactions you are signing on this network. If you need to update metadata for already existing network you only need to update Network Metadata . Off-the-shelf Vault comes with networks that you can update by scanning a multipart QR codes that contain recent metadata for these networks at Metadata Update Portal . Network Specs Get Sign Feed into Vault Network Metadata Get Sign Feed into Vault Prerequisites Network details RPC endpoint (websocket URL) Hint: You can RPC endpoints for some of the public networks e.g. in polkadot-js/apps repository Encryption algorithm rust a clone of parity-signer repository subkey Dedicated keypair specifically for signing updates Please make sure you have a backup and Public key (hex) of this keypair. You will be able to update a network only with metadata that is signed with the same keypair as network specs. You can generate it with any tool of your choice, e.g with subkey : subkey generate. Let's get started!","breadcrumbs":"User Guides » Add New Network » Add New Network","id":"27","title":"Add New Network"},"28":{"body":"Get Network Specs In parity-signer/rust/generate_message cargo run add-specs -u --encryption // e.g.\ncargo run add-specs -u wss://statemint-rpc.polkadot.io --encryption sr25519 For networks supporting several tokens: cargo run add-specs -d -u --encryption --token-decimals --token-unit // e.g.\ncargo run add-specs -d -u wss://karura-rpc-0.aca-api.network --encryption sr25519 --token-decimals 12 --token-unit KAR Now your is in parity-signer/rust/files/for_signing. Hint: you can read more about interface with hot database if you want to maintain it. Sign Network Spec Get signature In parity-signer/rust/files/for_signing cat | subkey sign --suri // e.g.\ncat sign_me_add_specs_statemint_sr25519 | subkey sign --suri \"bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice\" This will return a you need to make a signed QR. Make signed QR In parity-signer/rust/generate_message cargo run --release make --goal qr --crypto --msg add-specs --payload --verifier-hex --signature-hex // e.g.\ncargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemint_sr25519 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex fa3ed5e1156d3d51349cd9bb4257387d8e32d49861c0952eaff1c2d982332e13afa8856bb6dfc684263aa3570499e067d4d78ea2dfa7a9b85e8ea273d3a81a86 Now your is in parity-signer/rust/files/signed Feed Network Specs into Vault In Vault open scanner, scan your and approve chain specs.","breadcrumbs":"User Guides » Add New Network » Add Network Specs","id":"28","title":"Add Network Specs"},"29":{"body":"Get Network Metadata In parity-signer/rust/generate_message cargo run load-metadata -d -u `` // e.g.\ncargo run load-metadata -d -u wss://statemint-rpc.polkadot.io This will fetch fresh , update the database with it, and - most relevant to us currently - generate file with message body in parity-signer/rust/files/for_signing. Sign Network Metadata Get Signature In parity-signer/rust/files/for_signing cat | subkey sign --suri // e.g.\ncat sign_me_load_metadata_statemintV800 | subkey sign --suri \"bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice\" Make signed QR In parity-signer/rust/generate_message cargo run --release make --goal qr --crypto --msg load-metadata --payload --verifier-hex --signature-hex // e.g.\ncargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load-metadata_statemintV800 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex 6a8f8dab854bec99bd8534102a964a4e71f4370683e7ff116c84d7e8d5cb344efd3b90d27059b7c8058f5c4a5230b792009c351a16c007237921bcae2ede2d84 This QR might take some time to be generated. After it is finished you can find your in parity-signer/rust/files/signed. It is a multipart QR-\"movie\", if your image viewer does not render it correctly, we suggest to open it in a browser. Feed Network Metadata into Vault In Vault open scanner, scan your and accept new metadata. Congratulations! You've fetched network specs, signed them, fed them into Vault, fetched recent metadata for the network, signed and fed it into Vault as well. Now you are ready to safely sign transactions on this network.","breadcrumbs":"User Guides » Add New Network » Add Network Metadata","id":"29","title":"Add Network Metadata"},"3":{"body":"These tutorials and docs are heavily outdated at the moment, please use them as references or help improving If you are upgrading from older version of Vault, please see changelog and upgrading Vault Please note that the Vault app is an advanced tool designed for maximum security and complex features. In many use cases, more user-friendly tools would be sufficient. Getting started guide User Guides Start Upgrading Add New Network Kusama-tutorial Recover-Account-Polkadotjs About About Polkadot Vault FAQ Security-And-Privacy Hierarchical-Deterministic-Key-Derivation Legacy versions Older versions of this app could be useful for development, however, they are not safe for use in production. They are available at following branches: Last public release with React Native Non-ascii characters fix and some transaction parsing Metadata types import and message parsing in RN Rust backend with RN frontend","breadcrumbs":"About Polkadot Vault » Getting Started","id":"3","title":"Getting Started"},"30":{"body":"This tutorial will walk you through setting up a Kusama account with the Polkadot Vault Android or iOS App and then use this account together with Polkadot-js apps to see your balance and transfer funds or perform any extrinsic from this account. Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.","breadcrumbs":"User Guides » Kusama-tutorial » Polkadot Vault tutorial with Polkadot-js apps","id":"30","title":"Polkadot Vault tutorial with Polkadot-js apps"},"31":{"body":"1. Get Polkadot Vault mobile application 2. Setup or recover an identity Create an identity Recover an identity with your recovery phrase 3. Add Polkadot Vault's account to Polkadot-js apps 4. Sign a transaction","breadcrumbs":"User Guides » Kusama-tutorial » Summary","id":"31","title":"Summary"},"32":{"body":"Device security Polkadot Vault is meant to be used offline. The mobile device used to run Polkadot Vault will hold valuable information that needs to be kept securely stored. It is therefore advised to: Get a Polkadot Vault dedicated mobile device. Make a factory reset. Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices). Do not use any biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords. Once Polkadot Vault has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device. Only charge the phone using a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers. Please find more info here about the Polkadot Vault application. Install Polkadot Vault mobile application Install Polkadot Vault making sure that it originated from Parity Technologies Android iOS","breadcrumbs":"User Guides » Kusama-tutorial » 1. Get Polkadot Vault mobile application","id":"32","title":"1. Get Polkadot Vault mobile application"},"33":{"body":"When launching the app for the first time, no identity has been set up yet. At this stage, you will either want to create an identity directly from your mobile device or recover an identity previously created. Create an identity Tap on the Create button, and give a name to this identity. In the next step, your recovery phrase will be presented to you. Think of it as a master key. If you lose it, you lose your money. Write this recovery phrase down and store it in a safe place . If your phone gets stolen/broken/forgotten this will be the only way to recover your account . You will then be asked to choose a pin code. This pin will be needed later on to unlock your account to manage the identity or sign a transaction. The next screen will allow you to select a network to generate an account. If you choose an Ethereum network, the related Ethereum account will be generated for the identity, If you choose a Substrate network (like Kusama), you will first create a root account, and then you will be able to derive more accounts with specified paths and names. The name can be changed later on, but once the path is set, it can not be changed. More information about path derivation see here . For each derived account, you will be able to see the address and its related QR code. create account Recover an identity with your recovery phrase If you already have an account created with either Polkadot Vault or any other wallet, you can recover it by doing so: Tap on the top right side user icon, and choose + Add Identity. Input the new identity name and tap the Recover Identity button. Type in the recovery phrase, word suggestion helps you prevent any typo. The field will turn red if the recovery phrase is not a bip39. Tap Recover Identity. Select a PIN number and confirm it by typing it again. Identity generated, now you can select the network to create the first account. NOTICE: For V3 user, after recovering the seed phrase of Kusama account, the account will appear as an identity root account aside with identity name in the network selection screen.","breadcrumbs":"User Guides » Kusama-tutorial » 2. Setup or recover an Identity","id":"33","title":"2. Setup or recover an Identity"},"34":{"body":"To be able to follow this tutorial and interact with the Blockchain from a freshly created account on Polkadot Vault, you will need to get some KSMs on this account first. Polkadot-js apps allows you to manage your Vault account seamlessly. Visit Polkadot-js apps website. Go to Accounts from the left sidebar. Click on Add via QR button in the top right-hand corner. It will ask for the webcam permission for you to scan the Polkadot Vault's account QR code, accept it. On Polkadot Vault, choose on the account you want to copy the address of. Scan the QR code displayed on your phone with your computer's webcam. Make sure the QR code is fully displayed on your mobile's screen. You can now name this account on Polkadot-js apps. 4. Sign a transaction Assuming that your Polkadot Vault account now has funds, you will be able to send some funds securely to anyone, without transferring your private key, and without needing any internet connection on your mobile phone. On Polkadot-js apps, click on the send button next to your account. On Polkadot-js apps, enter the address of the account you want to send funds to. Make sure to try with a small amount of money first before sending larger amounts. Click on Make Transfer Review the transaction, you can add tip to this transaction. Click on Scan via QR Code when you're done. Polkadot Vault Polkadot send transaction You will now be presented with a QR code that represents the transaction. Since this transaction is sending funds from your Polkadot Vault mobile app account, only this account (sitting on your phone) can sign and authorize this transaction. This is what we'll do in the next steps: From the Polkadot Vault account overview, tap the scan button on the top right and scan the QR code presented by the Polkadot-js apps website. Review the transaction addresses and the amount to send on your phone. The amount and addresses must match what you've entered in apps. If you got phished, this is where you can realize it and reject the transaction. Once you're sure, scroll down and click Sign Transaction to enter your pin and get the QR code of the scanned transaction. Sign Polkadot apps transaction Your phone has now signed the transaction offline using your Polkadot Vault account private key. The QR code that is now displayed on your phone represents a signed transaction that can be broadcasted. We will do this in the next steps: On Polkadot-js apps, click on Scan Signature QR, this will ask to turn on your webcam again. Face your phone's display to your webcam for the website to be able to read the signed transaction. Your transaction is sent automatically. Congrats you just sent funds from an air-gapped account :)","breadcrumbs":"User Guides » Kusama-tutorial » 3. Add Polkadot Vault's account to Polkadot-js apps","id":"34","title":"3. Add Polkadot Vault's account to Polkadot-js apps"},"35":{"body":"The default behavior on Polkadot Vault and PolkadotJS Apps is a little different. This tutorial will walk you through recovering an account on Polkadot Vault from PolkadotJS Apps. Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » Recover Account from PolkadotJS","id":"35","title":"Recover Account from PolkadotJS"},"36":{"body":"When creating an account on PolkadotJS, it will give you a mnemonic phrase on the beginning without any key derivation. You can change it if you click Advanced creation options button, here you can specify any path you like, leave it as an empty string if you do not want changes. Create Account on PolkadotJS Apps","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » Get the mnemonic phrase and path","id":"36","title":"Get the mnemonic phrase and path"},"37":{"body":"On Polkadot Vault, each mnemonic phrase represents an identity, every account starts with an identity, and identity could derive infinite accounts from it. So firstly let's recover the identity from the mnemonic phrase. recover the identity . After tapping one network from the list, you will have the default account created for this network with a default path (as on the above image, //polkadot), but this one is different from the one created from Polkadot.js Apps , because the paths are different.","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » Recover identity with mnemonic phrase","id":"37","title":"Recover identity with mnemonic phrase"},"38":{"body":"On Polkadot Vault, accounts are grouped by different networks, and the accounts generated by the default way are always prefixed with the network name. For example, //polkadot//fund or //polkadot//staking. So to recover an account with an arbitrary path, we need tap Add Network Account -> Create Custom Path. Recover Account Here We can input the path from PolkadotJS Apps, if you do not have a specific path, then just leave it empty. And then after we choose the network, we will have the same account as we created from PolkadotJS Apps.","breadcrumbs":"User Guides » Recover-Account-Polkadotjs » create the account by path","id":"38","title":"create the account by path"},"39":{"body":"","breadcrumbs":"Development » Development","id":"39","title":"Development"},"4":{"body":"Polkadot-Vault is GPL 3.0 licensed .","breadcrumbs":"About Polkadot Vault » License","id":"4","title":"License"},"40":{"body":"First and foremost, make sure you have the latest Rust installed in your system. Nothing will work without Rust. If you get errors like cargo: feature X is required, it most likely means you have an old version of Rust. Update it by running rustup update stable.","breadcrumbs":"Development » Build » Build","id":"40","title":"Build"},"41":{"body":"1. You probably already have Xcode installed if you are reading this. If not, go get it. 2. Compile the core Rust library first: cd scripts && ./build.sh ios 3. Open the NativeSigner.xcodeproj project from the ios folder in your Xcode and click Run (Cmd+R). 4. The first time you start the app, you will need to put your device into Airplane Mode. In the iOS simulator, you can do this by turning off WiFi on your Mac (yes, this is an official apple-recommended way). However, we strongly recommend that you use a real device for development, as some important parts (e.g. camera) may not work in the simulator.","breadcrumbs":"Development » Build » iOS","id":"41","title":"iOS"},"42":{"body":"1. Download Android Studio . 2. Open the project from the android directory. 3. Install NDK. Go to File -> Project Structure -> SDK Location. Next to the \"Android NDK location\" section, click \"Download Android NDK\" button. We highly recommend you to update all existing plugins and SDK's for Kotlin, Gradle, etc even if you just downloaded a fresh Android Studio. It's always a good idea to restart Android Studio after that. This can save you many hours on Stackoverflow trying to fix random errors like \"NDK not found\". 4. Connect your device or create a virtual one. Open Tools -> Device Manager and create a new phone simulator with the latest Android. 5. (macOS) Specify path to python in local.properties. rust.pythonCommand=python3 6. Run the project (Ctrl+R). It should build the Rust core library automatically.","breadcrumbs":"Development » Build » Android","id":"42","title":"Android"},"43":{"body":"","breadcrumbs":"Development » Vault structure » Vault structure","id":"43","title":"Vault structure"},"44":{"body":"On top level, Vault consists of following parts: Rust backend core FFI interface Native frontend Database Rust backend There are 3 actual endpoints in rust folder: signer, which is source of library used for Vault itself; generate_message, which is used to update Vault repo with new built-in network information and to generate over-the-airgap updates; and qr_reader_pc which is a minimalistic app to parse qr codes that we had to write since there was no reasonably working alternative. Sub-folders of the rust folder: constants — constant values defined for the whole workspace. db_handling — all database-related operations for Vault and generate_message tool. Most of the business logic is contained here. defaults — built-in and test data for database definitions — objects used across the workspace are defined here files — contains test files and is used for build and update generation processes. Most contents are gitignored. generate_message — tool to generate over-the-airgap updates and maintain network info database on hot side navigator — navigation for Vault app; it is realized in rust to unify app behavior across the platforms parser - parses signable transactions. This is internal logic for transaction_parsing that is used when signable transaction is identified, but it could be used as a standalone lib for the same purpose. printing_balance — small lib to render tokens with proper units qr_reader_pc — small standalone PC app to parse QR codes in Vault ecosystem. Also is capable of parsing multiframe payloads (theoretically, in practice it is not feasible due to PC webcam low performance) qr_reader_phone — logic to parse QR payloads in Vault qrcode_rtx — multiframe erasure-encoded payload generator for signer update QR animation. qrcode_static — generation of static qr codes used all over the workspace signer — FFI interface crate to generate bindings that bridge native code and rust backend transaction_parsing — high-level parser for all QR payloads sent into Vault transaction_signing — all operations that could be performed when user accepts payload parsed with transaction_parsing FFI interface For interfacing rust code and native interface we use uniffi framework. It is a framework intended to aid building cross-platform software in Rust especially for the cases of re-using components written in Rust in the smartphone application development contexts. Other than Vault itself one of the most notable users of the uniffi framework are the Mozilla Application Services uniffi framework provides a way for the developer to define a clear and a typesafe FFI interface between components written in Rust and languages such as Kotlin and Swift. This approach leads to a much more robust architecture than implementing a homegrown FFI with, say, passing JSON-serialized data back and forth between Kotlin and Rust code. Here is why. Suppose the application needs to pass a following structure through FFI from Kotlin to Rust or back: #[derive(Serialize, Deserialize)] struct Address { street:String, city: String, } This would mean that on the Kotlin side of the FFI there would have to be some way of turning this type from JSON into a Kotlin type. It may be some sort of scheme or even a manual JSON value-by-key data extraction. Now suppose this struct is changed by adding and removing some fields: #[derive(Serialize, Deserialize)] struct Address { country: String, city: String, index: usize, } After this change on a Rust-side the developer would have to remember to reflect these changes on the Kotlin and Swift sides and if that is not done there is a chance that it will not be caught in build-time by CI. It is quite hard to remember everything and having a guarantee that such things would be caught at compile time is much better than not having this sort of guarantee. One of the things uniffi solves is exactly this: it provides compile-time guarantees of typesafety. The other concern with the JSON serialization approach is performance. As long as small objects are transferred back and forth it is no trouble encoding them into strings. But suppose the application requires transferring bigger blobs of binary data such as png images or even some metadata files. Using JSON would force the developer to encode such blobs as Strings before passing them into FFI and decoding them back into binary blobs on the other side of the FFI. uniffi helps to avoid this also. Native frontend Native frontends are made separately for each supported platform. To keep things uniform, interfaces are made as simple as possible and as much code is written in unified Rust component, as possible. Yet, platform-specific functions, including runtime management and threading, are also accessed through native framework. The structure of native frontend follows modern (2022) reactive design pattern of View-Action-Model triad. Thus, all backend is located in data model section, along with few native business logic components. It is important to note, that native navigation is not used, as due to subtle differences in its seemingly uniform design across platforms. Navigation is instead implemented on Rust side and, as an additional advantage, is tested there at lower computational cost for CI pipelines. Database For storage of all data except secrets, a sled database is used. Choice of db was based on its lightweightness, reliability, portability. Vault database structure","breadcrumbs":"Development » Vault structure » Architectural structure","id":"44","title":"Architectural structure"},"45":{"body":"Vault has the following systems: Secure key management Signing Transaction parsing Transaction visualization Airgap data transfer Airgap updating Network detector Logging Self-signing updating capability UI These systems are located in different parts the app and some of them rely on hot-side infrastructure. The general design goal was to isolate as much as possible in easily maintainable Rust code and keep only necessary functions in native side. Currently, those include: Hardware secret storage: we rely on hardware designer's KMS in accordance with best practices Network detector: network operations are limited by OS and we try to keep network access permissions for the app to minimum while still maintaining simple breach detection Camera: currently image capture and recognition systems implementations in native environments by far surpass 3rd party ones. This might change in the future, but at least image capture will be managed by OS to maintain platform compatibility. UI: we use native frameworks and components for rendering and user interaction for best look and feel of the app. Secure key management Keypairs used in Vault are generated from secret seed phrase, derivation path and optional secret password, in accordance with specifications described in subkey manual using code imported directly from substrate codebase for best conformance. Secret seed phrase storage Secret seed phrase is stored as a string in devices original KMS. It is symmetrically encrypted with a strong key that either is stored in a hardware-protected keyring or uses biometric data (in case of legacy android devices without strongbox system). Secrets access is managed by operating system's built-in authorization interface. Authorization is required for creation of seeds, access to seeds and removal of seeds. One particular special case is addition of the first seed on iOS platform, that does not trigger authorization mechanism as the storage is empty at this moment; this is in agreement with iOS key management system design and potentially leads to a threat of attacker replacing a single key by adding it to empty device; this attack is countered by authorization on seed removal. Thus, secret seeds source of truth is KMS. To synchronize the rest of the app, list of seed identifiers is sent to backend on app startup and on all events related to changes in this list by calling update_seed_names(Vec). Random seed generator and seed recovery tools are implemented in Rust. These are the only 2 cases where seed originates not in KMS. Derivation path management The most complex part of key management is storage of derivation strings and public keys. Improper handling here may lead to user's loss of control over their assets. Key records are stored as strings in database associated with secret seed identifiers, crypto algorithm, and list of allowed networks. Public key and its cryptographic algorithm are used to deterministically generate database record key - thus by design distinct key entries directly correspond to addresses on chain. Creation of new records requires generation of public keys through derivation process, thus secret seed should be queried - so adding items to this database requires authentication. Substrate keys could be natively used across all networks supporting their crypto algorithm. This may lead to accidental re-use of keys; thus it is not forbidden by the app, but networks are isolated unless user explicitly expresses desire to enable key in given network. From user side, it is abstracted into creation of independent addresses; however, real implementation stores addresses with public keys as storage keys and thus does not distinguish between networks. To isolate networks, each key stores a field with a list of allowed networks, and when user \"creates\" address with the same pubkey as already existing one, it is just another network added to the list of networks. Keys could be imported through QR code created by generate_message tool ( instructions ). A plaintext newline-separated list of derivations should be supplied to the tool along with network identifier; the import thus is bound to certain network, however, it is not bound to any particular seed - user can select any of created seeds and, after authorization, create keys with given paths. Bulk import of password-protected keys is forbidden at the moment. Optional password Optional password (part of derivation path after ///) is never stored, only addresses that have password in their derivation path are marked. Thus, password is queried every time it is needed with a tool separate from OS authentication interface, but together with authentication screen, as password is always used with a secret seed phrase. Memory safety in secure key management All memory handles by native framework relies on native framework's memory protection mechanisms (JVM virtualization and Swift isolation and garbage collection). However, when secrets are processed in Rust, no inherent designed memory safety features are available. To prevent secrets remaining in memory after their use, zeroize library is used. Also, describe string destruction protocol or fix it Signing Every payload to be signed is first extracted from transfer payload in agreement with UOS specification and polkadot-js implementation. Only payloads that could be parsed and visualized somehow could be signed to avoid blind signing - thus on parser error no signable payload is produced and signing procedure is not initiated. When signable payload is ready, it is stored in TRANSACTION tree while user makes decision on whether to sign it. While in storage, database checksum is monitored for changes. Signing uses private key generated from KMS-protected secret seed phrase, derivation string and optional password. Signing operation itself is imported directly from substrate codebase as dependency. Signing event or its failure is logged and signature wrapped in UOS format is presented as a qr static image on the phone. Transaction parsing Transaction parsing process is described in UOS format documentation Transaction visualization Signable transaction is decomposed into hierarchical cards for clarity. All possible scale-decodable types are assigned to generalized visualization patterns (\"transaction cards\") with some types having special visualizations (balance formatted with proper decimals and units, identicons added to identities, etc.). Each card is assigned order and indent that allow the cards to be shown in a lazy view environment. Thus, any networks that have minimal metadata requirements should be decodable and visualizable. Some cards also include documentation entries fetched from metadata. Those could be expanded in UI on touch. Thus, user has opportunity to read the whole transaction before signing. Airgap data transfer Transactions are encoded in accordance to UOS standard in QR codes. QR codes can be sent into Vault - through static frames or dynamic multiframe animations - and back - only as static frames. QR codes are decoded through native image recognition system and decoded through rust backend; output QR codes are generated in png format by backend. There are 2 formats of multiframe QR codes: legacy multiframe and raptorq multiframe. Legacy multiframe format requires all frames in animation to be collected and is thus unpractical for larger payloads. RaptorQ multiframe format allows any subset of frames to be collected and thus allows large payloads to be transferred effortlessly. Fast multiframe transfer works efficiently at 30 fps. Typical large payloads contain up to 200 frames at current state of networks. This can be theoretically performed in under 10 seconds; practically this works in under 1 minute. Airgap updating Vault can download new networks and metadata updates from QR data. To prevent malicious updates from compromising security, a system of certificates is implemented. Updates could be generated by any user; they can also be distributed in signed form to delegate validity check job to trusted parties. These trusted parties should sign metadata with their asymmetric key - certificate - and they become verifiers once their update is uploaded to Vault. There are 2 tiers of certificates - \"general\" and \"custom\", with the first allowing more comfortable use of Vault at cost of only one general verifier allowed. Rules about verifier certificates are designed around simplicity of security protocol: one trusted party becomes main source of trust and updates generated by it are just accepted. If that party does not have all required updates available, other party can be added as custom verifier. That verifier is not allowed to change specs at will and suspicious activity by custom verifier would interfere with network usage thus stopping user from doing potentially harmful stuff. This allows less strenuous security policy on user side. It is important to note that certificates could not be effectively revoked considering airgapped nature of the app, thus it is recommended to keep their keys on airgapped Vault devices if updates signed by these certificates are distributed publicly. More on certificates Network detector An additional security feature is network detector. When the app is on, it runs in the background (on low-priority thread) and attempts to monitor the network availability. This detector is implemented differently on different platforms and has different features and limitations; however, it does not and could not provide full connectivity monitoring and proper maintaining of airgap is dependent on user. Vault device should always be kept in airplane mode and all other connectivity should be disabled. The basic idea of network detection alertness is that when network connectivity is detected, 3 things happen: Event is logged in history Visual indication of network status is presented to user (shield in corner of screen and message in alert activated by the shield) Certain Vault functions are disabled (user authentication, seed and key creation, etc.) - features that bring secret material into active app memory from storage When network connectivity is lost, only visual indication changes. To restore clean state of Vault, user should acknowledge safety alert by pressing on shield icon, reading and accepting the warning. Upon acknowledging, it is logged in history, visual indication changes to green and all normal Vault functions are restored. Network detector in iOS Airplane mode detection in iOS is forbidden and may lead to expulsion of the app from the App Store. Thus, detector relies on probing network interfaces. If any network interface is up, network alert is triggered. Network detector in Android Network detector is triggered directly by airplane mode change event. Bluetooth, NFC, etc, Other possible network connectivity methods are not monitored. Even though it is possible to add detectors for them, accessing their status will require the app to request corresponding permissions form OS, thus reducing app's isolation and decreasing overall security - first, by increasing chance of leak in breach event, and second, by making corrupt fake app that leaks information through network appear more normal. Furthermore, there is information that network might be connected through cable in some devices in airplane mode; there was no research on what debugging through cable is capable of for devices in airplane mode. Thus, network detector is a convenience too and should not be relied on as sole source of security; user is responsible for device isolation. Logging All events that happen in Vault are logged by backend in history tree of database. From user interface, all events are presented in chronological order on log screen. On the same screen, history checksum could be seen and custom text entries could be added to database. Checksum uses time added to history records in computation and is therefore impractical to forge. Events presented on log screen are colored to distinguish \"normal\" and \"dangerous\" events. Shown records give minimal important information about the event. On click, detailed info screen is shown, where all events happened at the same time are presented in detail (including transactions, that are decoded for review if metadata is still available). Log could also be erased for privacy; erasure event is logged and becomes the first event in recorded history. Self-signing updating capability Vault can sign network and metadata updates that could be used for other signers. User can select any update component present in Vault and any key available for any network and generate a qr code which, upon decoding, can be used by generate_message or similar tool to generate over-the-airgap update. See detailed documentation This feature was designed for elegance, but it is quite useful to maintain update signing key for large update distribution centers, for it allows to securely store secret certificate key that could not be practically revoked if compromised. UI User interface is organized through View-Action-DataModel abstraction. View Vault visual representation is abstracted in 3 visual layers placed on top of each other: screen, modal and alert. This structure is mostly an adaptation of iOS design guidelines, as android native UI is much flexible and it is easier to adopt it to iOS design patterns than vice versa. Up to one of each component could be presented simultaneously. Screen component is always present in the app, but sometimes it is fully or partially blocked by other components. Modals and alerts are dismissed on goBack action, screens have complex navigation rules. Modals require user to take action and interrupt flow. Alerts are used for short information interruptions, like error messages or confirmations. In addition to these, header bar is always present on screen and footer bar is presented in some cases. Footer bar always has same structure and only allows navigation to one of navigation roots. Top bar might contain back button, screen name, and extra menu button; status indicator is always shown on top bar. Action Almost all actions available to user are in fact handled by single operation - action() backend function, that is called through pushButton native interface. In native side, this operation is debounced by time. On rust side, actions are performed on static mutex storing app state; on blocked mutex actions is ignored, as well as impossible actions that are not allowed in current state of navigation. Thus, state of the app is protected against undefined concurrency effects by hardware button-like behavior of action(). Most actions lead to change of shown combination of screen, modal and alert; but some actions - for example, those involving keyboard input - alter contents of a UI component. In most cases, all parameters of UI components are passed as states (more or less similar concept on all platforms) and frontend framework detects updates and seamlessly performs proper rendering. Action accepts 3 parameters: action type (enum), action data (&str), secret data (&str). Secret data is used to transfer secret information and care is taken to always properly zeroize its contents; on contrary, action data could contain large strings and is optimized normally. Data model Data model as seen by native UI consists of 3 parts: secret seed content, network detection state and screen contents. Secret seed content consists of list of seed names that are used as handles to fetch secret material from secure storage. Network detection state is a 4-state variable that describes current network detection state (safe state, network is currently detected, network was detected before, error state). The rest of data model is a black box in Rust. From Rust side, model is generated by navigation crate. The state of the app is stored in lazy static State object and sufficient information required for View rendering is generated into ActionResult object that is sent into native layer on each action update.","breadcrumbs":"Development » Vault structure » Functional structure","id":"45","title":"Functional structure"},"46":{"body":"","breadcrumbs":"Development » Troubleshooting » Troubleshooting","id":"46","title":"Troubleshooting"},"47":{"body":"One common reason for this is inconsistency in uniffi version - make sure that installed version matches one stated in Cargo.toml","breadcrumbs":"Development » Troubleshooting » Rust side builds but app crashes on start (Android) or complains about symbols not found (iOS)","id":"47","title":"Rust side builds but app crashes on start (Android) or complains about symbols not found (iOS)"},"48":{"body":"This is a known issue, does not seem to be solvable at the moment. Please use 2 machines, as we do.","breadcrumbs":"Development » Troubleshooting » Build for Android fails on macOS, build for iOS fails on linux","id":"48","title":"Build for Android fails on macOS, build for iOS fails on linux"},"49":{"body":"Polkadot Vault Navigation Transaction parser Data handling logic generate message qr_reader_pc","breadcrumbs":"Development » Rust docs » Links to rust docs of the apps","id":"49","title":"Links to rust docs of the apps"},"5":{"body":"About Networks Seeds and keys","breadcrumbs":"About Polkadot Vault » FAQ » FAQ","id":"5","title":"FAQ"},"50":{"body":"This document provides an interpretation of the UOS format used by Polkadot Vault. The upstream version of the published format has diverged significantly from the actual implementation, so this document represents the current state of the UOS format that is compatible with Polkadot Vault. It only applies to networks compatible with Polkadot Vault, i.e. Substrate-based networks. The document also describes special payloads used to maintain a Polkadot Vault instance. Therefore, this document effectively describes the input and output format for QR codes used by Polkadot Vault.","breadcrumbs":"Development » Universal offline signature » Scope","id":"50","title":"Scope"},"51":{"body":"The Vault receives information over an air-gap as QR codes. These codes are read as u8 vectors and must always be parsed by the Vault before use. QR codes can contain information that a user wants to sign with one of the Vault keys, or they may contain update information to ensure smooth operation of the Vault without the need for a reset or connection to the network.","breadcrumbs":"Development » Universal offline signature » Terminology","id":"51","title":"Terminology"},"52":{"body":"Transaction/extrinsic - a single transaction that is to be signed Bulk transactions - a set of transactions that are to be signed in a single session Message - a message that is to be signed with a key Chain metadata: up-to-date metadata allows the Vault to read transactions content Chain specs: adds new network to the Vault Metadata types: is used to update older versions runtime metadata (V13 and below) Key derivations: is used to import and export Vault key paths","breadcrumbs":"Development » Universal offline signature » QR code content types","id":"52","title":"QR code content types"},"53":{"body":"QR code envelope has the following structure: QR code prefix content ending spacer padding 4 bits byte-aligned content 4 bits remainder QR code prefix always starts with 0x4 symbol indicating \"raw\" encoding. Subsequent 2 bytes encode content length. Using this number, QR code parser can instantly extract content and disregard the rest of QR code. Actual content is shifted by half-byte, otherwise it is a normal byte sequence.","breadcrumbs":"Development » Universal offline signature » QR code structure","id":"53","title":"QR code structure"},"54":{"body":"The information transferred through QR channel into Vault is always enveloped in multiframe packages (although minimal number of multiframe packages is 1). There are two standards for the multiframe: RaptorQ erasure coding and legacy non-erasure multiframe. The type of envelope is determined by the first bit of the QR code data: 0 indicates legacy multiframe, 1 indicates RaptorQ RaptorQ multipart payload RaptorQ (RFC6330) is a variable rate (fountain) erasure code protocol with reference implementation in Rust Wrapping content in RaptorQ protocol allows for arbitrary amounts of data to be transferred reliably within reasonable time. It is recommended to wrap all payloads into this type of envelope. Each QR code in RaptorQ encoded multipart payload contains following parts: bytes [0..4] bytes [4..] 0x80000000 || payload_size RaptorQ serialized packet payload_size MUST contain payload size in bytes, represented as big-endian 32-bit unsigned integer. payload_size MUST NOT exceed 7FFFFFFF payload_size MUST be identical in all codes encoding the payload payload_size and RaptorQ serialized packet MUST be stored by the Cold Vault, in no particular order, until their amount is sufficient to decode the payload. Hot Wallet MUST continuously loop through all the frames showing each frame for at least 1/30 seconds (recommended frame rate: 4 FPS). Cold Vault MUST be able to start scanning the Multipart Payload at any frame . Cold Vault MUST NOT expect the frames to come in any particular order. Cold Vault SHOULD show a progress indicator of how many frames it has successfully scanned out of the estimated minimum required amount. Hot Wallet SHOULD generate sufficient number of recovery frames (recommended overhead: 100%; minimal reasonable overhead: square root of number of packets). Payloads fitting in 1 frame SHOULD be shown without recovery frames as static image. Once sufficient number of frames is collected, they could be processed into single payload and treated as data vector (\"QR code content\"). Legacy Multipart Payload In real implementation, the Polkadot Vault ecosystem generalized all payloads as multipart messages. bytes position [0] [1..3] [3..5] [5..] content 00 frame_count frame_index data frame MUST the number of current frame, '0000' represented as big-endian 16-bit unsigned integer. frame_count MUST the total number of frames, represented as big-endian 16-bit unsigned integer. part_data MUST be stored by the Cold Vault, ordered by frame number, until all frames are scanned. Hot Wallet MUST continuously loop through all the frames showing each frame for about 2 seconds. Cold Vault MUST be able to start scanning the Multipart Payload at any frame . Cold Vault MUST NOT expect the frames to come in any particular order. Cold Vault SHOULD show a progress indicator of how many frames it has successfully scanned out of the total count. Once all frames are combined, the part_data must be concatenated into a single binary blob and treated as data vector (\"QR code content\").","breadcrumbs":"Development » Universal offline signature » Multiframe QR","id":"54","title":"Multiframe QR"},"55":{"body":"Every QR code content starts with a prelude [0x53, 0x, 0x]. 0x53 is always expected and indicates Substrate-related content. for signables indicates encryption algorithm that will be used to generate the signature: 0x00 Ed25519 0x01 Sr25519 0x02 Ecdsa for updates indicates encryption algorithm that was used to sign the update: 0x00 Ed25519 0x01 Sr25519 0x02 Ecdsa 0xff unsigned Derivations import and testing are always unsigned, with always 0xff. Vault supports following variants: 0x00 legacy mortal transaction 0x02 transaction (both mortal and immortal) 0x03 message 0x04 bulk transactions 0x80 load metadata update 0x81 load types update 0xc1 add specs update 0xde derivations import Note: old UOS specified 0x00 as mortal transaction and 0x02 as immortal one, but currently both mortal and immortal transactions from polkadot-js are 0x02.","breadcrumbs":"Development » Universal offline signature » Informative content of QR code","id":"55","title":"Informative content of QR code"},"56":{"body":"Read QR code, try interpreting it, and get the hexadecimal string from into Rust (hexadecimal string is getting changed to raw bytes soon). If QR code is not processable, nothing happens and the scanner keeps trying to catch a processable one. Analyze prelude: is it Substrate? is it a known payload type? If not, Vault always produces an error and suggests to scan supported payload. Further processing is done based on the payload type.","breadcrumbs":"Development » Universal offline signature » Shared QR code processing sequence:","id":"56","title":"Shared QR code processing sequence:"},"57":{"body":"Transaction has the following structure: preludepublic keySCALE-encoded call dataSCALE-encoded extensionsnetwork genesis hash Public key is the key that can sign the transaction. Its length depends on the declared in transaction prelude: Encryption Public key length, bytes Ed25519 32 Sr25519 32 Ecdsa 33 Call data is Vec representation of transaction content. Call data must be parsed by Vault prior to signature generation and becomes a part of signed blob. Within transaction, the call data is SCALE-encoded, i.e. effectively is prefixed with compact of its length in bytes. Extensions contain data additional to the call data, and also are part of a signed blob. Typical extensions are Era, Nonce, metadata version, etc. Extensions content and order, in principle, can vary between the networks and metadata versions. Network genesis hash determines the network in which the transaction is created. At the moment genesis hash is fixed-length 32 bytes. Thus, the transaction structure could also be represented as: preludepublic keycompact of call data lengthcall dataSCALE-encoded extensionsnetwork genesis hash Bold-marked transaction pieces are used in the blob for which the signature is produced. If the blob is short, 257 bytes or below, the signature is produced for it as is. For blobs longer than 257 bytes, 32 byte hash (blake2_256) is signed instead. This is inherited from earlier Vault versions, and is currently compatible with polkadot-js. Transaction parsing sequence Cut the QR data and get: encryption (single u8 from prelude) transaction author public key, its length matching the encryption (32 or 33 u8 immediately after the prelude) network genesis hash (32 u8 at the end) SCALE-encoded call data and SCALE-encoded extensions as a combined blob (everything that remains in between the transaction author public kay and the network genesis hash) If the data length is insufficient, Vault produces an error and suggests to load non-damaged transaction. Search the Vault database for the network specs (from the network genesis hash and encryption). If the network specs are not found, Vault shows: public key and encryption of the transaction author key error message, that suggests to add network with found genesis hash Search the Vault database for the address key (from the transaction author public key and encryption). Vault will try to interpret and display the transaction in any case. Signing will be possible only if the parsing is successful and the address key is known to Vault and is extended to the network in question. Address key not found. Signing not possible. Output shows: public key and encryption of the transaction author key call and extensions parsing result warning message, that suggests to add the address into Vault Address key is found, but it is not extended to the network used. Signing not possible. Output shows: detailed author key information (base58 representation, identicon, address details such as address being passworded etc) call and extensions parsing result warning message, that suggests extending the address into the network used Address key is found and is extended to the network used. Vault will proceed to try and interpret the call and extensions. Detailed author information will be shown regardless of the parsing outcome. The signing will be allowed only if the parsing is successful. Separate the call and extensions. Call is prefixed by its length compact, the compact is cut off, the part with length that was indicated in the compact goes into call data, the part that remains goes into extensions data. If no compact is found or the length is insufficient, Vault produces an error that call and extensions could not be separated. Get the metadata set from the Vault database, by the network name from the network specs. Metadata is used to interpret extensions and then the call itself. If there are no metadata entries for the network at all, Vault produces an error and asks to load the metadata. RuntimeMetadata versions supported by Vault are V12, V13, and V14. The crucial feature of the V14 is that the metadata contains the description of the types used in the call and extensions production. V12 and V13 are legacy versions and provide only text identifiers for the types, and in order to use them, the supplemental types information is needed. Process the extensions. Vault already knows in which network the transaction was made, but does not yet know the metadata version. Metadata version must be one of the signable extensions. At the same time, the extensions and their order are recorded in the network metadata. Thus, all metadata entries from the set are checked, from newest to oldest, in an attempt to find metadata that both decodes the extensions and has a version that matches the metadata version decoded from the extensions. If processing extensions with a single metadata entry results in an error, the next metadata entry is tried. The errors would be displayed to user only if all attempts with existing metadata have failed. Typically, the extensions are quite stable in between the metadata versions and in between the networks, however, they can be and sometimes are different. In legacy metadata (RuntimeMetadata version being V12 and V13) extensions have identifiers only, and in Vault the extensions for V12 and V13 are hardcoded as: Era era Compact(u64) nonce Compact(u128) tip u32 metadata version u32 tx version H256 genesis hash H256 block hash If the extensions could not be decoded as the standard set or not all extensions blob is used, the Vault rejects this metadata version and adds error into the error set. Metadata V14 has extensions with both identifiers and properly described types, and Vault decodes extensions as they are recorded in the metadata. For this, ExtrinsicMetadata part of the metadata RuntimeMetadataV14 is used. Vector signed_extensions in ExtrinsicMetadata is scanned twice, first for types in ty of the SignedExtensionMetadata and then for types in additional_signed of the SignedExtensionMetadata. The types, when resolved through the types database from the metadata, allow to cut correct length blobs from the whole SCALE-encoded extensions blob and decode them properly. If any of these small decodings fails, the metadata version gets rejected by the Vault and an error is added to the error set. Same happens if after all extensions are scanned, some part of extensions blob remains unused. There are some special extensions that must be treated separately. The identifier in SignedExtensionMetadata and ident segment of the type Path are used to trigger types interpretation as specially treated extensions. Each identifier is encountered twice, once for ty scan, and once for additional_signed scan. In some cases only one of those types has non-empty content, in some cases it is both. To distinguish the two, the type-associated path is used, which points to where the type is defined in Substrate code. Type-associated path has priority over the identifier. Path triggers: | Path | Type is interpreted as | | :- | :- | | Era | Era | | CheckNonce | Nonce | | ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs | Identifier triggers, are used if the path trigger was not activated: | Identifier | Type, if not empty and if there is no path trigger, is interpreted as | Note | | :- | :- | :- | | CheckSpecVersion | metadata version | gets checked with the metatada version from the metadata | | CheckTxVersion | tx version | | | CheckGenesis | network genesis hash | must match the genesis hash that was cut from the tail of the transaction | | CheckMortality | block hash | must match the genesis hash if the transaction is immortal; Era has same identifier, but is distinguished by the path | | CheckNonce | nonce | | | ChargeTransactionPayment | tip, gets displayed as balance with decimals and unit corresponding to the network specs | If the extension is not a special case, it is displayed as normal parser output and does not participate in deciding if the transaction could be signed. After all extensions are processed, the decoding must yield following extensions: exactly one Era exactly one Nonce <- this is not so currently, fix it exactly one BlockHash exactly one GenesisHash <- this is not so currently, fix it exactly one metadata version If the extension set is different, this results in Vault error for this particular metadata version, this error goes into error set. The extensions in the metadata are checked on the metadata loading step, long before any transactions are even produced. Metadata with incomplete extensions causes a warning on load_metadata update generation step, and another one when an update with such metadata gets loaded into Vault. Nevertheless, such metadata loading into Vault is allowed, as there could be other uses for metadata except signable transaction signing. Probably. If the metadata version in extensions does not match the metadata version of the metadata used, this results in Vault error for this particular metadata version, this error goes into error set. If the extensions are completely decoded, with correct set of the special extensions and the metadata version from the extensions match the metadata version of the metadata used, the extensions are considered correctly parsed, and Vault can proceed to the call decoding. If all metadata entries from the Vault database were tested and no suitable solution is found, Vault produces an error stating that all attempts to decode extensions have failed. This could be used by variety of reasons (see above), but so far the most common one observed was users having the metadata in Vault not up-to-date with the metadata on chain. Thus, the error must have a recommendation to update the metadata first. Process the call data. After the metadata with correct version is established, it is used to parse the call data itself. Each call begins with u8 pallet index, this is the decoding entry point. For V14 metadata the correct pallet is found in the set of available ones in pallets field of RuntimeMetadataV14 , by index field in corresponding PalletMetadata . The calls field of this PalletMetadata, if it is Some(_), contains PalletCallMetadata that provides the available calls enum described in types registry of the RuntimeMetadataV14. For each type in the registry, including this calls enum, encoded data size is determined, and the decoding is done according to the type. For V12 and V13 metadata the correct pallet is also found by scanning the available pallets and searching for correct pallet index. Then the call is found using the call index (second u8 of the call data). Each call has associated set of argument names and argument types, however, the argument type is just a text identifier. The type definitions are not in the metadata and transactions decoding requires supplemental types information. By default, the Vault contains types information that was constructed for Westend when Westend was still using V13 metadata and it was so far reasonably sufficient for simple transactions parsing. If the Vault does not find the type information in the database and has to decode the transaction using V12 or V13 metadata, error is produced, indicating that there are no types. Elsewise, for each encountered argument type the encoded data size is determined, and the decoding is done according to the argument type. There are types requiring special display: calls (for cases when a call contains other calls) numbers that are processed as the balances Calls in V14 parsing are distinguished by Call in ident segment of the type Path . Calls in V12 and V13 metadata are distinguished by any element of the set of calls type identifiers in string argument type. At the moment the numbers that should be displayed as balance in transactions with V14 metadata are determined by the type name type_name of the corresponding Field being: Balance T::Balance BalanceOf ExtendedBalance BalanceOf DepositBalance PalletBalanceOf Similar identifiers are used in V12 and V13, the checked value is the string argument type itself. There could be other instances when the number should be displayed as balance. However, sometimes the balance is not the balance in the units in the network specs, for example in the assets pallet. See issue #1050 and comments there for details. If no errors were encountered while parsing and all call data was used in the process, the transaction is considered parsed and is displayed to the user, either ready for signing (if all other checks have passed) or as read-only. If the user chooses to sign the transaction, the Vault produces QR code with signature, that should be read back into the hot side. As soon as the signature QR code is generated, the Vault considers the transaction signed. All signed transactions are entered in the history log, and could be seen and decoded again from the history log. Transactions not signed by the user do not go in the history log. If the key used for the transaction is passworded, user has three attempts to enter the password correctly. Each incorrect password entry is reflected in the history. In the time interval between Vault displaying the parsed transaction and the user approving it, the transaction details needed to generate the signature and history log details are temporarily stored in the database. The temporary storage gets cleared each time before and after use. Vault extracts the stored transaction data only if the database checksum stored in navigator state is same as the current checksum of the database. If the password is entered incorrectly, the database is updated with \"wrong password\" history entry, and the checksum in the state gets updated accordingly. Eventually, all transaction info can and will be moved into state itself and temporary storage will not be used. Example Alice makes transfer to Bob in Westend network. Transaction: 530102d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27da40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e Part Meaning Byte position 53 Substrate-related content 0 01 Sr25519 encryption algorithm 1 02 Transaction 2 d435..a27d [1] Alice public key 3..=34 a404..4817 [2] SCALE-encoded call data 35..=76 a4 Compact call data length, 41 35 0403..4817 [3] Call data 36..=76 04 Pallet index 4 in metadata, entry point for decoding 36 b501..3f33 [4] Extensions 77..=153 e143..423e [5] Westend genesis hash 154..=185 d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d a40403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817 0403008eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480700e8764817 b501b8003223000005000000e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33 e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e Call content is parsed using Westend metadata, in this particular case westend9010 Call part Meaning 04 Pallet index 4 (Balances) in metadata, entry point for decoding 03 Method index 3 in pallet 4 (transfer_keep_alive), search in metadata what the method contains. Here it is MultiAddress for transfer destination and Compact(u128) balance. 00 Enum variant in MultiAddress, AccountId 8eaf..6a48 [6] Associated AccountId data, Bob public key 0700e8764817 Compact(u128) balance. Amount paid: 100000000000 or, with Westend decimals and unit, 100.000000000 mWND. 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 Extensions content Extensions part Meaning b501 Era: phase 27, period 64 b8 Nonce: 46 00 Tip: 0 pWND 32230000 Metadata version: 9010 05000000 Tx version: 5 e143..423e [7] Westend genesis hash 538a..3f33 [8] Block hash e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e 538a7d7a0ac17eb6dd004578cb8e238c384a10f57c999a3fa1200409cd9b3f33","breadcrumbs":"Development » Universal offline signature » Transaction","id":"57","title":"Transaction"},"58":{"body":"Message has the following structure: prelude public key [u8] slice network genesis hash [u8] slice is represented as String if all bytes are valid UTF-8. If not all bytes are valid UTF-8, the Vault produces an error. It is critical that the message payloads are always clearly distinguishable from the transaction payloads, i.e. it is never possible to trick user to sign transaction posing as a message. Current proposal is to enable message signing only with Sr25519 encryption algorithm, with designated signing context, different from the signing context used for transactions signing.","breadcrumbs":"Development » Universal offline signature » Message","id":"58","title":"Message"},"59":{"body":"Bulk transactions is a SCALE-encoded TransactionBulk structure that consists of concatenated Vec transactions. Bulking is a way to sign multiple translations at once and reduce the number of QR codes to scan. Bulk transactions are processed in exactly the same way as single transactions.","breadcrumbs":"Development » Universal offline signature » Bulk transactions","id":"59","title":"Bulk transactions"},"6":{"body":"What is Vault? Vault is an app for an air-gapped device, it turns an offline device — usually a smartphone — into a secure hardware wallet. Vault offers you a way to securely generate, store, manage and use your blockchain credentials. Should I use Vault? Vault is optimized for the highest security requirements. If you already manage many accounts on multiple networks, Vault is great for you. If you have little experience with blockchain networks but still want good security affordances, you might find the learning curve steep. We strive to make Vault as intuitive as possible; get in touch via signer@parity.io or GitHub Issues if you can help us get there! How does an offline device communicate with the outside world? Communication happens through scanning and generating QR codes. Scanned with Vault input-QRs interact with keys stored in Vault to, generate response-QRs on behalf of those keys. Usually, input-QR is a blockchain transaction, and a response-QR is a signature for this transaction. There are tried and true cryptographic algorithms that power these QR codes, as well as some smart engineering that make your dedicated device safe to use. How do I keep my keys secure? Vault is a safe way to use your keys. However, that alone won't be enough to keep your keys secure. Devices break and get lost. This is why we always recommend backing up your seed phrases and derivation paths on paper. We are such big fans of paper backups that we even support a special tool to power your paper backup game by splitting your backups into shards called Banana Split . How do I know I am not interacting with malicious apps or actors? The Vault does not interact with a network. The app itself does not have a way to check if an app or an account you're interacting with is malicious. If you use Vault with PolkadotJS Browser Extension, PolkadotJS Apps, or Signer Component Browser Extension they will rely on a community-driven curated list of potentially less-than-honest operators: https://polkadot.js.org/phishing/# to prevent you from interacting with certain sites and addresses. However, there are no limitations on the use of Vault with other tools. I want to play with Vault to get a better feeling of how it works. Is there a way to do it without spending valuable tokens? Yes. In Vault, you should add a key for an address on Westend network and request test tokens for that address, see the step-by-step guide on Polkadot Network Wiki . You can use test tokens in the same way you would use value-bearing tokens. For example with PolkadotJS Apps you can create a transaction on behalf of your account, generate a signature with Vault and submit it to the network. All of this without keys ever leaving your offline device.","breadcrumbs":"About Polkadot Vault » FAQ » About","id":"6","title":"About"},"60":{"body":"Update has following general structure: preludeverifier public key (if signed)update payloadsignature (if signed)reserved tail Note that the verifier public key and signature parts appear only in signed uploads. Preludes [0x53, 0xff, 0x] are followed by the update payload. Every time user receives an unsigned update, the Vault displays a warning that the update is not verified. Generally, the use of unsigned updates is discouraged. For update signing it is recommended to use a dedicated key, not used for transactions. This way, if the signed data was not really the update data, but something else posing as the update data, the signature produced could not do any damage. Encryption Public key length, bytes Signature length, bytes Ed25519 32 64 Sr25519 32 64 Ecdsa 33 65 no encryption 0 0 reserved tail currently is not used and is expected to be empty. It could be used later if the multisignatures are introduced for the updates. Expecting reserved tail in update processing is done to keep code continuity in case multisignatures introduction ever happens. Because of the reserved tail, the update payload length has to be always exactly declared, so that the update payload part could be cut correctly from the update. Detailed description of the update payloads and form in which they are used in update itself and for generating update signature, could be found in Rust module definitions::qr_transfers. add_specs update payload, payload code c1 Introduces a new network to Vault, i.e. adds network specs to the Vault database. Update payload is ContentAddSpecs in to_transfer() form, i.e. double SCALE-encoded NetworkSpecsToSend (second SCALE is to have the exact payload length). Payload signature is generated for SCALE-encoded NetworkSpecsToSend. Network specs are stored in dedicated SPECSTREE tree of the Vault database. Network specs identifier is NetworkSpecsKey, a key built from encryption used by the network and the network genesis hash. There could be networks with multiple encryption algorithms supported, thus the encryption is part of the key. Some elements of the network specs could be slightly different for networks with the same genesis hash and different encryptions. There are: Invariant specs, identical between all different encryptions: name (network name as it appears in metadata) base58 prefix The reason is that the network name is and the base58 prefix can be a part of the network metadata, and the network metadata is not encryption-specific. Specs static for given encryption, that should not change over time once set: decimals unit To replace these, the user would need to remove the network and add it again, i.e. it won't be possible to do by accident. Flexible display-related and convenience specs, that can change and could be changed by simply loading new ones over the old ones: color and secondary color (both currently not used, but historically are there and may return at some point) logo path (default derivation path for network, //) title (network title as it gets displayed in the Vault) load_metadata update payload, payload code 80 Loads metadata for a network already known to Vault, i.e. for a network with network specs in the Vault database. Update payload is ContentLoadMeta in to_transfer() form, and consists of concatenated SCALE-encoded metadata Vec and network genesis hash (H256, always 32 bytes). Same blob is used to generate the signature. Network metadata is stored in dedicated METATREE tree of the Vault database. Network metadata identifier in is MetaKey, a key built from the network name and network metadata version. Metadata suitable for Vault Network metadata that can get into Vault and can be used by Vault only if it complies with following requirements: metadata vector starts with b\"meta\" prelude part of the metadata vector after b\"meta\" prelude is decodable as RuntimeMetadata RuntimeMetadata version of the metadata is V12, V13 or V14 Metadata has System pallet There is Version constant in System pallet Version is decodable as RuntimeVersion If the metadata contains base58 prefix, it must be decodable as u16 or u8 Additionally, if the metadata V14 is received, its associated extensions will be scanned and user will be warned if the extensions are incompatible with transactions signing. Also in case of the metadata V14 the type of the encoded data stored in the Version constant is also stored in the metadata types registry and in principle could be different from RuntimeVersion above. At the moment, the type of the Version is hardcoded, and any other types would not be processed and would get rejected with an error. load_types update payload, payload code 81 Load types information. Type information is needed to decode transactions made in networks with metadata RuntimeMetadata version V12 or V13. Most of the networks are already using RuntimeMetadata version V14, which has types information incorporated in the metadata itself. The load_types update is expected to become obsolete soon. Update payload is ContentLoadTypes in to_transfer(), i.e. double SCALE-encoded Vec (second SCALE is to have the exact payload length). Payload signature is generated for SCALE-encoded Vec. Types information is stored in SETTREE tree of the Vault database, under key TYPES. Verifiers Vault can accept both verified and non-verified updates, however, information once verified can not be replaced or updated by a weaker verifier without full Vault reset. A verifier could be Some(_) with corresponding public key inside or None. All verifiers for the data follow trust on first use principle. Vault uses: a single general verifier a network verifier for each of the networks introduced to the Vault General verifier information is stored in SETTREE tree of the Vault database, under key GENERALVERIFIER. General verifier is always set to a value, be it Some(_) or None. Removing the general verifier means setting it to None. If no general verifier entry is found in the database, the database is considered corrupted and the Vault must be reset. Network verifier information is stored in dedicated VERIFIERS tree of the Vault database. Network verifier identifier is VerifierKey, a key built from the network genesis hash. Same network verifier is used for network specs with any encryption algorithm and for network metadata. Network verifier could be valid or invalid. Valid network verifier could be general or custom. Verifiers installed as a result of an update are always valid. Invalid network verifier blocks the use of the network unless the Vault is reset, it appears if user marks custom verifier as no longer trusted. Updating verifier could cause some data verified by the old verifier to be removed, to avoid confusion regarding which verifier has signed the data currently stored in the database. The data removed is called \"hold\", and user receives a warning if accepting new update would cause hold data to be removed. General verifier General verifier is the strongest and the most reliable verifier known to the Vault. General verifier could sign all kinds of updates. By default the Vault uses Parity-associated key as general verifier, but users can remove it and set their own. There could be only one general verifier at any time. General verifier could be removed only by complete wipe of the Vault, through Remove general certificate button in the Settings. This will reset the Vault database to the default content and set the general verifier as None, that will be updated to the first verifier encountered by the Vault. Expected usage for this is that the user removes old general verifier and immediately afterwards loads an update from the preferred source, thus setting the general verifier to the user-preferred value. General verifier can be updated from None to Some(_) by accepting a verified update. This would result in removing \"general hold\", i.e.: all network data (network specs and metadata) for the networks for which the verifier is set to the general one types information General verifier could not be changed from Some(_) to another, different Some(_) by simply accepting updates. Note that if the general verifier is None, none of the custom verifiers could be Some(_). Similarly, if the verifier is recorded as custom in the database, its value can not be the same as the value of the general verifier. If found, those situations indicate the database corruption. Custom verifiers Custom verifiers could be used for network information that was verified, but not with the general verifier. There could be as many as needed custom verifiers at any time. Custom verifier is considered weaker than the general verifier. Custom verifier set to None could be updated to: Another custom verifier set to Some(_) General verifier Custom verifier set to Some(_) could be updated to general verifier. These verifier updates can be done by accepting an update signed by a new verifier. Any of the custom network verifier updates would result in removing \"hold\", i.e. all network specs entries (for all encryption algorithms on file) and all network metadata entries. Common update processing sequence: Cut the QR data and get: encryption used by verifier (single u8 from prelude) (only if the update is signed, i.e. the encryption is not 0xff) update verifier public key, its length matching the encryption (32 or 33 u8 immediately after the prelude) concatenated update payload, verifier signature (only if the update is signed) and reserved tail. If the data length is insufficient, Vault produces an error and suggests to load non-damaged update. Using the payload type from the prelude, determine the update payload length and cut payload from the concatenated verifier signature and reserved tail. If the data length is insufficient, Vault produces an error and suggests to load non-damaged update. (only if the update is signed, i.e. the encryption is not 0xff) Cut verifier signature, its length matching the encryption (64 or 65 u8 immediately after the update payload). Remaining data is reserved tail, currently it is not used. If the data length is insufficient, Vault produces an error and suggests to load non-damaged update. Verify the signature for the payload. If this fails, Vault produces an error indicating that the update has invalid signature. add_specs processing sequence Update payload is transformed into ContentAddSpecs and the incoming NetworkSpecsToSend are retrieved, or the Vault produces an error indicating that the add_specs payload is damaged. Vault checks that there is no change in invariant specs occurring. If there are entries in the SPECSTREE of the Vault database with same genesis hash as in newly received specs (the encryption not necessarily matches), the Vault checks that the name and base58 prefix in the received specs are same as in the specs already in the Vault database. Vault checks the verifier entry for the received genesis hash. If there are no entries, i.e. the network is altogether new to the Vault, the specs could be added into the database. During the same database transaction the network verifier is set up: | add_specs update verification | General verifier in Vault database | Action | | :- | :- | :- | | unverified, 0xff update encryption code | None or Some(_) | (1) set network verifier to custom, None (regardless of the general verifier); (2) add specs | | verified by a | None | (1) set network verifier to general; (2) set general verifier to Some(a), process the general hold; (3) add specs | | verified by a | Some(b) | (1) set network verifier to custom, Some(a); (2) add specs | | verified by a | Some(a) | (1) set network verifier to general; (2) add specs | If there are entries, i.e. the network was known to the Vault at some point after the last Vault reset, the network verifier in the database and the verifier of the update are compared. The specs could be added in the database if there are no verifier mismatches encountered (i.e. verifier same or stronger) received data causes no change in specs static for encryption the specs are not yet in the database in exactly same form Note that if the exactly same specs as already in the database are received with updated verifier and the user accepts the update, the verifier will get updated and the specs will stay in the database. | add_specs update verification | Network verifier in Vault database | General verifier in Vault database | Action | | :- | :- | :- | :- | | unverified, 0xff update encryption code | custom, None | None | accept specs if good | | unverified, 0xff update encryption code | custom, None | Some(a) | accept specs if good | | unverified, 0xff update encryption code | general | None | accept specs if good | | unverified, 0xff update encryption code | general | Some(a) | error: update should have been signed by a | | verified by a | custom, None | None | (1) change network verifier to general, process the network hold; (2) set general verifier to Some(a), process the general hold; (3) accept specs if good | | verified by a | custom, None | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | | verified by a | custom, None | Some(b) | (1) change network verifier to custom, Some(a), process the network hold; (2) accept specs if good | | verified by a | custom, Some(a) | Some(b) | accept specs if good | | verified by a | custom, Some(b) | Some(a) | (1) change network verifier to general, process the network hold; (2) accept specs if good | | verified by a | custom, Some(b) | Some(c) | error: update should have been signed by b or c | Before the NetworkSpecsToSend are added in the SPECSTREE, they get transformed into NetworkSpecs, and have the order field (display order in Vault network lists) added. Each new network specs entry gets added in the end of the list. load_meta processing sequence Update payload is transformed into ContentLoadMeta, from which the metadata and the genesis hash are retrieved, or the Vault produces an error indicating that the load_metadata payload is damaged. Vault checks that the received metadata fulfills all Vault metadata requirements outlined above . Otherwise an error is produced indicating that the received metadata is invalid. Incoming MetaValues are produced, that contain network name, network metadata version and optional base58 prefix (if it is recorded in the metadata). Network genesis hash is used to generate VerifierKey and check if the network has an established network verifier in the Vault database. If there is no network verifier associated with genesis hash, an error is produced, indicating that the network metadata could be loaded only for networks introduced to Vault. SPECSTREE tree of the Vault database is scanned in search of entries with genesis hash matching the one received in payload. Vault accepts load_metadata updates only for the networks that have at least one network specs entry in the database. Note that if the verifier in step (3) above is found, it not necessarily means that the specs are found (for example, if a network verified by general verifier was removed by user). If the specs are found, the Vault checks that the network name and, if present, base58 prefix from the received metadata match the ones in network specs from the database. If the values do not match, the Vault produces an error. Vault compares the verifier of the received update and the verifier for the network from the database. The update verifier must be exactly the same as the verifier already in the database. If there is mismatch, Vault produces an error, indication that the load_metadata update for the network must be signed by the specified verifier (general or custom) or unsigned. If the update has passed all checks above, the Vault searches for the metadata entry in the METATREE of the Vault database, using network name and version from update to produce MetaKey. If the key is not found in the database, the metadata could be added. If the key is found in the database and metadata is exactly the same , the Vault produces an error indicating that the metadata is already in the database. This is expected to be quite common outcome. If the key is found in the database and the metadata is different , the Vault produces an error. Metadata must be not acceptable. This situation can occur if there was a silent metadata update or if the metadata is corrupted. load_types processing sequence Update payload is transformed into ContentLoadTypes, from which the types description vector Vec is retrieved, or the Vault produces an error indicating that the load_types payload is damaged. load_types updates must be signed by the general verifier. | load_types update verification | General verifier in Vault database | Action | | :- | :- | :- | | unverified, 0xff update encryption code | None | load types if the types are not yet in the database | | verified by a | None | (1) set general verifier to Some(a), process the general hold; (2) load types, warn if the types are the same as before | | verified by a | Some(b) | reject types, error indicates that load_types requires general verifier signature | | verified by a | Some(a) | load types if the types are not yet in the database | If the load_types verifier is same as the general verifier in the database and the types are same as the types in the database, the Vault produces an error indicating that the types are already known. Each time the types are loaded, the Vault produces a warning. load_types is rare and quite unexpected operation.","breadcrumbs":"Development » Universal offline signature » Update","id":"60","title":"Update"},"61":{"body":"Derivations import has the following structure: preludederivations import payload Derivations import payload is a SCALE-encoded ExportAddrs structure. It does not contain any private keys or seed phrases. ExportAddrs structure holds the following information about each key: name and public key of the seed the derived key belongs to ss58 address of the derived key (h160 for ethereum based chains) derivation path encryption type genesis hash of the network the key is used in When processing derivations import, all data after prelude is transformed into ExportAddrs. Network genesis hash, encryption and derivations set are derived from it, or the Vault produces a warning indicating that the derivation import payload is corrupted. Vault checks that the network for which the derivations are imported has network specs in the Vault database. If not, a warning is produced. Vault checks that the derivation set contains only valid derivations. If any derivation is unsuitable, a warning is produced indicating this. If the user accepts the derivations import, Vault generates a key for each valid derivation. If one of the derived keys already exists, it gets ignored, i.e. no error is produced. If there are two derivations with identical path within the payload, only one derived key is created.","breadcrumbs":"Development » Universal offline signature » Derivations import, payload code de","id":"61","title":"Derivations import, payload code de"},"62":{"body":"Vault repository contains 3 tools that are part of Vault ecosystem Polkadot Vault app generate_message network data management tool qr_reader_pc qr scanner app for PC Greater Vault ecosystem: metadata portal Signer companion polkadot-js libraries for QR code data transfer UOS interface specification - since no tools support original upstream specification, here is standard interpretation that is used in Vault.","breadcrumbs":"Development » Vault ecosystem » Vault ecosystem","id":"62","title":"Vault ecosystem"},"7":{"body":"What networks does Vault support? From-the-shelf Polkadot Vault supports Polkadot, Kusama, and Westend networks. But it's not limited to these networks. More experienced users can generate metadata for any network to expand the capability of Polkadot Vault. How can I update metadata version for a network? Parity verifies and publishes recent metadata versions on Metadata Update Portal . With off-the-shelf Vault you can scan one of the multipart QR-\"movies\" same way you scan transaction QR: in Vault open scanner, scan the QR for the respective network and accept new metadata. Currently, Metadata Update Portal follows Polkadot, Kusama, and Westend network metadata updates. Parity is open to collaboration with participants of other networks and is currently exploring safe and more decentralized ways of publishing verified metadata. If you want to update networks that you've added manually, please follow the Add Metadata steps in Add New Network guide. Why do I need to update network metadata versions at all? It's a safety feature. Substrate-based blockchain networks can be updated and otherwise changed; without recent metadata version of a network Vault won't be able to parse a transaction correctly, and you won't be able to read it and verify what you sign. Given that Vault is an app for an air-gapped device, you have to update the network version by using camera. How can I add a new network to Vault? Parity verifies and publishes network specs on Metadata Update Portal . To add one of the listed networks, in Metadata Update Portal click \"Chain Specs\", scan the network specs QR same way you scan transaction QR: in Vault open scanner, scan the QR and accept new network spec. Then scan the multipart QR-\"movie\" containing recent metadata for this network. Can I add a network that does not have network specs and metadata QR published anywhere? Yes. Follow the Add New Network step-by-step guide. Currently, the process requires you to have rust , subkey and parity-signer repository on your machine.","breadcrumbs":"About Polkadot Vault » FAQ » Networks","id":"7","title":"Networks"},"8":{"body":"Can I import my keys from polkadot{.js} apps or extension to Polkadot Vault? Yes. Keys are compatible between polkadot{.js} and Polkadot Vault, except for the keys generated with Ledger (BIP39). To import seed keys into Polkadot Vault, you need to know: Seed phrase It should always be backed up in paper! Network you are adding address to and whether Polkadot Vault installed on your device has metadata for the respective network. If (2) is not one of the default built-in networks, you will need to add network yourself or find a distribution center for adding networks. Derivation path Only if you are importing a derived key, usually keys generated with polkadot{.js} are seed keys. In Polkadot Vault go to Keys, then press \"Plus\" icon in the top right of the screen, select \"Recover seed\", enter display name to identify your seed, press \"Next\", enter the seed phrase. Done, you've got your seed key imported! If you are importing a derived key select the seed from which your key is derived, select account's network, press \"Plus\" icon next to \"Derived keys\", enter your derivation path. What is the difference between seed key and derived key? Why should I use derived keys? A seed key is a single key pair generated from a seed phrase. You can “grow” as many derived keys from a single seed by adding derivation paths to your seed phrase. Learn more about types of derivation paths on substrate.io . Derivation path is sensitive information, but knowing the derivation path is not enough to recover a key. Derived keys cannot be backed up without both of the ingredients: seed phrase (can be shared between multiple keys) and a derivation path (unique for each of the keys “grown” from that seed). The main reason to use derived keys is how easy it is to back up (and restore from a backup) a derivation path compared to seed phrase. What is an identicon, the image next to my keys? An identicon is a visual hash of a public key — a unique picture generated from your public key. The same public key should have the same identicon regardless of the application. It is a good tool to distinguish quickly between keys. However, when interacting with keys, i.g. verifying a recipient of a transaction, do not rely only on identicons, it is better to check the full public address. How can I rename one of my seeds? Due to security considerations, you cannot rename a seed. Please back up the seed and derived keys, remove it and add the seed again with a new name instead.","breadcrumbs":"About Polkadot Vault » FAQ » Seeds and keys","id":"8","title":"Seeds and keys"},"9":{"body":"","breadcrumbs":"About Polkadot Vault » Security-And-Privacy » Security and Privacy","id":"9","title":"Security and Privacy"}},"length":63,"save":true},"fields":["title","body","breadcrumbs"],"index":{"body":{"root":{"0":{".":{".":{"4":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"1":{"df":1,"docs":{"57":{"tf":1.0}}},"2":{"df":1,"docs":{"57":{"tf":1.0}}},"3":{"df":1,"docs":{"57":{"tf":1.0}}},"4":{"0":{"3":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"5":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"0":{"0":{"df":0,"docs":{},"e":{"8":{"7":{"6":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"x":{"0":{"0":{"df":1,"docs":{"55":{"tf":2.0}}},"1":{"df":1,"docs":{"55":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"55":{"tf":2.23606797749979}}},"3":{"df":1,"docs":{"55":{"tf":1.0}}},"4":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"53":{"tf":1.0}}},"5":{"3":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"8":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"55":{"tf":1.0}}},"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"9":{"2":{"7":{"c":{"3":{"0":{"7":{"6":{"1":{"4":{"d":{"b":{"a":{"6":{"df":0,"docs":{},"e":{"c":{"4":{"2":{"df":0,"docs":{},"f":{"8":{"4":{"4":{"1":{"1":{"c":{"c":{"1":{"df":0,"docs":{},"e":{"9":{"3":{"c":{"6":{"5":{"7":{"9":{"8":{"9":{"3":{"8":{"5":{"9":{"c":{"df":0,"docs":{},"e":{"5":{"a":{"7":{"a":{"c":{"3":{"d":{"8":{"c":{"2":{"df":0,"docs":{},"f":{"b":{"1":{"6":{"4":{"9":{"d":{"1":{"5":{"4":{"2":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"55":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"55":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":3.0}}}}}},"1":{".":{".":{"3":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{".":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"54":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"45":{"tf":1.0}}},"2":{"df":1,"docs":{"28":{"tf":1.0}}},"5":{"4":{".":{".":{"=":{"1":{"8":{"5":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":8,"docs":{"31":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.0}}},"2":{"0":{"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":3.0},"8":{"tf":1.0}}},"3":{".":{".":{"5":{"df":1,"docs":{"54":{"tf":1.0}}},"=":{"3":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"3":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"16":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"3":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"5":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"6":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":10,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"62":{"tf":1.0}},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"4":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":8,"docs":{"31":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.0}}},"5":{".":{"0":{".":{"0":{"df":1,"docs":{"20":{"tf":1.0}}},"1":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"8":{"a":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"d":{"7":{"a":{"0":{"a":{"c":{"1":{"7":{"df":0,"docs":{},"e":{"b":{"6":{"d":{"d":{"0":{"0":{"4":{"5":{"7":{"8":{"c":{"b":{"8":{"df":0,"docs":{},"e":{"2":{"3":{"8":{"c":{"3":{"8":{"4":{"a":{"1":{"0":{"df":0,"docs":{},"f":{"5":{"7":{"c":{"9":{"9":{"9":{"a":{"3":{"df":0,"docs":{},"f":{"a":{"1":{"2":{"0":{"0":{"4":{"0":{"9":{"c":{"d":{"9":{"b":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"6":{"4":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}},"5":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":2,"docs":{"42":{"tf":1.0},"57":{"tf":1.0}}},"7":{"7":{".":{".":{"=":{"1":{"5":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"54":{"tf":1.0}}}}}}}}}},"8":{"0":{"df":1,"docs":{"60":{"tf":1.0}}},"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"a":{"df":0,"docs":{},"f":{".":{".":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"4":{"1":{"5":{"1":{"6":{"8":{"7":{"7":{"3":{"6":{"3":{"2":{"6":{"c":{"9":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"1":{"7":{"df":0,"docs":{},"e":{"2":{"5":{"df":0,"docs":{},"f":{"c":{"5":{"2":{"8":{"7":{"6":{"1":{"3":{"6":{"9":{"3":{"c":{"9":{"1":{"2":{"9":{"0":{"9":{"c":{"b":{"2":{"2":{"6":{"a":{"a":{"4":{"7":{"9":{"4":{"df":0,"docs":{},"f":{"2":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"4":{"0":{"4":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"o":{"df":0,"docs":{},"v":{"df":3,"docs":{"37":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":4.0},"61":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}}}}},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"8":{"tf":1.0}}},"df":20,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":2.23606797749979},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"33":{"tf":3.605551275463989},"34":{"tf":4.0},"35":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"38":{"tf":2.6457513110645907},"6":{"tf":1.7320508075688772}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"1":{"tf":1.0},"23":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.123105625617661},"60":{"tf":1.7320508075688772}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"v":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}},"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":19,"docs":{"16":{"tf":1.0},"21":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":2.6457513110645907},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.7320508075688772},"38":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.449489742783178},"8":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"60":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"57":{"tf":3.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}}}},"df":9,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"57":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"22":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"i":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"p":{"df":5,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":2.8284271247461903}}}}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":7,"docs":{"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}}}}},"i":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":10,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":3.4641016151377544},"52":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":9,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"54":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.6457513110645907},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"34":{"tf":2.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"z":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"16":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":13,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.4142135623730951},"42":{"tf":2.8284271247461903},"45":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"k":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"p":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":27,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":2.449489742783178},"12":{"tf":1.0},"13":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"3":{"tf":1.4142135623730951},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":3.3166247903554},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":4.123105625617661},"47":{"tf":1.0},"49":{"tf":1.0},"6":{"tf":2.449489742783178},"62":{"tf":1.4142135623730951},"7":{"tf":1.0},"8":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"33":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"l":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}},"i":{"c":{"df":7,"docs":{"0":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":1.7320508075688772},"44":{"tf":2.0},"8":{"tf":1.0}}},"df":2,"docs":{"11":{"tf":1.0},"50":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":2,"docs":{"28":{"tf":1.0},"57":{"tf":1.0}}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"38":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"34":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":2.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"45":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.6457513110645907}}}}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"11":{"tf":1.0},"16":{"tf":1.0},"2":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"\"":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"5":{"0":{"1":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"df":1,"docs":{"57":{"tf":1.0}}},"a":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"1":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":3.3166247903554}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"e":{"5":{"8":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":10,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"26":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"60":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.7320508075688772}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":10,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.0},"57":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"61":{"tf":1.0}}}},"w":{"df":2,"docs":{"52":{"tf":1.0},"57":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"t":{"a":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.0},"8":{"tf":2.0}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"54":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.0}}}}},"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}},"p":{"3":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"9":{"df":2,"docs":{"33":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}},"t":{"df":2,"docs":{"53":{"tf":1.4142135623730951},"54":{"tf":2.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"2":{"_":{"2":{"5":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"b":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"54":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"1":{"tf":1.0},"34":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}},"o":{"b":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"x":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"41":{"tf":1.0}}}}},"df":6,"docs":{"20":{"tf":1.7320508075688772},"40":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":4,"docs":{"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":2.0}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"53":{"tf":2.0},"54":{"tf":2.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}}},"c":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":6.324555320336759},"6":{"tf":1.0},"60":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"d":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"11":{"tf":1.0},"16":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"40":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":6,"docs":{"0":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"d":{"df":1,"docs":{"41":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"45":{"tf":2.8284271247461903},"60":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":2.8284271247461903},"56":{"tf":1.0},"60":{"tf":3.1622776601683795},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":2,"docs":{"18":{"tf":1.0},"3":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":2.0},"12":{"tf":2.0},"32":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"0":{"tf":1.0},"11":{"tf":1.4142135623730951},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":3,"docs":{"12":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}}}},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"27":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":7,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"38":{"tf":1.0},"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"k":{"df":8,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"m":{"d":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":23,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":2.8284271247461903},"44":{"tf":2.6457513110645907},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.0},"53":{"tf":2.449489742783178},"54":{"tf":2.6457513110645907},"55":{"tf":2.8284271247461903},"56":{"tf":1.7320508075688772},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":3,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"54":{"tf":2.8284271247461903}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"54":{"tf":1.4142135623730951}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"47":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.7320508075688772}}}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"57":{"tf":2.449489742783178}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"r":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":4,"docs":{"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"1":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}},"x":{"df":2,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"i":{"df":1,"docs":{"60":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.4142135623730951},"53":{"tf":2.23606797749979},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"60":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":2.449489742783178}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"29":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"47":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":16,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"24":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":2.8284271247461903},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.7320508075688772},"42":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":2.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"6":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"2":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.0},"60":{"tf":2.0},"7":{"tf":1.7320508075688772}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":2.0},"38":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":4.898979485566356}}}}}},"t":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":2.0}}}}},"d":{"4":{"3":{"5":{".":{".":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"3":{"c":{"7":{"1":{"5":{"df":0,"docs":{},"f":{"d":{"d":{"3":{"1":{"c":{"6":{"1":{"1":{"4":{"1":{"a":{"b":{"d":{"0":{"4":{"a":{"9":{"9":{"df":0,"docs":{},"f":{"d":{"6":{"8":{"2":{"2":{"c":{"8":{"5":{"5":{"8":{"8":{"5":{"4":{"c":{"c":{"d":{"df":0,"docs":{},"e":{"3":{"9":{"a":{"5":{"6":{"8":{"4":{"df":0,"docs":{},"e":{"7":{"a":{"5":{"6":{"d":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":8,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.449489742783178},"57":{"tf":3.1622776601683795},"60":{"tf":6.4031242374328485},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":13,"docs":{"0":{"tf":1.0},"13":{"tf":1.4142135623730951},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"54":{"tf":2.23606797749979},"57":{"tf":4.69041575982343},"60":{"tf":4.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":4,"docs":{"1":{"tf":1.0},"26":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0}}}}},"b":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"44":{"tf":1.0}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":4,"docs":{"28":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"54":{"tf":1.0},"57":{"tf":4.242640687119285},"60":{"tf":2.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"27":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":1,"docs":{"61":{"tf":1.0}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":12,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":19,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":3.1622776601683795},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":2.8284271247461903},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":4.358898943540674},"8":{"tf":4.242640687119285}},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":4,"docs":{"3":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":3.1622776601683795}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":3.3166247903554}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"14":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"39":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":2.0}}}}}},"i":{"c":{"df":15,"docs":{"0":{"tf":1.0},"10":{"tf":2.6457513110645907},"12":{"tf":2.449489742783178},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"32":{"tf":2.6457513110645907},"33":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"6":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":2.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":4,"docs":{"34":{"tf":2.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":1.0},"8":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"o":{"c":{"df":2,"docs":{"3":{"tf":1.0},"49":{"tf":1.0}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"50":{"tf":2.0}}}}}}}},"df":4,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"t":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"16":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":6,"docs":{"12":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"41":{"tf":1.0}}}},"1":{"4":{"3":{".":{".":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"2":{"3":{"8":{"0":{"3":{"a":{"c":{"5":{"0":{"df":0,"docs":{},"e":{"8":{"df":0,"docs":{},"f":{"6":{"df":0,"docs":{},"f":{"8":{"df":0,"docs":{},"e":{"6":{"2":{"6":{"9":{"5":{"d":{"1":{"c":{"df":0,"docs":{},"e":{"9":{"df":0,"docs":{},"e":{"4":{"df":0,"docs":{},"e":{"1":{"d":{"6":{"8":{"a":{"a":{"3":{"6":{"c":{"1":{"c":{"d":{"2":{"c":{"df":0,"docs":{},"f":{"d":{"1":{"5":{"3":{"4":{"0":{"2":{"1":{"3":{"df":0,"docs":{},"f":{"3":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":11,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.7320508075688772},"57":{"tf":2.6457513110645907},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":1.7320508075688772}}}}}}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"36":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.4142135623730951},"45":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":9,"docs":{"16":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.0},"32":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.898979485566356},"61":{"tf":1.4142135623730951}}}}}}},"d":{"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.4142135623730951},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"0":{"tf":1.0},"51":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"8":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.1622776601683795},"60":{"tf":3.3166247903554}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"r":{"a":{"df":1,"docs":{"57":{"tf":2.8284271247461903}},"s":{"df":1,"docs":{"45":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":9,"docs":{"16":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":4.47213595499958},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"t":{"c":{"df":4,"docs":{"20":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":1,"docs":{"45":{"tf":3.605551275463989}},"u":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"11":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"44":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"24":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":2.0},"52":{"tf":1.0}}}},"s":{"df":1,"docs":{"0":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":2.0}},"e":{"d":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":4,"docs":{"57":{"tf":6.708203932499369},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"30":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"f":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"32":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"48":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"q":{"df":2,"docs":{"3":{"tf":1.0},"5":{"tf":1.0}}},"r":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"1":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"d":{"df":3,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":2,"docs":{"26":{"tf":1.0},"44":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":3.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"16":{"tf":1.7320508075688772},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"n":{"d":{"df":6,"docs":{"12":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.7320508075688772},"25":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}},"t":{"df":3,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0}}},"x":{"df":5,"docs":{"19":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":13,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.0},"61":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}}}},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":2.6457513110645907},"50":{"tf":2.0}}}},"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"42":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":3.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":4.58257569495584}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979}}}}}}},"d":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":2.23606797749979}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"r":{"b":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":18,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.4142135623730951},"24":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.7320508075688772},"38":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":4.0},"49":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":2.0},"60":{"tf":7.416198487095663},"61":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":2.0}}},"s":{"df":0,"docs":{},"i":{"df":4,"docs":{"57":{"tf":3.7416573867739413},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}},"t":{"df":6,"docs":{"3":{"tf":1.4142135623730951},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"61":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":5,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":1,"docs":{"57":{"tf":2.0}}},"o":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.8284271247461903},"8":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"r":{"a":{"d":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}},"w":{"df":1,"docs":{"8":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":4,"docs":{"21":{"tf":1.0},"3":{"tf":1.4142135623730951},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"h":{"1":{"6":{"0":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"5":{"6":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"53":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"34":{"tf":1.0}},"l":{"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":2.0},"49":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"16":{"tf":2.0},"24":{"tf":1.0},"44":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"0":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"df":6,"docs":{"20":{"tf":1.0},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"k":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}}},"x":{"a":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":2.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"14":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.0},"28":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}},"i":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":2.449489742783178},"57":{"tf":2.449489742783178}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"10":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"60":{"tf":3.3166247903554},"61":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"t":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"3":{"df":0,"docs":{},"f":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":5,"docs":{"50":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":3.4641016151377544},"61":{"tf":1.0}},"g":{"df":1,"docs":{"8":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"a":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}},"l":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"31":{"tf":1.7320508075688772},"33":{"tf":4.0},"37":{"tf":2.449489742783178},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":2.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.4641016151377544},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"29":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"55":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"61":{"tf":2.8284271247461903},"8":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"v":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":4,"docs":{"0":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"x":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":2.6457513110645907}}}},"i":{"c":{"df":7,"docs":{"45":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"o":{"df":4,"docs":{"32":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"r":{"df":0,"docs":{},"m":{"df":18,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"32":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.7320508075688772},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":3.0},"61":{"tf":1.0},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"23":{"tf":2.449489742783178},"26":{"tf":2.0},"27":{"tf":1.0},"32":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"n":{"c":{"df":2,"docs":{"50":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"53":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":4,"docs":{"16":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"34":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"c":{"df":4,"docs":{"28":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.6457513110645907},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"n":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"50":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.449489742783178},"62":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"14":{"tf":1.0},"60":{"tf":2.0}},"t":{"df":3,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"o":{"df":10,"docs":{"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":2.0},"45":{"tf":2.449489742783178},"47":{"tf":1.0},"48":{"tf":1.0}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.449489742783178}}}},"s":{"df":0,"docs":{},"u":{"df":3,"docs":{"48":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"t":{"'":{"df":4,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":7,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":1,"docs":{"27":{"tf":1.0}}}}},"df":0,"docs":{}},"df":8,"docs":{"0":{"tf":1.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.0},"34":{"tf":2.8284271247461903},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":2.23606797749979}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"k":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}},"y":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}},"y":{"(":{"df":1,"docs":{"24":{"tf":1.0}}},"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":27,"docs":{"0":{"tf":1.0},"1":{"tf":1.4142135623730951},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":2.449489742783178},"17":{"tf":1.0},"20":{"tf":2.23606797749979},"24":{"tf":3.872983346207417},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":5.385164807134504},"5":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"6":{"tf":2.6457513110645907},"60":{"tf":4.0},"61":{"tf":3.0},"8":{"tf":5.5677643628300215}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":1.0}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":2.449489742783178}}}}}}},"s":{"df":0,"docs":{},"m":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"m":{"a":{"df":6,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"42":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":3,"docs":{"1":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}},"v":{"df":4,"docs":{"0":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"6":{"tf":1.0}}}},"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"g":{"a":{"c":{"df":0,"docs":{},"i":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":3.3166247903554},"60":{"tf":3.3166247903554}}}}}},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"t":{"'":{"df":2,"docs":{"27":{"tf":1.0},"37":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"i":{"b":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"20":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"4":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0},"7":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"49":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"48":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"37":{"tf":1.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"35":{"tf":1.0},"6":{"tf":1.0}}}}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":3.0}}}}}},"df":4,"docs":{"29":{"tf":2.0},"55":{"tf":1.4142135623730951},"57":{"tf":2.23606797749979},"60":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":2.0},"45":{"tf":3.1622776601683795},"57":{"tf":2.0}},"i":{"c":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":2.0},"49":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"60":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"g":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"45":{"tf":1.0}}},"p":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"24":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}},"s":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"t":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":1,"docs":{"41":{"tf":1.0}},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"48":{"tf":1.0},"7":{"tf":1.0}}}}},"o":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"50":{"tf":1.0}}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"6":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":10,"docs":{"0":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"54":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"34":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"3":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"32":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":2.449489742783178}}}}}},"n":{"df":0,"docs":{},"u":{"df":3,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":2.23606797749979}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":13,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":2.6457513110645907},"29":{"tf":3.7416573867739413},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"52":{"tf":2.0},"55":{"tf":1.0},"57":{"tf":7.681145747868608},"60":{"tf":6.244997998398398},"62":{"tf":1.0},"7":{"tf":3.872983346207417},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"t":{"a":{"d":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772}}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"13":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":2.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951}},"e":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}},"d":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.0}}}},"df":0,"docs":{},"e":{"df":9,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.0}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"0":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":2.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"55":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":1.0}}},"i":{"df":2,"docs":{"29":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"54":{"tf":2.449489742783178}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":2.449489742783178},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"+":{"1":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"20":{"tf":2.0},"3":{"tf":1.0},"44":{"tf":3.0},"45":{"tf":3.4641016151377544}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"44":{"tf":2.0},"45":{"tf":2.23606797749979},"49":{"tf":1.0},"57":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"42":{"tf":2.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":22,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"27":{"tf":1.0}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":2.6457513110645907},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.449489742783178},"25":{"tf":1.0},"26":{"tf":2.6457513110645907},"27":{"tf":4.0},"28":{"tf":2.6457513110645907},"29":{"tf":2.8284271247461903},"3":{"tf":1.0},"33":{"tf":2.23606797749979},"37":{"tf":1.4142135623730951},"38":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":6.557438524302},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":4.898979485566356},"58":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":9.0},"61":{"tf":2.0},"62":{"tf":1.0},"7":{"tf":4.898979485566356},"8":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.0}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"32":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}}},"w":{"df":18,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.23606797749979},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.7320508075688772}}}}},"f":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":5,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"e":{"df":2,"docs":{"13":{"tf":1.0},"60":{"tf":4.58257569495584}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}},"h":{"df":2,"docs":{"40":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0}}},"df":0,"docs":{}}},"w":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"44":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":2.6457513110645907},"57":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"10":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"6":{"tf":1.7320508075688772}}}}}}},"l":{"d":{"df":3,"docs":{"40":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.0},"52":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"n":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":16,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"37":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}},"r":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"51":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"36":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"11":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}}}},"s":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"24":{"tf":1.0},"53":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":5,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"34":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}}}},"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"57":{"tf":3.1622776601683795},"60":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":2.0}}}}},"s":{"df":6,"docs":{"3":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":2.0},"51":{"tf":1.0},"57":{"tf":3.872983346207417},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"49":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"1":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":2.23606797749979},"62":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"57":{"tf":1.0},"7":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}},"t":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"45":{"tf":2.449489742783178}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"13":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"32":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":2.23606797749979},"42":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.0},"57":{"tf":3.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"8":{"tf":2.8284271247461903}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":3,"docs":{"22":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":11,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":2.8284271247461903},"50":{"tf":1.0},"54":{"tf":3.4641016151377544},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"60":{"tf":5.477225575051661},"61":{"tf":2.23606797749979}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"34":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"'":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}},"df":12,"docs":{"0":{"tf":1.4142135623730951},"10":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"24":{"tf":1.0},"26":{"tf":2.6457513110645907},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":2.449489742783178},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":16,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"15":{"tf":1.0},"24":{"tf":3.605551275463989},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.449489742783178},"36":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"61":{"tf":1.0},"8":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"0":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"0":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"34":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":2.0}}}}}}},"y":{"df":2,"docs":{"11":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":9,"docs":{"11":{"tf":1.0},"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.7320508075688772},"32":{"tf":1.0},"48":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":2,"docs":{"1":{"tf":1.0},"37":{"tf":1.0}}}},"/":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":27,"docs":{"0":{"tf":2.6457513110645907},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":2.23606797749979},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"27":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":2.0},"31":{"tf":1.7320508075688772},"32":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":4.358898943540674},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.0},"45":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":2.23606797749979},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.4142135623730951},"7":{"tf":2.0},"8":{"tf":2.23606797749979}},"j":{"df":6,"docs":{"21":{"tf":1.0},"3":{"tf":1.0},"35":{"tf":1.7320508075688772},"36":{"tf":1.4142135623730951},"38":{"tf":1.4142135623730951},"6":{"tf":1.7320508075688772}}},"{":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"58":{"tf":1.0},"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"12":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"24":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"x":{"df":5,"docs":{"16":{"tf":1.0},"38":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"61":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":4,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"60":{"tf":1.0}}}}},"s":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"20":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"9":{"tf":1.0}}}},"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"26":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.0},"57":{"tf":2.449489742783178},"59":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":6,"docs":{"45":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":2.0}},"t":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"45":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":2.23606797749979},"61":{"tf":1.0},"8":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"50":{"tf":1.0},"7":{"tf":2.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"c":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":1,"docs":{"44":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":24,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":2.449489742783178},"29":{"tf":2.6457513110645907},"33":{"tf":1.0},"34":{"tf":3.1622776601683795},"44":{"tf":2.449489742783178},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.0},"53":{"tf":2.449489742783178},"54":{"tf":2.449489742783178},"55":{"tf":1.4142135623730951},"56":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"7":{"tf":2.8284271247461903}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"q":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.8284271247461903}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"w":{"df":2,"docs":{"53":{"tf":1.0},"56":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"3":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"d":{"df":13,"docs":{"1":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"i":{"df":5,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"34":{"tf":1.0},"44":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"8":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"51":{"tf":1.0},"60":{"tf":3.605551275463989}}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"v":{"df":11,"docs":{"12":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":2.8284271247461903},"35":{"tf":1.4142135623730951},"37":{"tf":1.7320508075688772},"38":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"24":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.23606797749979},"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"d":{"df":1,"docs":{"33":{"tf":1.0}},"u":{"c":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"20":{"tf":2.0},"44":{"tf":1.0},"45":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"17":{"tf":1.0},"3":{"tf":1.0},"54":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"19":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"3":{"tf":1.0}}}},"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"8":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":5,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":6,"docs":{"0":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":3.4641016151377544},"8":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":1,"docs":{"44":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"12":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":6,"docs":{"34":{"tf":1.4142135623730951},"37":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.4142135623730951},"2":{"tf":1.0},"27":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":3.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}},"t":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"53":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"60":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"f":{"c":{"6":{"3":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"12":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}}},"n":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"54":{"tf":1.0}}}}},"p":{"c":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"32":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"52":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"v":{"1":{"4":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"42":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":14,"docs":{"20":{"tf":2.449489742783178},"27":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":3.872983346207417},"45":{"tf":2.6457513110645907},"47":{"tf":1.0},"49":{"tf":1.0},"54":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":12,"docs":{"11":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.872983346207417},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"42":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"45":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"n":{"df":12,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.6457513110645907},"54":{"tf":2.23606797749979},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"7":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"45":{"tf":3.605551275463989},"8":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.58257569495584}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":15,"docs":{"1":{"tf":2.0},"10":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":1.4142135623730951},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"34":{"tf":1.0},"45":{"tf":3.3166247903554},"6":{"tf":2.449489742783178},"8":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":4.358898943540674},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":4.795831523312719},"5":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.4142135623730951},"8":{"tf":4.58257569495584}}},"df":7,"docs":{"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0}},"m":{"df":1,"docs":{"48":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"n":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":2.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"f":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"d":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"34":{"tf":2.6457513110645907}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"8":{"tf":1.0}}}}},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"53":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.0}}}}}}},"t":{"df":10,"docs":{"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"52":{"tf":1.0},"57":{"tf":3.4641016151377544},"60":{"tf":4.358898943540674},"61":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"31":{"tf":1.0},"33":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"56":{"tf":1.0},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"27":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"w":{"df":3,"docs":{"12":{"tf":1.0},"54":{"tf":2.0},"57":{"tf":1.7320508075688772}},"n":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":5,"docs":{"33":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":2.6457513110645907},"47":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":11,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.0},"34":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"6":{"tf":1.4142135623730951},"60":{"tf":3.605551275463989}}}}}},"df":22,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":2.23606797749979},"28":{"tf":2.23606797749979},"29":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.6457513110645907},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":3.872983346207417},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":3.7416573867739413},"7":{"tf":1.0}},"e":{"d":{")":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"@":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"13":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}},"i":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}},"t":{"df":1,"docs":{"34":{"tf":1.0}},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.4142135623730951},"44":{"tf":1.0},"6":{"tf":1.0}},"e":{"'":{"df":1,"docs":{"0":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":2.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"25":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"_":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":3.0}}},"a":{"df":1,"docs":{"60":{"tf":3.4641016151377544}}},"b":{"df":1,"docs":{"60":{"tf":2.449489742783178}}},"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"2":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":10,"docs":{"27":{"tf":1.7320508075688772},"28":{"tf":4.0},"29":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":6.164414002968976},"61":{"tf":1.0},"7":{"tf":2.23606797749979}},"i":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"24":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.4142135623730951}},"i":{"df":5,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":2.0}}}}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"54":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"2":{"5":{"5":{"1":{"9":{"df":6,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"5":{"8":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"40":{"tf":1.0},"57":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":17,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"3":{"tf":1.7320508075688772},"37":{"tf":1.0},"41":{"tf":1.0},"47":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"45":{"tf":3.7416573867739413},"47":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":2.0}}},"i":{"c":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"y":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":7,"docs":{"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"1":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"0":{"tf":1.0},"20":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":18,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":3.3166247903554},"54":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.4142135623730951},"60":{"tf":2.8284271247461903}}}}},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":7,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"12":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"r":{"df":10,"docs":{"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.7320508075688772},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"45":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"b":{"df":1,"docs":{"44":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0},"7":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"53":{"tf":1.0}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"50":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"1":{"tf":1.0},"57":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}}}}}},"df":0,"docs":{},"h":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":2.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.0}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"32":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"47":{"tf":1.0}}},"i":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"47":{"tf":1.0},"53":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"1":{"tf":1.0}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":7,"docs":{"2":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951}}}}}}}},"t":{":":{":":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"29":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":7,"docs":{"12":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"k":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":12,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}}},"u":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":4.242640687119285},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":11,"docs":{"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979}}}},"p":{"df":2,"docs":{"34":{"tf":1.0},"57":{"tf":2.0}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"o":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"0":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"28":{"tf":2.23606797749979},"44":{"tf":1.0},"6":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"l":{"df":8,"docs":{"27":{"tf":1.0},"3":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"6":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"8":{"tf":1.0}}}},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":22,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":4.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"52":{"tf":2.0},"55":{"tf":2.23606797749979},"57":{"tf":6.244997998398398},"58":{"tf":1.7320508075688772},"59":{"tf":2.23606797749979},"6":{"tf":1.7320508075688772},"60":{"tf":2.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"52":{"tf":1.0}}}}}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"_":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"0":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"60":{"tf":2.0},"61":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}},"i":{"a":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":6,"docs":{"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":2.23606797749979}}}}}}},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"46":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.4142135623730951},"34":{"tf":1.0},"35":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"o":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"x":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":14,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":5.830951894845301},"60":{"tf":4.795831523312719},"61":{"tf":1.0},"8":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"u":{"1":{"6":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"8":{"df":4,"docs":{"51":{"tf":1.0},"57":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"df":2,"docs":{"28":{"tf":2.0},"29":{"tf":1.4142135623730951}},"i":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.8284271247461903}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":2.23606797749979},"47":{"tf":1.0}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"t":{"df":5,"docs":{"28":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}}}}}}},"o":{"df":4,"docs":{"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"55":{"tf":1.0},"62":{"tf":1.0}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"12":{"tf":1.4142135623730951},"20":{"tf":2.0},"27":{"tf":2.6457513110645907},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":2.23606797749979},"60":{"tf":8.831760866327848},"7":{"tf":3.1622776601683795}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"16":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.8284271247461903},"30":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"52":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":2.0}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":4,"docs":{"21":{"tf":1.0},"25":{"tf":1.7320508075688772},"26":{"tf":1.0},"3":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"50":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"22":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}},"b":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.7320508075688772},"11":{"tf":1.4142135623730951},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":3.0},"23":{"tf":1.0},"24":{"tf":3.1622776601683795},"26":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.0},"32":{"tf":2.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":3.4641016151377544},"45":{"tf":4.358898943540674},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":5.0990195135927845},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":4.69041575982343},"61":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":16,"docs":{"12":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":4.47213595499958},"51":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.0},"6":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"f":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}}},"v":{"1":{"2":{"df":2,"docs":{"57":{"tf":2.8284271247461903},"60":{"tf":1.4142135623730951}}},"3":{"df":3,"docs":{"52":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"df":0,"docs":{}},"2":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"2":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"df":1,"docs":{"33":{"tf":1.0}}},"4":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"14":{"tf":1.4142135623730951},"30":{"tf":1.0},"35":{"tf":1.0}}},"5":{"df":1,"docs":{"25":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"'":{"df":3,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951}}},"df":46,"docs":{"0":{"tf":2.23606797749979},"1":{"tf":2.0},"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":2.0},"13":{"tf":1.0},"14":{"tf":1.4142135623730951},"16":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"22":{"tf":1.0},"23":{"tf":2.8284271247461903},"24":{"tf":2.8284271247461903},"25":{"tf":1.4142135623730951},"26":{"tf":3.3166247903554},"27":{"tf":2.449489742783178},"28":{"tf":1.4142135623730951},"29":{"tf":2.0},"3":{"tf":2.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":2.8284271247461903},"33":{"tf":1.0},"34":{"tf":2.8284271247461903},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":3.1622776601683795},"45":{"tf":3.872983346207417},"49":{"tf":1.0},"50":{"tf":2.23606797749979},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"54":{"tf":3.1622776601683795},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":5.744562646538029},"58":{"tf":1.0},"6":{"tf":4.0},"60":{"tf":7.810249675906654},"61":{"tf":2.23606797749979},"62":{"tf":2.449489742783178},"7":{"tf":3.0},"8":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}}}}}}},"u":{"8":{"df":3,"docs":{"57":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}},"i":{"df":9,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"60":{"tf":10.862780491200215},"7":{"tf":2.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}},"s":{"a":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.7320508075688772},"30":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"40":{"tf":1.0},"47":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":5.291502622129181},"60":{"tf":3.1622776601683795},"7":{"tf":2.23606797749979}}}}}}}},"i":{"a":{"df":3,"docs":{"27":{"tf":1.0},"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":3.1622776601683795},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"/":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"30":{"tf":1.0},"35":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.7320508075688772},"6":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"28":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772}}}},"y":{"df":11,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"b":{"c":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"34":{"tf":2.0},"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"34":{"tf":1.7320508075688772}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"16":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"57":{"tf":2.6457513110645907},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0}}}},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":3,"docs":{"6":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"s":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"40":{"tf":1.0}}},"y":{"df":0,"docs":{},"e":{"df":4,"docs":{"41":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"'":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"v":{"df":5,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"8":{"tf":1.0}}}}}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"breadcrumbs":{"root":{"0":{".":{".":{"4":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"a":{"c":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"1":{"df":1,"docs":{"57":{"tf":1.0}}},"2":{"df":1,"docs":{"57":{"tf":1.0}}},"3":{"df":1,"docs":{"57":{"tf":1.0}}},"4":{"0":{"3":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"5":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"0":{"0":{"df":0,"docs":{},"e":{"8":{"7":{"6":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"x":{"0":{"0":{"df":1,"docs":{"55":{"tf":2.0}}},"1":{"df":1,"docs":{"55":{"tf":1.4142135623730951}}},"2":{"df":1,"docs":{"55":{"tf":2.23606797749979}}},"3":{"df":1,"docs":{"55":{"tf":1.0}}},"4":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"4":{"df":1,"docs":{"53":{"tf":1.0}}},"5":{"3":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"8":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"55":{"tf":1.0}}},"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"9":{"2":{"7":{"c":{"3":{"0":{"7":{"6":{"1":{"4":{"d":{"b":{"a":{"6":{"df":0,"docs":{},"e":{"c":{"4":{"2":{"df":0,"docs":{},"f":{"8":{"4":{"4":{"1":{"1":{"c":{"c":{"1":{"df":0,"docs":{},"e":{"9":{"3":{"c":{"6":{"5":{"7":{"9":{"8":{"9":{"3":{"8":{"5":{"9":{"c":{"df":0,"docs":{},"e":{"5":{"a":{"7":{"a":{"c":{"3":{"d":{"8":{"c":{"2":{"df":0,"docs":{},"f":{"b":{"1":{"6":{"4":{"9":{"d":{"1":{"5":{"4":{"2":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"<":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"55":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"55":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"c":{"1":{"df":1,"docs":{"55":{"tf":1.0}}},"df":0,"docs":{}},"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"55":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":2,"docs":{"55":{"tf":1.4142135623730951},"60":{"tf":3.0}}}}}},"1":{".":{".":{"3":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"/":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{".":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"54":{"tf":1.0}}},"5":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"45":{"tf":1.0}}},"2":{"df":1,"docs":{"28":{"tf":1.0}}},"5":{"4":{".":{".":{"=":{"1":{"8":{"5":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":8,"docs":{"31":{"tf":1.0},"32":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.0}}},"2":{"0":{"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"5":{"7":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":12,"docs":{"20":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"48":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":3.0},"8":{"tf":1.0}}},"3":{".":{".":{"5":{"df":1,"docs":{"54":{"tf":1.0}}},"=":{"3":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"df":1,"docs":{"4":{"tf":1.0}}},"df":0,"docs":{}},"0":{"df":1,"docs":{"45":{"tf":1.0}}},"2":{"2":{"3":{"0":{"0":{"0":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":4,"docs":{"16":{"tf":1.4142135623730951},"54":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"3":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"5":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"6":{".":{".":{"=":{"7":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":10,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"62":{"tf":1.0}},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"4":{"1":{"df":1,"docs":{"57":{"tf":1.0}}},"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":8,"docs":{"31":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.0}}},"5":{".":{"0":{".":{"0":{"df":1,"docs":{"20":{"tf":1.4142135623730951}}},"1":{"df":1,"docs":{"19":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"8":{"a":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"7":{"d":{"7":{"a":{"0":{"a":{"c":{"1":{"7":{"df":0,"docs":{},"e":{"b":{"6":{"d":{"d":{"0":{"0":{"4":{"5":{"7":{"8":{"c":{"b":{"8":{"df":0,"docs":{},"e":{"2":{"3":{"8":{"c":{"3":{"8":{"4":{"a":{"1":{"0":{"df":0,"docs":{},"f":{"5":{"7":{"c":{"9":{"9":{"9":{"a":{"3":{"df":0,"docs":{},"f":{"a":{"1":{"2":{"0":{"0":{"4":{"0":{"9":{"c":{"d":{"9":{"b":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":3,"docs":{"42":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"6":{"4":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}},"5":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":2,"docs":{"42":{"tf":1.0},"57":{"tf":1.0}}},"7":{"7":{".":{".":{"=":{"1":{"5":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"54":{"tf":1.0}}}}}}}}}},"8":{"0":{"df":1,"docs":{"60":{"tf":1.0}}},"1":{"df":1,"docs":{"60":{"tf":1.0}}},"df":2,"docs":{"57":{"tf":1.0},"58":{"tf":1.4142135623730951}},"e":{"a":{"df":0,"docs":{},"f":{".":{".":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"0":{"4":{"1":{"5":{"1":{"6":{"8":{"7":{"7":{"3":{"6":{"3":{"2":{"6":{"c":{"9":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"a":{"1":{"7":{"df":0,"docs":{},"e":{"2":{"5":{"df":0,"docs":{},"f":{"c":{"5":{"2":{"8":{"7":{"6":{"1":{"3":{"6":{"9":{"3":{"c":{"9":{"1":{"2":{"9":{"0":{"9":{"c":{"b":{"2":{"2":{"6":{"a":{"a":{"4":{"7":{"9":{"4":{"df":0,"docs":{},"f":{"2":{"6":{"a":{"4":{"8":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"4":{"0":{"4":{".":{".":{"4":{"8":{"1":{"7":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"o":{"df":0,"docs":{},"v":{"df":3,"docs":{"37":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":10,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":4.0},"61":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}}}}},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"d":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"8":{"tf":1.0}}},"df":20,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"12":{"tf":2.23606797749979},"14":{"tf":1.4142135623730951},"15":{"tf":1.7320508075688772},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"33":{"tf":3.605551275463989},"34":{"tf":4.123105625617661},"35":{"tf":2.0},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"38":{"tf":3.0},"6":{"tf":1.7320508075688772}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":2,"docs":{"1":{"tf":1.0},"23":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"t":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.123105625617661},"60":{"tf":1.7320508075688772}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"v":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"50":{"tf":1.0},"53":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}},"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":2.23606797749979}}},"df":0,"docs":{}}}}},"df":19,"docs":{"16":{"tf":1.0},"21":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":2.23606797749979},"28":{"tf":3.0},"29":{"tf":1.7320508075688772},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"38":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.449489742783178},"8":{"tf":1.4142135623730951}},"i":{"df":0,"docs":{},"t":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"l":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}},"df":1,"docs":{"60":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"57":{"tf":3.0},"6":{"tf":1.7320508075688772},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}}}},"df":9,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"57":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"20":{"tf":1.0}}}}},"j":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"22":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"36":{"tf":1.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"s":{"df":2,"docs":{"10":{"tf":1.0},"32":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"15":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}},"g":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":5,"docs":{"33":{"tf":1.0},"34":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"i":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}},"g":{"a":{"df":0,"docs":{},"p":{"df":5,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":2.8284271247461903}}}}},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"m":{"df":7,"docs":{"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}}}}},"i":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"53":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":10,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":3.4641016151377544},"52":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"1":{"tf":1.0},"6":{"tf":1.0}},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"i":{"df":9,"docs":{"26":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"54":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"w":{"a":{"df":0,"docs":{},"y":{"df":15,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"24":{"tf":1.0},"38":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.6457513110645907},"51":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.7320508075688772},"56":{"tf":1.0},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.4142135623730951},"34":{"tf":2.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}}},"n":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"y":{"df":0,"docs":{},"z":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"d":{"/":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"1":{"tf":1.0},"16":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":13,"docs":{"10":{"tf":1.0},"11":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.4142135623730951},"30":{"tf":1.0},"32":{"tf":1.4142135623730951},"42":{"tf":3.0},"45":{"tf":1.7320508075688772},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"y":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.4142135623730951}}},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"24":{"tf":1.0},"7":{"tf":1.0}}}}}}}},"p":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"28":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"k":{"df":2,"docs":{"11":{"tf":1.0},"12":{"tf":1.0}}},"p":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":27,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":2.449489742783178},"12":{"tf":1.0},"13":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"3":{"tf":1.4142135623730951},"30":{"tf":2.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":3.4641016151377544},"35":{"tf":1.4142135623730951},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.4142135623730951},"41":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":4.123105625617661},"47":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951},"6":{"tf":2.449489742783178},"62":{"tf":1.4142135623730951},"7":{"tf":1.0},"8":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"33":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"l":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}},"i":{"c":{"df":7,"docs":{"0":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":2.0},"44":{"tf":2.0},"8":{"tf":1.0}}},"df":2,"docs":{"11":{"tf":1.0},"50":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"v":{"df":2,"docs":{"28":{"tf":1.0},"57":{"tf":1.0}}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"38":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":2.6457513110645907}}}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"l":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":3,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"o":{"c":{"df":0,"docs":{},"i":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"34":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"t":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":2.0}}}}}}}},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"45":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.6457513110645907}}}}},"o":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}}}}},"v":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":7,"docs":{"11":{"tf":1.0},"16":{"tf":1.0},"2":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"b":{"\"":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"5":{"0":{"1":{".":{".":{"3":{"df":0,"docs":{},"f":{"3":{"3":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"8":{"df":1,"docs":{"57":{"tf":1.0}}},"a":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":2.0},"44":{"tf":2.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":2.0}},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.4142135623730951},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"1":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":3.3166247903554}},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"n":{"a":{"df":0,"docs":{},"n":{"a":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"s":{"df":0,"docs":{},"e":{"5":{"8":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.449489742783178}}},"df":0,"docs":{}},"df":10,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0},"50":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}},"i":{"c":{"df":2,"docs":{"26":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"60":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.7320508075688772}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":10,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"34":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.0},"57":{"tf":1.0}}}}},"h":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"61":{"tf":1.0}}}},"w":{"df":2,"docs":{"52":{"tf":1.0},"57":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"t":{"a":{"df":1,"docs":{"11":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.0},"8":{"tf":2.0}}}}}}}},"i":{"df":0,"docs":{},"g":{"df":2,"docs":{"54":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"n":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.0}}}}},"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}},"p":{"3":{"2":{"df":1,"docs":{"16":{"tf":1.0}}},"9":{"df":2,"docs":{"33":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":1,"docs":{"16":{"tf":1.0}}},"t":{"df":2,"docs":{"53":{"tf":1.4142135623730951},"54":{"tf":2.0}}}},"l":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"2":{"_":{"2":{"5":{"6":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"b":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"54":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":1.0}}},"c":{"df":0,"docs":{},"k":{"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"1":{"tf":1.0},"34":{"tf":1.0},"6":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}},"o":{"b":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"29":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"h":{"df":5,"docs":{"20":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"x":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.0}}}},"r":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"k":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"a":{"d":{"c":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"w":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"29":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{".":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"41":{"tf":1.0}}}}},"df":7,"docs":{"20":{"tf":1.7320508075688772},"40":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"47":{"tf":1.4142135623730951},"48":{"tf":2.0}}},"df":0,"docs":{},"t":{"df":8,"docs":{"10":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"k":{"df":4,"docs":{"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"59":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"36":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"53":{"tf":2.0},"54":{"tf":2.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}}},"c":{"1":{"df":1,"docs":{"60":{"tf":1.0}}},"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":6.324555320336759},"6":{"tf":1.0},"60":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"d":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"11":{"tf":1.0},"16":{"tf":1.0}}}}}}}},"g":{"df":0,"docs":{},"o":{".":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"47":{"tf":1.0}}}}}}},"df":4,"docs":{"20":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"40":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":6,"docs":{"0":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"56":{"tf":1.0}}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"s":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}},"d":{"df":1,"docs":{"41":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":2,"docs":{"45":{"tf":2.8284271247461903},"60":{"tf":1.0}}}}}}},"h":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"16":{"tf":1.0},"28":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.4142135623730951},"57":{"tf":1.0},"61":{"tf":1.0},"7":{"tf":1.0}}}},"n":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":7,"docs":{"33":{"tf":1.4142135623730951},"36":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772},"45":{"tf":2.8284271247461903},"56":{"tf":1.0},"60":{"tf":3.1622776601683795},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":4,"docs":{"18":{"tf":1.7320508075688772},"19":{"tf":1.0},"20":{"tf":1.0},"3":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"10":{"tf":2.0},"12":{"tf":2.0},"32":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"k":{"df":9,"docs":{"0":{"tf":1.0},"11":{"tf":1.4142135623730951},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"df":3,"docs":{"12":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}}}},"t":{"df":0,"docs":{},"x":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"27":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"s":{"df":7,"docs":{"12":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":2.0},"34":{"tf":1.0},"38":{"tf":1.0},"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"58":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"k":{"df":8,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":2.449489742783178},"36":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"m":{"d":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":23,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951},"34":{"tf":2.8284271247461903},"44":{"tf":2.6457513110645907},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.7320508075688772},"52":{"tf":1.4142135623730951},"53":{"tf":2.6457513110645907},"54":{"tf":2.6457513110645907},"55":{"tf":3.0},"56":{"tf":2.0},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{},"l":{"d":{"df":3,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"54":{"tf":2.8284271247461903}}},"df":0,"docs":{},"l":{"a":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"13":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"54":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}},"m":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":3,"docs":{"2":{"tf":1.0},"27":{"tf":1.0},"54":{"tf":1.4142135623730951}}},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"47":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"6":{"tf":1.7320508075688772}}}}},"p":{"a":{"c":{"df":0,"docs":{},"t":{"(":{"df":0,"docs":{},"u":{"1":{"2":{"8":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}},"6":{"4":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":1,"docs":{"57":{"tf":2.449489742783178}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":1,"docs":{"11":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"62":{"tf":1.0}}}}}},"r":{"df":2,"docs":{"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"df":4,"docs":{"45":{"tf":1.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"47":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":5,"docs":{"1":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}},"x":{"df":2,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951}}}},"i":{"df":1,"docs":{"60":{"tf":1.0}}}},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"44":{"tf":2.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}},"u":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"n":{"c":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.0}}}}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"26":{"tf":1.4142135623730951},"29":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.4142135623730951},"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.0}}}}},"t":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"51":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":2.449489742783178},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":9,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.7320508075688772},"53":{"tf":2.23606797749979},"54":{"tf":2.0},"55":{"tf":2.0},"57":{"tf":2.449489742783178},"60":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"58":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"u":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}}}}},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":3,"docs":{"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":2.449489742783178}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"29":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"60":{"tf":1.7320508075688772},"61":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"47":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":16,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"24":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":2.8284271247461903},"34":{"tf":1.0},"36":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":2.0},"42":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":2.0}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"6":{"tf":1.0}}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"58":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}},"u":{"c":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":1,"docs":{"24":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":6,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"20":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"+":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"2":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.0},"58":{"tf":1.0},"60":{"tf":2.0},"7":{"tf":1.7320508075688772}}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}},"v":{"df":1,"docs":{"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":4,"docs":{"24":{"tf":2.0},"38":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":4.898979485566356}}}}}},"t":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":2.0}}}}},"d":{"4":{"3":{"5":{".":{".":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"9":{"3":{"c":{"7":{"1":{"5":{"df":0,"docs":{},"f":{"d":{"d":{"3":{"1":{"c":{"6":{"1":{"1":{"4":{"1":{"a":{"b":{"d":{"0":{"4":{"a":{"9":{"9":{"df":0,"docs":{},"f":{"d":{"6":{"8":{"2":{"2":{"c":{"8":{"5":{"5":{"8":{"8":{"5":{"4":{"c":{"c":{"d":{"df":0,"docs":{},"e":{"3":{"9":{"a":{"5":{"6":{"8":{"4":{"df":0,"docs":{},"e":{"7":{"a":{"5":{"6":{"d":{"a":{"2":{"7":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"k":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}},"t":{"a":{"b":{"a":{"df":0,"docs":{},"s":{"df":8,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.449489742783178},"57":{"tf":3.1622776601683795},"60":{"tf":6.4031242374328485},"61":{"tf":1.0}}}},"df":0,"docs":{}},"df":13,"docs":{"0":{"tf":1.0},"13":{"tf":1.7320508075688772},"20":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"54":{"tf":2.23606797749979},"57":{"tf":4.69041575982343},"60":{"tf":4.0},"61":{"tf":1.0},"62":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":4,"docs":{"1":{"tf":1.0},"26":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":1.0}}}}},"b":{"_":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":1,"docs":{"44":{"tf":1.0}}},"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}},"e":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}}},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"m":{"df":4,"docs":{"28":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"d":{"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"54":{"tf":1.0},"57":{"tf":4.242640687119285},"60":{"tf":2.0}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}}}}},"d":{"df":0,"docs":{},"i":{"c":{"df":4,"docs":{"27":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":1,"docs":{"61":{"tf":1.4142135623730951}},"f":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":12,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{":":{":":{"df":0,"docs":{},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":20,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.4142135623730951},"16":{"tf":3.3166247903554},"17":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.0},"37":{"tf":1.0},"45":{"tf":2.8284271247461903},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":4.47213595499958},"8":{"tf":4.242640687119285}},"e":{"(":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"s":{"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"b":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":4,"docs":{"3":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":2.449489742783178},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":3.1622776601683795}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":3.3166247903554}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":6,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":25,"docs":{"3":{"tf":1.0},"39":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"43":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":1.0},"46":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0},"49":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0},"62":{"tf":1.0}}}}}},"i":{"c":{"df":15,"docs":{"0":{"tf":1.0},"10":{"tf":2.8284271247461903},"12":{"tf":2.449489742783178},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"32":{"tf":2.6457513110645907},"33":{"tf":1.0},"41":{"tf":1.4142135623730951},"42":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"6":{"tf":2.449489742783178},"7":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":13,"docs":{"14":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"8":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"33":{"tf":1.0},"45":{"tf":2.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"s":{"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"0":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"k":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"y":{"df":4,"docs":{"34":{"tf":2.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.0},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":2.0},"58":{"tf":1.0},"8":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"11":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"o":{"c":{"df":2,"docs":{"3":{"tf":1.0},"49":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"50":{"tf":2.0}}}}}}}},"df":4,"docs":{"0":{"tf":1.0},"22":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}},"n":{"'":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":8,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"t":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}},"u":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.4142135623730951},"16":{"tf":1.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":0,"docs":{},"n":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":6,"docs":{"12":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}},"n":{"df":1,"docs":{"6":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"e":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"e":{".":{"df":0,"docs":{},"g":{"df":4,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"41":{"tf":1.0}}}},"1":{"4":{"3":{".":{".":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"2":{"3":{"8":{"0":{"3":{"a":{"c":{"5":{"0":{"df":0,"docs":{},"e":{"8":{"df":0,"docs":{},"f":{"6":{"df":0,"docs":{},"f":{"8":{"df":0,"docs":{},"e":{"6":{"2":{"6":{"9":{"5":{"d":{"1":{"c":{"df":0,"docs":{},"e":{"9":{"df":0,"docs":{},"e":{"4":{"df":0,"docs":{},"e":{"1":{"d":{"6":{"8":{"a":{"a":{"3":{"6":{"c":{"1":{"c":{"d":{"2":{"c":{"df":0,"docs":{},"f":{"d":{"1":{"5":{"3":{"4":{"0":{"2":{"1":{"3":{"df":0,"docs":{},"f":{"3":{"4":{"2":{"3":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"h":{"df":11,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"33":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.7320508075688772},"57":{"tf":2.6457513110645907},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"c":{"d":{"df":0,"docs":{},"s":{"a":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"62":{"tf":2.23606797749979}}}}}}}}}},"d":{"2":{"5":{"5":{"1":{"9":{"df":3,"docs":{"55":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":5,"docs":{"36":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"a":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":1.0},"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.4142135623730951},"45":{"tf":1.0},"58":{"tf":1.0}}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"o":{"d":{"df":9,"docs":{"16":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":3.1622776601683795},"59":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}}},"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.0},"32":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.898979485566356},"61":{"tf":1.4142135623730951}}}}}}},"d":{"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.4142135623730951},"44":{"tf":1.0}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"24":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":2,"docs":{"0":{"tf":1.0},"51":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"15":{"tf":1.0},"24":{"tf":1.0},"34":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772},"8":{"tf":1.7320508075688772}}}},"r":{"df":0,"docs":{},"i":{"df":4,"docs":{"16":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.1622776601683795},"60":{"tf":3.3166247903554}}}}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"53":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"r":{"a":{"df":1,"docs":{"57":{"tf":2.8284271247461903}},"s":{"df":1,"docs":{"45":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":9,"docs":{"16":{"tf":1.0},"40":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":4.47213595499958},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}}}},"t":{"c":{"df":4,"docs":{"20":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"11":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"61":{"tf":1.0}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}},"t":{"df":1,"docs":{"45":{"tf":3.605551275463989}},"u":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":4,"docs":{"11":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0}}}}}}}},"x":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"44":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.23606797749979}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":8,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.0}},"p":{"df":0,"docs":{},"t":{"df":4,"docs":{"24":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"n":{"d":{"df":2,"docs":{"45":{"tf":1.0},"7":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"11":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"7":{"tf":1.0}}},"df":0,"docs":{}}}}}},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"14":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"16":{"tf":1.0},"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"7":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":1,"docs":{"61":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"24":{"tf":2.0},"52":{"tf":1.0}}}},"s":{"df":1,"docs":{"0":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":2.0}},"e":{"d":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"s":{"df":4,"docs":{"57":{"tf":6.708203932499369},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}}}}}}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"30":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}}},"f":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}},"t":{"df":1,"docs":{"45":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"32":{"tf":1.0}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":3,"docs":{"48":{"tf":2.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"n":{"df":1,"docs":{"6":{"tf":1.0}}},"q":{"df":5,"docs":{"3":{"tf":1.0},"5":{"tf":1.7320508075688772},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"r":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":12,"docs":{"1":{"tf":1.4142135623730951},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":2.23606797749979},"57":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":1,"docs":{"29":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"d":{"df":3,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"29":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"w":{"df":2,"docs":{"26":{"tf":1.0},"44":{"tf":1.0}}}},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":3.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"16":{"tf":1.7320508075688772},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"n":{"d":{"df":6,"docs":{"12":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}}}}}}}},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":12,"docs":{"11":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":2.0},"25":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.4142135623730951},"40":{"tf":1.0},"41":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"37":{"tf":1.0}}}}}}},"t":{"df":3,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":1.0}}},"x":{"df":5,"docs":{"19":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"i":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"41":{"tf":1.0},"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":13,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":2.0},"61":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"r":{"b":{"df":0,"docs":{},"i":{"d":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"40":{"tf":1.0}}}}}}},"g":{"df":1,"docs":{"45":{"tf":1.0}}},"m":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":2.6457513110645907},"50":{"tf":2.0}}}},"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"42":{"tf":1.0},"47":{"tf":1.4142135623730951},"57":{"tf":3.1622776601683795},"60":{"tf":3.0}}},"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.0}}}}},"df":0,"docs":{}}}}},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"54":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"54":{"tf":4.58257569495584}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":3,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":1.7320508075688772}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"29":{"tf":1.0},"42":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"20":{"tf":1.7320508075688772},"3":{"tf":1.0},"44":{"tf":2.0},"45":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":9,"docs":{"14":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178}}}}}}},"d":{"df":4,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"30":{"tf":1.0},"34":{"tf":2.23606797749979}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"56":{"tf":1.0}},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"g":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":6,"docs":{"0":{"tf":1.0},"11":{"tf":1.0},"34":{"tf":1.0},"51":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0}}},"r":{"b":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":18,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.7320508075688772},"24":{"tf":2.23606797749979},"27":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"33":{"tf":1.7320508075688772},"38":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":4.0},"49":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":2.0},"60":{"tf":7.416198487095663},"61":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":2.0}}},"s":{"df":0,"docs":{},"i":{"df":4,"docs":{"57":{"tf":3.7416573867739413},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}}},"t":{"df":6,"docs":{"3":{"tf":1.7320508075688772},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951},"61":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{"df":5,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"6":{"tf":1.0}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0}}}}}},"o":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"b":{"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":7,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}},"e":{"df":1,"docs":{"57":{"tf":2.0}}},"o":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"42":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.8284271247461903},"8":{"tf":1.0}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":1,"docs":{"4":{"tf":1.0}}}},"r":{"a":{"d":{"df":0,"docs":{},"l":{"df":2,"docs":{"20":{"tf":1.0},"42":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"62":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"38":{"tf":1.0}}}},"w":{"df":1,"docs":{"8":{"tf":1.0}},"n":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"u":{"a":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"d":{"df":21,"docs":{"21":{"tf":1.7320508075688772},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"h":{"1":{"6":{"0":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"2":{"5":{"6":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"20":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":1,"docs":{"53":{"tf":1.0}}}},"n":{"d":{"df":1,"docs":{"34":{"tf":1.0}},"l":{"df":4,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":2.0},"49":{"tf":1.0}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}},"r":{"d":{"c":{"df":0,"docs":{},"o":{"d":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"16":{"tf":2.0},"24":{"tf":1.0},"44":{"tf":1.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"0":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"h":{"df":6,"docs":{"20":{"tf":1.0},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.0}}}}},"d":{"df":0,"docs":{},"k":{"d":{"df":1,"docs":{"14":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"p":{"df":4,"docs":{"3":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}}},"x":{"a":{"d":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":1,"docs":{"56":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":2.0}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":6,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"h":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"27":{"tf":1.0},"28":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}},"i":{"df":3,"docs":{"20":{"tf":1.7320508075688772},"45":{"tf":2.449489742783178},"57":{"tf":2.449489742783178}}}}}}}},"o":{"df":0,"docs":{},"l":{"d":{"df":6,"docs":{"10":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"32":{"tf":1.0},"60":{"tf":3.3166247903554},"61":{"tf":1.0}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"t":{"df":7,"docs":{"1":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"42":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"s":{":":{"/":{"/":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"u":{"b":{".":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"w":{"3":{"df":0,"docs":{},"f":{"/":{"df":0,"docs":{},"s":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"17":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{".":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"/":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"6":{"tf":1.0}}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"k":{"df":0,"docs":{},"i":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"/":{"d":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"17":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"i":{".":{"df":5,"docs":{"50":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"60":{"tf":3.4641016151377544},"61":{"tf":1.0}},"g":{"df":1,"docs":{"8":{"tf":1.0}}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"12":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.4142135623730951}}}}},"d":{"df":0,"docs":{},"e":{"a":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}},"l":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":10,"docs":{"12":{"tf":1.0},"16":{"tf":1.0},"31":{"tf":1.7320508075688772},"33":{"tf":4.123105625617661},"37":{"tf":2.6457513110645907},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"61":{"tf":1.0}},"i":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":2.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":3.4641016151377544},"60":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.0},"61":{"tf":1.0}}}}}},"m":{"a":{"df":0,"docs":{},"g":{"df":6,"docs":{"29":{"tf":1.0},"37":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"55":{"tf":1.7320508075688772},"57":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"50":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"10":{"tf":1.0},"20":{"tf":1.7320508075688772},"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.6457513110645907},"52":{"tf":1.0},"55":{"tf":1.4142135623730951},"61":{"tf":3.0},"8":{"tf":2.23606797749979}}}},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"v":{"df":1,"docs":{"3":{"tf":1.0}}}}}}},"n":{"c":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"d":{"df":4,"docs":{"0":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.4142135623730951}},"p":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"47":{"tf":1.0}}}}}}},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}}},"x":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":2.6457513110645907}}}},"i":{"c":{"df":7,"docs":{"45":{"tf":2.0},"53":{"tf":1.0},"54":{"tf":2.0},"55":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"60":{"tf":3.3166247903554},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"37":{"tf":1.0}}}}}},"o":{"df":4,"docs":{"32":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"r":{"df":0,"docs":{},"m":{"df":18,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.0},"16":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"32":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"51":{"tf":1.7320508075688772},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":2.449489742783178},"60":{"tf":3.0},"61":{"tf":1.0},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}},"df":0,"docs":{}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"t":{"a":{"df":0,"docs":{},"l":{"df":14,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.7320508075688772},"13":{"tf":1.0},"23":{"tf":2.6457513110645907},"26":{"tf":2.0},"27":{"tf":1.0},"32":{"tf":1.7320508075688772},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"47":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"n":{"c":{"df":2,"docs":{"50":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"53":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":4,"docs":{"16":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"g":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}},"n":{"d":{"df":2,"docs":{"0":{"tf":1.0},"44":{"tf":1.0}}},"df":0,"docs":{}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":4,"docs":{"34":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":2.23606797749979},"8":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"a":{"c":{"df":4,"docs":{"28":{"tf":1.0},"44":{"tf":2.6457513110645907},"45":{"tf":2.6457513110645907},"62":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"n":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":4,"docs":{"50":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.449489742783178},"62":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":2,"docs":{"14":{"tf":1.0},"60":{"tf":2.0}},"t":{"df":3,"docs":{"15":{"tf":1.4142135623730951},"16":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"o":{"df":10,"docs":{"11":{"tf":1.4142135623730951},"13":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"30":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"47":{"tf":1.4142135623730951},"48":{"tf":1.4142135623730951}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.449489742783178}}}},"s":{"df":0,"docs":{},"u":{"df":3,"docs":{"48":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"t":{"'":{"df":4,"docs":{"13":{"tf":1.0},"20":{"tf":1.0},"42":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":7,"docs":{"1":{"tf":1.0},"15":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":2.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}}}},"j":{"df":0,"docs":{},"o":{"b":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"s":{"/":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"p":{"df":1,"docs":{"27":{"tf":1.0}}}}},"df":0,"docs":{}},"df":8,"docs":{"0":{"tf":1.0},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"34":{"tf":3.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":2.23606797749979}}}}},"v":{"df":0,"docs":{},"m":{"df":1,"docs":{"45":{"tf":1.0}}}}},"k":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}},"y":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":6,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"56":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0}}}},"y":{"(":{"df":1,"docs":{"24":{"tf":1.0}}},"b":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":28,"docs":{"0":{"tf":1.0},"1":{"tf":1.7320508075688772},"12":{"tf":1.0},"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":2.8284271247461903},"17":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"24":{"tf":3.872983346207417},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":5.385164807134504},"5":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"57":{"tf":4.242640687119285},"58":{"tf":1.0},"6":{"tf":2.6457513110645907},"60":{"tf":4.0},"61":{"tf":3.0},"8":{"tf":5.656854249492381}},"p":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"r":{"df":1,"docs":{"45":{"tf":1.0}}},"s":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"i":{"df":0,"docs":{},"n":{"d":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"26":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":1,"docs":{"45":{"tf":2.23606797749979}}},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"24":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"g":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}},"n":{"df":6,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"48":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":2.449489742783178}}}}}}},"s":{"df":0,"docs":{},"m":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}}},"u":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"m":{"a":{"df":9,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.0},"30":{"tf":1.4142135623730951},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}}}},"l":{"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"g":{"df":1,"docs":{"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"3":{"tf":1.0},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"33":{"tf":1.4142135623730951},"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"40":{"tf":1.0},"42":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"z":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"a":{"d":{"df":3,"docs":{"1":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979}}},"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":1.4142135623730951}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"0":{"tf":1.0},"24":{"tf":1.0},"6":{"tf":1.0},"8":{"tf":1.0}}}},"v":{"df":4,"docs":{"0":{"tf":1.0},"36":{"tf":1.0},"38":{"tf":1.0},"6":{"tf":1.0}}}},"d":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"24":{"tf":1.0},"34":{"tf":1.0}}}},"g":{"a":{"c":{"df":0,"docs":{},"i":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"df":0,"docs":{}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"c":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":3,"docs":{"53":{"tf":1.0},"57":{"tf":3.3166247903554},"60":{"tf":3.3166247903554}}}}}},"s":{"df":0,"docs":{},"s":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"t":{"'":{"df":2,"docs":{"27":{"tf":1.0},"37":{"tf":1.0}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"i":{"b":{"df":1,"docs":{"44":{"tf":1.4142135623730951}},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":6,"docs":{"20":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"62":{"tf":1.0}}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"4":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":6,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0},"7":{"tf":1.0}}}}},"n":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"49":{"tf":1.4142135623730951}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}}},"s":{"df":0,"docs":{},"t":{"df":5,"docs":{"37":{"tf":1.0},"45":{"tf":2.6457513110645907},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":2,"docs":{"35":{"tf":1.0},"6":{"tf":1.0}}}}}},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":1,"docs":{"60":{"tf":3.0}}}}}},"df":4,"docs":{"29":{"tf":2.0},"55":{"tf":1.4142135623730951},"57":{"tf":2.23606797749979},"60":{"tf":3.4641016151377544}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}},"df":0,"docs":{}},"t":{"df":3,"docs":{"42":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":3,"docs":{"20":{"tf":2.0},"45":{"tf":3.1622776601683795},"57":{"tf":2.0}},"i":{"c":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":2.0},"49":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"60":{"tf":1.0}}}},"n":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"g":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"k":{"df":2,"docs":{"0":{"tf":1.0},"45":{"tf":1.0}}},"p":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"24":{"tf":1.4142135623730951},"33":{"tf":1.4142135623730951}}},"s":{"df":2,"docs":{"1":{"tf":1.0},"45":{"tf":1.0}}},"t":{"df":4,"docs":{"16":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":1,"docs":{"41":{"tf":1.0}},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"48":{"tf":1.0},"7":{"tf":1.0}}}}},"o":{"df":2,"docs":{"42":{"tf":1.0},"48":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"20":{"tf":1.0},"24":{"tf":1.0},"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.23606797749979},"50":{"tf":1.0}}}}},"df":0,"docs":{}}}},"k":{"df":0,"docs":{},"e":{"df":18,"docs":{"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"28":{"tf":2.0},"29":{"tf":1.7320508075688772},"32":{"tf":1.7320508075688772},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":1.4142135623730951},"47":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"n":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"14":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"6":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":10,"docs":{"0":{"tf":1.0},"15":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"42":{"tf":1.0},"54":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"7":{"tf":1.0}}}},"df":0,"docs":{},"f":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"'":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"k":{"df":3,"docs":{"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":4,"docs":{"34":{"tf":1.0},"47":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":2.449489742783178}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":0,"docs":{},"u":{"df":0,"docs":{},"m":{"df":1,"docs":{"3":{"tf":1.0}}}}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"n":{"df":8,"docs":{"15":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}},"t":{"df":1,"docs":{"32":{"tf":1.0}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"20":{"tf":1.0},"45":{"tf":2.449489742783178}}}}}},"n":{"df":0,"docs":{},"u":{"df":3,"docs":{"12":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":11,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"49":{"tf":1.0},"52":{"tf":1.4142135623730951},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":2.449489742783178}},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"29":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":13,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":2.6457513110645907},"29":{"tf":3.872983346207417},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.449489742783178},"52":{"tf":2.0},"55":{"tf":1.0},"57":{"tf":7.681145747868608},"60":{"tf":6.244997998398398},"62":{"tf":1.0},"7":{"tf":3.872983346207417},"8":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"t":{"a":{"d":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"v":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"u":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"d":{"df":4,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}},"u":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"19":{"tf":1.0}}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.7320508075688772},"37":{"tf":2.0}}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":8,"docs":{"0":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.0},"13":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":2.23606797749979},"33":{"tf":1.0},"34":{"tf":1.4142135623730951}},"e":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":0,"docs":{}}}}},"d":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":2.0}}}},"df":0,"docs":{},"e":{"df":9,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":2.23606797749979}},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.0}}},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"3":{"tf":1.0},"45":{"tf":1.4142135623730951},"48":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"33":{"tf":1.0},"34":{"tf":1.0}}}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"0":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":1.4142135623730951},"28":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":2.0},"7":{"tf":1.4142135623730951},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"55":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"57":{"tf":1.0}}},"i":{"df":2,"docs":{"29":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"z":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"a":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}}}},"s":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"u":{"c":{"df":0,"docs":{},"h":{"df":3,"docs":{"20":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"a":{"d":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"54":{"tf":2.6457513110645907}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"54":{"tf":2.449489742783178},"7":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"l":{"df":4,"docs":{"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"n":{"+":{"1":{"df":2,"docs":{"16":{"tf":1.0},"20":{"tf":1.0}}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":10,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"33":{"tf":2.23606797749979},"34":{"tf":1.0},"38":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"60":{"tf":2.8284271247461903},"61":{"tf":1.0},"8":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":4,"docs":{"20":{"tf":2.0},"3":{"tf":1.0},"44":{"tf":3.0},"45":{"tf":3.4641016151377544}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{".":{"df":0,"docs":{},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"j":{"df":1,"docs":{"41":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}}}}}}},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":4,"docs":{"44":{"tf":2.0},"45":{"tf":2.23606797749979},"49":{"tf":1.0},"57":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"k":{"df":1,"docs":{"42":{"tf":2.0}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"d":{"df":22,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":2.0},"23":{"tf":1.0},"24":{"tf":1.0},"25":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"27":{"tf":1.0}}},"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.7320508075688772},"16":{"tf":2.6457513110645907},"20":{"tf":2.6457513110645907},"21":{"tf":1.0},"23":{"tf":2.0},"24":{"tf":2.449489742783178},"25":{"tf":1.0},"26":{"tf":2.6457513110645907},"27":{"tf":4.242640687119285},"28":{"tf":3.0},"29":{"tf":3.1622776601683795},"3":{"tf":1.0},"33":{"tf":2.23606797749979},"37":{"tf":1.4142135623730951},"38":{"tf":2.0},"44":{"tf":1.4142135623730951},"45":{"tf":6.557438524302},"5":{"tf":1.0},"50":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":4.898979485566356},"58":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":9.0},"61":{"tf":2.0},"62":{"tf":1.0},"7":{"tf":5.0},"8":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"60":{"tf":1.0}},"s":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"60":{"tf":2.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}}}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"32":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.0}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}}}}},"w":{"df":19,"docs":{"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.4142135623730951},"21":{"tf":1.0},"24":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"3":{"tf":1.0},"33":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.0},"60":{"tf":2.449489742783178},"7":{"tf":2.23606797749979},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"x":{"df":0,"docs":{},"t":{"df":6,"docs":{"26":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"42":{"tf":1.0},"57":{"tf":1.0},"8":{"tf":1.7320508075688772}}}}},"f":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":2.449489742783178}}},"df":5,"docs":{"24":{"tf":1.0},"3":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"e":{"df":2,"docs":{"13":{"tf":1.0},"60":{"tf":4.58257569495584}}}},"r":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"l":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"53":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":7,"docs":{"16":{"tf":1.0},"3":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":2.0}}},"h":{"df":2,"docs":{"40":{"tf":1.0},"56":{"tf":1.0}}},"i":{"c":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.0},"35":{"tf":1.0}}},"df":0,"docs":{}}},"w":{"df":7,"docs":{"20":{"tf":1.4142135623730951},"26":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.23606797749979},"44":{"tf":1.0}}}},"p":{"df":0,"docs":{},"m":{"/":{"df":0,"docs":{},"y":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"j":{"df":0,"docs":{},"s":{"/":{"c":{"df":0,"docs":{},"o":{"c":{"df":0,"docs":{},"o":{"a":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":2.6457513110645907},"57":{"tf":1.7320508075688772},"59":{"tf":1.0}}}}},"df":0,"docs":{}}}},"o":{"b":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"c":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"6":{"tf":1.0}}}},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":17,"docs":{"10":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0},"34":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.7320508075688772},"60":{"tf":1.0},"61":{"tf":1.0}}}}}}},"l":{"d":{"df":3,"docs":{"40":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.7320508075688772}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.0},"52":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"df":0,"docs":{}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":1.0}}}}},"n":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.4142135623730951},"13":{"tf":1.0},"20":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":16,"docs":{"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"37":{"tf":1.7320508075688772},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"51":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.1622776601683795},"60":{"tf":2.6457513110645907},"61":{"tf":1.4142135623730951},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":2,"docs":{"0":{"tf":1.0},"12":{"tf":1.0}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":7,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.4142135623730951},"41":{"tf":1.0},"42":{"tf":1.4142135623730951},"7":{"tf":1.7320508075688772}}},"r":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"51":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"16":{"tf":1.4142135623730951},"36":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.0}}}}}}},"r":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"g":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":4,"docs":{"11":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951},"62":{"tf":1.0}}}}}}},"s":{"df":4,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":2.0}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":4,"docs":{"24":{"tf":1.0},"53":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"u":{"df":0,"docs":{},"t":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}}},"d":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"df":0,"docs":{}},"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"60":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":3,"docs":{"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.7320508075688772}}}}},"s":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":5,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}},"h":{"df":0,"docs":{},"e":{"a":{"d":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"34":{"tf":1.0}}}}}}}}}},"p":{"a":{"c":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"20":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"54":{"tf":1.7320508075688772}}}}}},"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"f":{"<":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":2,"docs":{"57":{"tf":3.1622776601683795},"60":{"tf":1.4142135623730951}},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"24":{"tf":1.0},"6":{"tf":1.7320508075688772},"8":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.23606797749979},"32":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":2.0}}}}},"s":{"df":6,"docs":{"3":{"tf":1.4142135623730951},"44":{"tf":2.449489742783178},"45":{"tf":2.0},"51":{"tf":1.0},"57":{"tf":3.872983346207417},"7":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"49":{"tf":1.0},"53":{"tf":1.0},"57":{"tf":1.0}}}}},"t":{"_":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":8,"docs":{"1":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":2.23606797749979},"62":{"tf":1.0}},"i":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":2,"docs":{"57":{"tf":1.0},"7":{"tf":1.0}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.7320508075688772},"57":{"tf":1.7320508075688772}}},"t":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":1,"docs":{"45":{"tf":2.449489742783178}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"13":{"tf":1.0}}}}}}},"s":{"df":0,"docs":{},"s":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"d":{"df":6,"docs":{"10":{"tf":1.4142135623730951},"12":{"tf":1.4142135623730951},"16":{"tf":2.6457513110645907},"32":{"tf":1.4142135623730951},"45":{"tf":2.8284271247461903},"57":{"tf":2.449489742783178}}},"df":0,"docs":{}}}}}},"t":{"df":0,"docs":{},"h":{"df":15,"docs":{"15":{"tf":1.0},"16":{"tf":2.23606797749979},"20":{"tf":1.0},"33":{"tf":1.7320508075688772},"36":{"tf":1.7320508075688772},"37":{"tf":1.4142135623730951},"38":{"tf":2.449489742783178},"42":{"tf":1.0},"45":{"tf":2.23606797749979},"52":{"tf":1.0},"57":{"tf":3.0},"6":{"tf":1.0},"60":{"tf":1.4142135623730951},"61":{"tf":1.4142135623730951},"8":{"tf":2.8284271247461903}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":3,"docs":{"22":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":2.23606797749979}}}},"df":11,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"44":{"tf":2.23606797749979},"45":{"tf":2.8284271247461903},"50":{"tf":1.0},"54":{"tf":3.4641016151377544},"55":{"tf":1.0},"56":{"tf":1.7320508075688772},"58":{"tf":1.4142135623730951},"60":{"tf":5.477225575051661},"61":{"tf":2.449489742783178}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"c":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"62":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":6,"docs":{"20":{"tf":1.4142135623730951},"23":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.7320508075688772}}}}}},"i":{"df":0,"docs":{},"o":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}}}},"h":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"34":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"'":{"df":2,"docs":{"0":{"tf":1.0},"34":{"tf":1.0}}},"df":12,"docs":{"0":{"tf":1.4142135623730951},"10":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"20":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"24":{"tf":1.0},"26":{"tf":2.6457513110645907},"32":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":2.449489742783178},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":16,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"15":{"tf":1.0},"24":{"tf":3.605551275463989},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.449489742783178},"36":{"tf":1.7320508075688772},"37":{"tf":2.0},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"61":{"tf":1.0},"8":{"tf":2.449489742783178}}}}},"df":0,"docs":{}},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"c":{"df":3,"docs":{"0":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0}}},"df":0,"docs":{}}}}},"i":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":2,"docs":{"0":{"tf":1.0},"57":{"tf":1.0}}},"df":0,"docs":{}},"n":{"df":2,"docs":{"33":{"tf":1.7320508075688772},"34":{"tf":1.0}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"l":{"a":{"c":{"df":0,"docs":{},"e":{"df":4,"docs":{"11":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":2.23606797749979},"45":{"tf":2.0}}}}}}},"y":{"df":2,"docs":{"11":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":9,"docs":{"11":{"tf":1.0},"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"3":{"tf":1.7320508075688772},"32":{"tf":1.0},"48":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}},"g":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"15":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"24":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":2,"docs":{"24":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"j":{"df":2,"docs":{"1":{"tf":1.0},"37":{"tf":1.0}}}},"/":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"38":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"k":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":37,"docs":{"0":{"tf":3.0},"1":{"tf":1.0},"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":2.6457513110645907},"13":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.0},"16":{"tf":1.0},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"3":{"tf":1.4142135623730951},"30":{"tf":2.449489742783178},"31":{"tf":1.7320508075688772},"32":{"tf":3.0},"33":{"tf":1.0},"34":{"tf":4.58257569495584},"35":{"tf":1.4142135623730951},"37":{"tf":1.4142135623730951},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"45":{"tf":1.0},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":2.23606797749979},"54":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951},"62":{"tf":1.4142135623730951},"7":{"tf":2.23606797749979},"8":{"tf":2.449489742783178},"9":{"tf":1.0}},"j":{"df":7,"docs":{"21":{"tf":1.0},"3":{"tf":1.0},"35":{"tf":2.23606797749979},"36":{"tf":1.7320508075688772},"37":{"tf":1.0},"38":{"tf":1.7320508075688772},"6":{"tf":1.7320508075688772}}},"{":{".":{"df":0,"docs":{},"j":{"df":1,"docs":{"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":1,"docs":{"24":{"tf":1.0}}}}},"r":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":2.0}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"58":{"tf":1.0},"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.0}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"12":{"tf":1.0}}}}},"i":{"b":{"df":0,"docs":{},"l":{"df":8,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"24":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"x":{"df":5,"docs":{"16":{"tf":1.0},"38":{"tf":1.0},"53":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}}},"l":{"df":0,"docs":{},"u":{"d":{"df":6,"docs":{"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.7320508075688772},"58":{"tf":1.0},"60":{"tf":2.449489742783178},"61":{"tf":1.0}},"e":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"61":{"tf":1.0}}}}}}},"df":0,"docs":{},"p":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"p":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"20":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":4,"docs":{"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"60":{"tf":1.0}}}}},"s":{"df":2,"docs":{"45":{"tf":1.0},"8":{"tf":1.7320508075688772}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":1,"docs":{"20":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"_":{"b":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"o":{"df":0,"docs":{},"r":{"df":1,"docs":{"57":{"tf":1.0}},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}}}}},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":8,"docs":{"10":{"tf":1.0},"11":{"tf":1.0},"12":{"tf":1.0},"13":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"9":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"16":{"tf":1.0},"34":{"tf":1.4142135623730951},"45":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{}}},"o":{"b":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"20":{"tf":1.0},"41":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"c":{"df":0,"docs":{},"e":{"d":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"26":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}},"s":{"df":0,"docs":{},"s":{"df":9,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":2.23606797749979},"57":{"tf":2.449489742783178},"59":{"tf":1.0},"60":{"tf":3.605551275463989},"61":{"tf":1.0},"7":{"tf":1.0}}}}}},"d":{"df":0,"docs":{},"u":{"c":{"df":6,"docs":{"45":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":4.242640687119285},"61":{"tf":2.0}},"t":{"df":2,"docs":{"3":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"41":{"tf":1.0},"42":{"tf":1.7320508075688772}}}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.7320508075688772}}}}},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.7320508075688772}},"l":{"df":0,"docs":{},"i":{"df":4,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"58":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979}}}},"df":0,"docs":{}},"o":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":6,"docs":{"1":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"v":{"df":0,"docs":{},"i":{"d":{"df":7,"docs":{"1":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}},"u":{"b":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"45":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":14,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":3.0},"58":{"tf":1.0},"60":{"tf":2.23606797749979},"61":{"tf":1.0},"8":{"tf":2.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":2,"docs":{"50":{"tf":1.0},"7":{"tf":2.0}}}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"h":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}}},"df":0,"docs":{}}},"t":{"df":2,"docs":{"12":{"tf":1.0},"41":{"tf":1.0}}}},"w":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}},"q":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"p":{"c":{"df":3,"docs":{"44":{"tf":1.4142135623730951},"49":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"x":{"df":1,"docs":{"44":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":24,"docs":{"0":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"25":{"tf":1.0},"27":{"tf":1.4142135623730951},"28":{"tf":2.449489742783178},"29":{"tf":2.6457513110645907},"33":{"tf":1.0},"34":{"tf":3.1622776601683795},"44":{"tf":2.449489742783178},"45":{"tf":3.0},"50":{"tf":1.0},"51":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"53":{"tf":2.6457513110645907},"54":{"tf":2.6457513110645907},"55":{"tf":1.7320508075688772},"56":{"tf":2.0},"57":{"tf":1.7320508075688772},"59":{"tf":1.0},"6":{"tf":2.449489742783178},"60":{"tf":1.0},"62":{"tf":1.4142135623730951},"7":{"tf":2.8284271247461903}}},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}},"i":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}}},"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}}}}},"r":{"a":{"c":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":3,"docs":{"24":{"tf":1.7320508075688772},"42":{"tf":1.0},"45":{"tf":1.0}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"q":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":2.8284271247461903}}}}}}},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"e":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"w":{"df":2,"docs":{"53":{"tf":1.0},"56":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"3":{"tf":1.0}},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"d":{"df":13,"docs":{"1":{"tf":1.0},"24":{"tf":1.7320508075688772},"26":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"45":{"tf":1.4142135623730951},"51":{"tf":1.0},"52":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"i":{"df":5,"docs":{"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":3,"docs":{"41":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":2,"docs":{"34":{"tf":1.0},"44":{"tf":1.0}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":10,"docs":{"10":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":1.0},"47":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"60":{"tf":1.0},"8":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":2,"docs":{"51":{"tf":1.0},"60":{"tf":3.605551275463989}}}},"n":{"df":0,"docs":{},"t":{"df":3,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"7":{"tf":1.7320508075688772}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"df":1,"docs":{"8":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":4,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.4142135623730951}}}}}},"m":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"df":7,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"d":{"df":4,"docs":{"26":{"tf":1.0},"45":{"tf":2.449489742783178},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"v":{"df":12,"docs":{"12":{"tf":1.0},"21":{"tf":1.0},"24":{"tf":2.0},"26":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.4142135623730951},"33":{"tf":3.0},"35":{"tf":2.0},"36":{"tf":1.0},"37":{"tf":2.23606797749979},"38":{"tf":1.7320508075688772},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":7,"docs":{"11":{"tf":1.0},"12":{"tf":2.0},"24":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":2.23606797749979},"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}}}}},"d":{"df":1,"docs":{"33":{"tf":1.0}},"u":{"c":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"59":{"tf":1.0}}},"df":0,"docs":{}}},"df":3,"docs":{"20":{"tf":2.0},"44":{"tf":1.0},"45":{"tf":1.0}},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":4,"docs":{"16":{"tf":1.7320508075688772},"17":{"tf":1.4142135623730951},"3":{"tf":1.0},"54":{"tf":1.0}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"60":{"tf":1.0}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"57":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"j":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":3,"docs":{"34":{"tf":1.0},"57":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"l":{"a":{"df":0,"docs":{},"t":{"df":6,"docs":{"33":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"s":{"df":4,"docs":{"19":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"3":{"tf":1.0}}}},"df":0,"docs":{},"v":{"df":1,"docs":{"29":{"tf":1.0}}}},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":3,"docs":{"44":{"tf":1.0},"54":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"24":{"tf":1.0},"45":{"tf":2.23606797749979},"6":{"tf":1.0},"8":{"tf":1.0}}}},"m":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"53":{"tf":1.0}}},"df":5,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"b":{"df":2,"docs":{"20":{"tf":1.0},"44":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"v":{"df":6,"docs":{"0":{"tf":1.0},"26":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":3.4641016151377544},"8":{"tf":1.0}}}}},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"29":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"l":{"a":{"c":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"o":{"df":1,"docs":{"44":{"tf":1.0}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":5,"docs":{"12":{"tf":1.0},"20":{"tf":1.0},"27":{"tf":1.4142135623730951},"62":{"tf":1.0},"7":{"tf":1.0}}}}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":6,"docs":{"34":{"tf":1.4142135623730951},"37":{"tf":1.0},"50":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"58":{"tf":1.0}},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"r":{"df":12,"docs":{"0":{"tf":1.0},"16":{"tf":1.4142135623730951},"2":{"tf":1.4142135623730951},"27":{"tf":1.0},"40":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":3.0},"54":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0},"60":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"r":{"c":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}},"t":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951},"32":{"tf":1.0},"51":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"v":{"df":1,"docs":{"57":{"tf":1.0}}}}},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":5,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951}}}}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"42":{"tf":1.0}}}}},"df":2,"docs":{"45":{"tf":1.4142135623730951},"53":{"tf":1.0}},"o":{"df":0,"docs":{},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":3,"docs":{"16":{"tf":1.0},"57":{"tf":2.23606797749979},"60":{"tf":1.7320508075688772}}}}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"60":{"tf":1.0}}}}}},"v":{"df":0,"docs":{},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"45":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"k":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}},"f":{"c":{"6":{"3":{"3":{"0":{"df":1,"docs":{"54":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":4,"docs":{"12":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}}},"n":{"df":1,"docs":{"3":{"tf":1.4142135623730951}}},"o":{"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":5,"docs":{"16":{"tf":1.0},"24":{"tf":1.7320508075688772},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"54":{"tf":1.0}}}}},"p":{"c":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":2,"docs":{"27":{"tf":1.4142135623730951},"28":{"tf":1.0}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"df":8,"docs":{"10":{"tf":1.0},"28":{"tf":2.449489742783178},"29":{"tf":2.0},"32":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"44":{"tf":1.0},"52":{"tf":1.0}},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":2,"docs":{"57":{"tf":1.4142135623730951},"60":{"tf":2.0}},"v":{"1":{"4":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}}},"s":{"df":0,"docs":{},"t":{".":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"n":{"d":{"=":{"df":0,"docs":{},"p":{"df":0,"docs":{},"y":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"3":{"df":1,"docs":{"42":{"tf":1.0}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}}}}}},"/":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":14,"docs":{"20":{"tf":2.449489742783178},"27":{"tf":1.0},"3":{"tf":1.0},"40":{"tf":1.7320508075688772},"41":{"tf":1.0},"42":{"tf":1.0},"44":{"tf":3.872983346207417},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"49":{"tf":1.7320508075688772},"54":{"tf":1.0},"56":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"40":{"tf":1.0}}}}}}}},"s":{"a":{"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":12,"docs":{"11":{"tf":1.0},"15":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}},"t":{"df":0,"docs":{},"i":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"7":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"e":{"df":15,"docs":{"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":2.0},"57":{"tf":2.0},"59":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":3.872983346207417},"7":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"42":{"tf":1.0}}}}},"c":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":5,"docs":{"45":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":2.6457513110645907},"61":{"tf":1.0}}}},"n":{"df":12,"docs":{"20":{"tf":1.4142135623730951},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":2.6457513110645907},"54":{"tf":2.23606797749979},"56":{"tf":1.0},"57":{"tf":2.23606797749979},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951},"7":{"tf":2.6457513110645907}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":5,"docs":{"28":{"tf":1.0},"29":{"tf":1.0},"56":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.4142135623730951}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":6,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"33":{"tf":1.4142135623730951},"34":{"tf":1.0},"45":{"tf":3.605551275463989},"8":{"tf":1.0}}}}},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}}}},"d":{"df":0,"docs":{},"k":{"'":{"df":1,"docs":{"42":{"tf":1.0}}},"df":1,"docs":{"42":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":2,"docs":{"34":{"tf":1.0},"45":{"tf":1.0}}}}}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"57":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"d":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}},"df":4,"docs":{"45":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":8,"docs":{"1":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"27":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":4.58257569495584}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"42":{"tf":1.0},"44":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":16,"docs":{"1":{"tf":2.0},"10":{"tf":2.23606797749979},"11":{"tf":1.4142135623730951},"12":{"tf":2.0},"13":{"tf":1.0},"20":{"tf":1.0},"22":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.4142135623730951},"32":{"tf":1.7320508075688772},"34":{"tf":1.0},"45":{"tf":3.3166247903554},"6":{"tf":2.449489742783178},"8":{"tf":1.0},"9":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"e":{"d":{"df":14,"docs":{"15":{"tf":1.7320508075688772},"16":{"tf":1.4142135623730951},"20":{"tf":1.7320508075688772},"23":{"tf":1.4142135623730951},"24":{"tf":4.358898943540674},"26":{"tf":1.7320508075688772},"28":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":4.795831523312719},"5":{"tf":1.0},"6":{"tf":1.0},"61":{"tf":1.4142135623730951},"8":{"tf":4.69041575982343}}},"df":7,"docs":{"24":{"tf":1.4142135623730951},"3":{"tf":1.0},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"45":{"tf":1.0},"57":{"tf":1.4142135623730951},"6":{"tf":1.0}},"m":{"df":1,"docs":{"48":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}}},"n":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}}}},"g":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":2.0},"45":{"tf":1.4142135623730951},"8":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"f":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"n":{"d":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"34":{"tf":2.6457513110645907}}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"0":{"tf":1.0},"8":{"tf":1.0}}}}},"t":{"df":3,"docs":{"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772}}}},"p":{"a":{"df":0,"docs":{},"r":{"df":5,"docs":{"10":{"tf":1.0},"16":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772}}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":4,"docs":{"53":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":2.0}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"i":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"v":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"52":{"tf":1.0}}}}}}},"t":{"df":10,"docs":{"12":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.23606797749979},"30":{"tf":1.0},"33":{"tf":1.4142135623730951},"52":{"tf":1.0},"57":{"tf":3.4641016151377544},"60":{"tf":4.358898943540674},"61":{"tf":1.4142135623730951}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"p":{"df":2,"docs":{"31":{"tf":1.0},"33":{"tf":1.4142135623730951}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"28":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{},"e":{"df":2,"docs":{"56":{"tf":1.4142135623730951},"8":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":2,"docs":{"27":{"tf":1.0},"7":{"tf":1.4142135623730951}}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"53":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.0}}}},"w":{"df":3,"docs":{"12":{"tf":1.0},"54":{"tf":2.0},"57":{"tf":1.7320508075688772}},"n":{"df":4,"docs":{"20":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"d":{"df":0,"docs":{},"e":{"b":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"34":{"tf":1.0}}}},"df":0,"docs":{}},"df":5,"docs":{"33":{"tf":1.0},"44":{"tf":2.449489742783178},"45":{"tf":2.6457513110645907},"47":{"tf":1.4142135623730951},"57":{"tf":1.0}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"_":{"a":{"d":{"d":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"s":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"r":{"2":{"5":{"5":{"1":{"9":{"df":1,"docs":{"28":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"v":{"8":{"0":{"0":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"a":{"b":{"df":0,"docs":{},"l":{"df":4,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":20,"docs":{"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"28":{"tf":2.23606797749979},"29":{"tf":2.0},"34":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.4142135623730951},"56":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.0},"59":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":3.7416573867739413},"61":{"tf":1.0}}}}}},"df":22,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"11":{"tf":1.4142135623730951},"20":{"tf":2.23606797749979},"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"27":{"tf":2.23606797749979},"28":{"tf":2.23606797749979},"29":{"tf":2.6457513110645907},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":2.6457513110645907},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":3.872983346207417},"58":{"tf":2.23606797749979},"59":{"tf":1.0},"60":{"tf":3.7416573867739413},"7":{"tf":1.0}},"e":{"d":{")":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"v":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}},"u":{"df":0,"docs":{},"p":{"d":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}}}},"_":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}}}}}}}}}}}},"df":0,"docs":{},"r":{"/":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}}}}}},"@":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"6":{"tf":1.0}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"df":6,"docs":{"27":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":1.0},"6":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"50":{"tf":1.0}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"57":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"l":{"df":4,"docs":{"13":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"23":{"tf":1.0},"26":{"tf":1.0}}}}},"i":{"c":{"df":1,"docs":{"45":{"tf":1.0}}},"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"l":{"df":2,"docs":{"41":{"tf":1.4142135623730951},"42":{"tf":1.0}},"t":{"a":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"l":{"df":9,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.4142135623730951},"52":{"tf":1.4142135623730951},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"59":{"tf":1.0},"60":{"tf":1.4142135623730951},"8":{"tf":1.4142135623730951}}}}},"t":{"df":1,"docs":{"34":{"tf":1.0}},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"u":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"z":{"df":0,"docs":{},"e":{"df":2,"docs":{"54":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"k":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":1,"docs":{"20":{"tf":1.0}}}}},"l":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"16":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.0}}}}}}}}},"m":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"11":{"tf":1.0},"34":{"tf":1.0},"44":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":3,"docs":{"0":{"tf":1.7320508075688772},"44":{"tf":1.0},"6":{"tf":1.0}},"e":{"'":{"df":1,"docs":{"0":{"tf":1.0}}},"df":0,"docs":{}}}}}}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"51":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":1,"docs":{"16":{"tf":2.0}},"w":{"a":{"df":0,"docs":{},"r":{"df":3,"docs":{"25":{"tf":1.0},"27":{"tf":1.0},"44":{"tf":1.0}}}},"df":0,"docs":{}}}},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}},"u":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"a":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{}},"df":1,"docs":{"44":{"tf":1.0}}}},"m":{"df":0,"docs":{},"e":{"(":{"_":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":3.0}}},"a":{"df":1,"docs":{"60":{"tf":3.4641016151377544}}},"b":{"df":1,"docs":{"60":{"tf":2.449489742783178}}},"c":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"45":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"60":{"tf":1.0}}},"i":{"df":0,"docs":{},"m":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"w":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"df":4,"docs":{"2":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"60":{"tf":1.0}}}},"r":{"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"13":{"tf":1.0},"44":{"tf":1.4142135623730951}}}},"u":{"df":0,"docs":{},"r":{"c":{"df":4,"docs":{"20":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"60":{"tf":1.0}}},"df":0,"docs":{}}}},"p":{"a":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"53":{"tf":1.0}}}}},"df":0,"docs":{}},"df":0,"docs":{},"e":{"c":{"df":10,"docs":{"27":{"tf":1.7320508075688772},"28":{"tf":4.123105625617661},"29":{"tf":1.0},"45":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":2.449489742783178},"60":{"tf":6.164414002968976},"61":{"tf":1.0},"7":{"tf":2.23606797749979}},"i":{"a":{"df":0,"docs":{},"l":{"df":5,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"50":{"tf":1.0},"57":{"tf":2.23606797749979},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":7,"docs":{"24":{"tf":1.0},"27":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.0},"62":{"tf":1.4142135623730951}},"i":{"df":5,"docs":{"33":{"tf":1.0},"36":{"tf":1.0},"42":{"tf":1.0},"55":{"tf":1.0},"60":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"60":{"tf":2.0}}}}}}},"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"54":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"2":{"5":{"5":{"1":{"9":{"df":6,"docs":{"28":{"tf":1.7320508075688772},"29":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"s":{"5":{"8":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"40":{"tf":1.0},"57":{"tf":1.0}}}},"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"f":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"w":{"df":1,"docs":{"42":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":1,"docs":{"33":{"tf":1.0}}}},"n":{"d":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}},"r":{"d":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.0},"57":{"tf":1.0},"62":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"t":{"df":17,"docs":{"15":{"tf":1.0},"16":{"tf":1.7320508075688772},"21":{"tf":1.0},"22":{"tf":1.7320508075688772},"23":{"tf":2.0},"24":{"tf":2.23606797749979},"25":{"tf":1.0},"26":{"tf":2.23606797749979},"27":{"tf":1.0},"3":{"tf":2.0},"37":{"tf":1.0},"41":{"tf":1.0},"47":{"tf":1.4142135623730951},"53":{"tf":1.0},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"60":{"tf":1.0}},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"e":{"df":6,"docs":{"23":{"tf":1.7320508075688772},"26":{"tf":1.4142135623730951},"45":{"tf":3.7416573867739413},"47":{"tf":1.0},"50":{"tf":1.0},"57":{"tf":2.0}}},"i":{"c":{"df":4,"docs":{"44":{"tf":1.0},"45":{"tf":2.23606797749979},"54":{"tf":1.0},"60":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"df":1,"docs":{"45":{"tf":1.7320508075688772}}}},"y":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"df":1,"docs":{"6":{"tf":1.0}}}},"p":{"df":7,"docs":{"26":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"i":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"1":{"tf":1.0},"45":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"b":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":1,"docs":{"33":{"tf":1.0}}}}}}}}}}}},"df":0,"docs":{}}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"p":{"df":1,"docs":{"45":{"tf":1.0}}},"r":{"a":{"df":0,"docs":{},"g":{"df":5,"docs":{"0":{"tf":1.0},"20":{"tf":1.7320508075688772},"44":{"tf":1.0},"45":{"tf":2.8284271247461903},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":18,"docs":{"0":{"tf":1.0},"1":{"tf":1.0},"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.4142135623730951},"15":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":1.0},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":3.3166247903554},"54":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.4142135623730951},"60":{"tf":2.8284271247461903}}}}},"r":{"df":1,"docs":{"45":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{":":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"u":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":7,"docs":{"16":{"tf":1.0},"36":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":2.449489742783178},"56":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"58":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"x":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":2,"docs":{"12":{"tf":1.0},"45":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"41":{"tf":1.0}}}}}}},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"44":{"tf":1.7320508075688772}},"u":{"df":0,"docs":{},"r":{"df":10,"docs":{"42":{"tf":1.0},"43":{"tf":1.7320508075688772},"44":{"tf":2.449489742783178},"45":{"tf":2.23606797749979},"53":{"tf":1.7320508075688772},"57":{"tf":1.4142135623730951},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}},"u":{"d":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"42":{"tf":1.7320508075688772}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":1,"docs":{"45":{"tf":1.0}}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":1,"docs":{"16":{"tf":1.0}}}}}},"u":{"b":{"df":1,"docs":{"44":{"tf":1.0}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":7,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"27":{"tf":1.7320508075688772},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":1.0},"7":{"tf":1.0}}}}},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"6":{"tf":1.0}}}}},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"53":{"tf":1.0}}}},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"0":{"tf":1.4142135623730951},"1":{"tf":1.0},"14":{"tf":1.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"27":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"50":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.4142135623730951},"7":{"tf":1.0}},"e":{".":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":1,"docs":{"8":{"tf":1.0}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}}}}},"c":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":2,"docs":{"1":{"tf":1.0},"57":{"tf":1.4142135623730951}},"f":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}}}}}}}}},"df":0,"docs":{},"h":{"df":6,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"44":{"tf":2.0},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"0":{"tf":1.0}},"i":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.0},"45":{"tf":1.0},"54":{"tf":1.7320508075688772},"57":{"tf":1.0}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":7,"docs":{"16":{"tf":1.0},"22":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.7320508075688772}}}}}}},"i":{"df":0,"docs":{},"t":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}}}}},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":11,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}}},"r":{"df":0,"docs":{},"e":{"df":11,"docs":{"10":{"tf":1.0},"11":{"tf":1.7320508075688772},"12":{"tf":1.7320508075688772},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"26":{"tf":2.449489742783178},"27":{"tf":1.0},"32":{"tf":1.4142135623730951},"34":{"tf":1.7320508075688772},"40":{"tf":1.0},"47":{"tf":1.0}}},"i":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951}}},"p":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"45":{"tf":1.0}}}}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"p":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}}}}},"w":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.4142135623730951},"45":{"tf":1.0}}}},"t":{"c":{"df":0,"docs":{},"h":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"24":{"tf":1.0},"32":{"tf":1.0}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":4,"docs":{"24":{"tf":1.0},"28":{"tf":1.0},"47":{"tf":1.4142135623730951},"53":{"tf":1.0}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"n":{"c":{"df":1,"docs":{"1":{"tf":1.0}},"h":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":7,"docs":{"2":{"tf":1.4142135623730951},"20":{"tf":1.0},"23":{"tf":1.7320508075688772},"26":{"tf":1.7320508075688772},"40":{"tf":1.0},"45":{"tf":2.6457513110645907},"60":{"tf":1.4142135623730951}}}}}}}},"t":{":":{":":{"b":{"a":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"57":{"tf":1.0},"60":{"tf":2.6457513110645907}}}},"k":{"df":0,"docs":{},"e":{"df":2,"docs":{"29":{"tf":1.0},"45":{"tf":1.0}},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"p":{"df":7,"docs":{"12":{"tf":1.7320508075688772},"16":{"tf":1.7320508075688772},"24":{"tf":1.7320508075688772},"33":{"tf":2.0},"34":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0}}},"r":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"n":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"16":{"tf":1.0}}},"df":0,"docs":{}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":3,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"32":{"tf":1.0}}}}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"24":{"tf":1.0}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.4142135623730951}}}}}}}}}},"s":{"df":0,"docs":{},"t":{"df":4,"docs":{"44":{"tf":1.7320508075688772},"55":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.4142135623730951}}}},"x":{"df":0,"docs":{},"t":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"10":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.0},"50":{"tf":1.0}}}}}}}},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":2,"docs":{"44":{"tf":1.7320508075688772},"45":{"tf":1.0}}},"k":{"df":1,"docs":{"33":{"tf":1.0}}}}},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":7,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"45":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":3,"docs":{"16":{"tf":1.0},"24":{"tf":1.0},"45":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"e":{"a":{"d":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":1.0}}},"df":0,"docs":{},"t":{"df":3,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"g":{"df":0,"docs":{},"h":{"df":12,"docs":{"20":{"tf":1.0},"23":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.1622776601683795},"54":{"tf":1.7320508075688772},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0}}}}}}},"u":{"df":6,"docs":{"16":{"tf":1.0},"20":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":4.242640687119285},"57":{"tf":1.7320508075688772},"60":{"tf":1.4142135623730951}}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}},"g":{"df":0,"docs":{},"h":{"df":0,"docs":{},"t":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"df":1,"docs":{"24":{"tf":1.0}}}}}}},"m":{"df":0,"docs":{},"e":{"df":11,"docs":{"23":{"tf":1.0},"24":{"tf":1.4142135623730951},"26":{"tf":1.0},"29":{"tf":1.0},"33":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.7320508075688772},"45":{"tf":2.0},"54":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979}}}},"p":{"df":2,"docs":{"34":{"tf":1.0},"57":{"tf":2.0}}},"t":{"df":0,"docs":{},"l":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}},"o":{"_":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":3,"docs":{"0":{"tf":1.0},"30":{"tf":1.0},"45":{"tf":1.0}}}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":3,"docs":{"28":{"tf":2.23606797749979},"44":{"tf":1.0},"6":{"tf":2.0}}}}},"o":{"df":0,"docs":{},"l":{"df":8,"docs":{"27":{"tf":1.0},"3":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":2.23606797749979},"6":{"tf":1.4142135623730951},"62":{"tf":1.7320508075688772},"8":{"tf":1.0}}}},"p":{"df":6,"docs":{"12":{"tf":1.4142135623730951},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.7320508075688772},"8":{"tf":1.0}}},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"u":{"c":{"df":0,"docs":{},"h":{"df":2,"docs":{"45":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":22,"docs":{"1":{"tf":1.0},"11":{"tf":1.0},"20":{"tf":1.4142135623730951},"24":{"tf":1.0},"27":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.0},"31":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":4.0},"44":{"tf":1.4142135623730951},"45":{"tf":3.3166247903554},"49":{"tf":1.0},"52":{"tf":2.0},"55":{"tf":2.23606797749979},"57":{"tf":6.324555320336759},"58":{"tf":1.7320508075688772},"59":{"tf":2.449489742783178},"6":{"tf":1.7320508075688772},"60":{"tf":2.0},"7":{"tf":1.7320508075688772},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"/":{"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"52":{"tf":1.0}}}}}}}}}},"_":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"_":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"_":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}}}},"df":9,"docs":{"0":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"30":{"tf":1.0},"34":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951},"62":{"tf":1.0}}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":2,"docs":{"60":{"tf":2.0},"61":{"tf":1.0}}}}}},"l":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"59":{"tf":1.0}}}},"df":0,"docs":{}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"54":{"tf":1.4142135623730951},"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"e":{"df":2,"docs":{"45":{"tf":1.4142135623730951},"60":{"tf":2.449489742783178}}}},"i":{"a":{"d":{"df":1,"docs":{"44":{"tf":1.0}}},"df":0,"docs":{}},"c":{"df":0,"docs":{},"k":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":6,"docs":{"34":{"tf":1.0},"42":{"tf":1.0},"45":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":1.7320508075688772},"6":{"tf":1.0}},"g":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":2,"docs":{"45":{"tf":1.7320508075688772},"57":{"tf":2.23606797749979}}}}}}},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":3,"docs":{"46":{"tf":1.7320508075688772},"47":{"tf":1.0},"48":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}},"u":{"df":0,"docs":{},"e":{"df":1,"docs":{"6":{"tf":1.0}}},"s":{"df":0,"docs":{},"t":{"df":3,"docs":{"20":{"tf":1.0},"45":{"tf":2.0},"60":{"tf":1.4142135623730951}}}},"t":{"df":0,"docs":{},"h":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":6,"docs":{"0":{"tf":1.7320508075688772},"33":{"tf":1.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"6":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":9,"docs":{"0":{"tf":1.0},"21":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":2.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"35":{"tf":1.0}}}}}}},"w":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"o":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"x":{"df":1,"docs":{"57":{"tf":1.7320508075688772}}},"y":{"df":1,"docs":{"57":{"tf":1.4142135623730951}},"p":{"df":0,"docs":{},"e":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"57":{"tf":1.0}}}},"df":0,"docs":{}}},"df":14,"docs":{"16":{"tf":1.4142135623730951},"24":{"tf":1.0},"3":{"tf":1.0},"33":{"tf":1.4142135623730951},"44":{"tf":1.4142135623730951},"45":{"tf":1.7320508075688772},"52":{"tf":1.7320508075688772},"54":{"tf":1.4142135623730951},"55":{"tf":1.0},"56":{"tf":1.4142135623730951},"57":{"tf":5.830951894845301},"60":{"tf":4.795831523312719},"61":{"tf":1.0},"8":{"tf":1.0}},"s":{"a":{"df":0,"docs":{},"f":{"df":1,"docs":{"44":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"44":{"tf":1.0}}}}}}},"c":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"p":{"df":0,"docs":{},"t":{"df":1,"docs":{"20":{"tf":1.0}}}}}}},"df":0,"docs":{}}},"i":{"c":{"df":2,"docs":{"45":{"tf":1.0},"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"o":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"u":{"1":{"6":{"df":1,"docs":{"60":{"tf":1.0}}},"df":0,"docs":{}},"3":{"2":{"df":1,"docs":{"57":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"8":{"df":4,"docs":{"51":{"tf":1.0},"57":{"tf":2.23606797749979},"58":{"tf":1.4142135623730951},"60":{"tf":2.0}}},"df":2,"docs":{"28":{"tf":2.0},"29":{"tf":1.4142135623730951}},"i":{"df":4,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"45":{"tf":2.8284271247461903}}},"n":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}},"r":{"df":3,"docs":{"16":{"tf":1.0},"45":{"tf":1.4142135623730951},"60":{"tf":1.4142135623730951}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"x":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"60":{"tf":1.0}}}},"df":0,"docs":{}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":2,"docs":{"44":{"tf":2.23606797749979},"47":{"tf":1.0}}}},"i":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"44":{"tf":1.4142135623730951}}}}}},"q":{"df":0,"docs":{},"u":{"df":1,"docs":{"8":{"tf":1.4142135623730951}}}},"t":{"df":5,"docs":{"28":{"tf":1.4142135623730951},"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":2.0},"60":{"tf":1.0}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":12,"docs":{"50":{"tf":1.0},"51":{"tf":1.0},"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":1.0},"58":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0},"61":{"tf":1.0}}}}}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":3,"docs":{"24":{"tf":1.4142135623730951},"45":{"tf":1.0},"60":{"tf":1.0}}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"33":{"tf":1.0}}}},"df":0,"docs":{}}},"p":{"df":0,"docs":{},"r":{"a":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"45":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"g":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.7320508075688772},"55":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772}}}}},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":2,"docs":{"16":{"tf":1.0},"54":{"tf":1.4142135623730951}}}}},"u":{"df":0,"docs":{},"s":{"df":1,"docs":{"57":{"tf":1.0}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":2.449489742783178}}}}}}}}},"o":{"df":4,"docs":{"45":{"tf":2.0},"50":{"tf":1.4142135623730951},"55":{"tf":1.0},"62":{"tf":1.0}}},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":14,"docs":{"12":{"tf":1.7320508075688772},"20":{"tf":2.0},"27":{"tf":2.6457513110645907},"29":{"tf":1.0},"40":{"tf":1.4142135623730951},"42":{"tf":1.0},"44":{"tf":2.23606797749979},"45":{"tf":4.242640687119285},"51":{"tf":1.0},"52":{"tf":1.0},"55":{"tf":2.23606797749979},"57":{"tf":2.23606797749979},"60":{"tf":8.888194417315589},"7":{"tf":3.1622776601683795}},"e":{"_":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"d":{"_":{"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"m":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"(":{"df":0,"docs":{},"v":{"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{}}}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":12,"docs":{"16":{"tf":1.0},"23":{"tf":1.4142135623730951},"24":{"tf":1.4142135623730951},"26":{"tf":2.8284271247461903},"30":{"tf":1.0},"33":{"tf":1.0},"45":{"tf":1.7320508075688772},"52":{"tf":1.0},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":1.0},"8":{"tf":2.0}},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":4,"docs":{"21":{"tf":1.0},"25":{"tf":2.23606797749979},"26":{"tf":1.7320508075688772},"3":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":2,"docs":{"45":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"50":{"tf":1.0},"62":{"tf":1.0}}}},"df":0,"docs":{}}}}}},"r":{"df":0,"docs":{},"l":{"df":3,"docs":{"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.0}}}},"s":{"a":{"df":0,"docs":{},"g":{"df":3,"docs":{"22":{"tf":1.0},"45":{"tf":1.0},"60":{"tf":1.0}}}},"b":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0}}},"df":32,"docs":{"0":{"tf":2.0},"1":{"tf":1.7320508075688772},"10":{"tf":1.7320508075688772},"11":{"tf":1.7320508075688772},"12":{"tf":1.0},"14":{"tf":1.0},"16":{"tf":1.0},"20":{"tf":3.0},"23":{"tf":1.0},"24":{"tf":3.1622776601683795},"26":{"tf":1.7320508075688772},"3":{"tf":2.0},"30":{"tf":1.0},"32":{"tf":2.0},"34":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":3.4641016151377544},"45":{"tf":4.358898943540674},"48":{"tf":1.0},"50":{"tf":1.7320508075688772},"51":{"tf":1.0},"52":{"tf":1.4142135623730951},"53":{"tf":1.0},"55":{"tf":1.4142135623730951},"57":{"tf":5.0990195135927845},"58":{"tf":1.0},"6":{"tf":2.8284271247461903},"60":{"tf":4.69041575982343},"61":{"tf":1.0},"62":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.4142135623730951}},"e":{"df":0,"docs":{},"r":{"'":{"df":1,"docs":{"45":{"tf":1.0}}},"df":30,"docs":{"12":{"tf":1.0},"16":{"tf":1.4142135623730951},"20":{"tf":1.0},"21":{"tf":1.7320508075688772},"22":{"tf":1.0},"23":{"tf":1.7320508075688772},"24":{"tf":1.0},"25":{"tf":1.0},"26":{"tf":1.7320508075688772},"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"3":{"tf":1.4142135623730951},"30":{"tf":1.0},"31":{"tf":1.0},"32":{"tf":1.0},"33":{"tf":1.7320508075688772},"34":{"tf":1.0},"35":{"tf":1.0},"36":{"tf":1.0},"37":{"tf":1.0},"38":{"tf":1.0},"44":{"tf":1.4142135623730951},"45":{"tf":4.47213595499958},"51":{"tf":1.0},"57":{"tf":2.6457513110645907},"58":{"tf":1.0},"60":{"tf":3.1622776601683795},"61":{"tf":1.0},"7":{"tf":1.0}}}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"44":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":3,"docs":{"11":{"tf":1.0},"6":{"tf":1.4142135623730951},"8":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"f":{"df":1,"docs":{"58":{"tf":1.4142135623730951}}}}},"v":{"1":{"2":{"df":2,"docs":{"57":{"tf":2.8284271247461903},"60":{"tf":1.4142135623730951}}},"3":{"df":3,"docs":{"52":{"tf":1.0},"57":{"tf":3.0},"60":{"tf":1.4142135623730951}}},"4":{"df":2,"docs":{"57":{"tf":2.449489742783178},"60":{"tf":2.0}}},"df":0,"docs":{}},"2":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"2":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"3":{"df":1,"docs":{"33":{"tf":1.0}}},"4":{".":{"0":{"df":1,"docs":{"12":{"tf":1.0}}},"df":0,"docs":{}},"df":3,"docs":{"14":{"tf":1.4142135623730951},"30":{"tf":1.0},"35":{"tf":1.0}}},"5":{"df":1,"docs":{"25":{"tf":1.0}}},"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"d":{"df":6,"docs":{"23":{"tf":1.0},"26":{"tf":1.0},"45":{"tf":1.0},"58":{"tf":1.4142135623730951},"60":{"tf":1.7320508075688772},"61":{"tf":1.4142135623730951}}},"df":0,"docs":{}},"u":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"32":{"tf":1.0},"6":{"tf":1.0}}}},"df":0,"docs":{}},"df":4,"docs":{"44":{"tf":1.4142135623730951},"57":{"tf":1.0},"6":{"tf":1.0},"60":{"tf":2.23606797749979}}}},"r":{"df":0,"docs":{},"i":{"a":{"b":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.0}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":5,"docs":{"14":{"tf":1.0},"30":{"tf":1.0},"35":{"tf":1.0},"55":{"tf":1.0},"57":{"tf":1.0}}}}},"df":1,"docs":{"57":{"tf":1.0}},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":1,"docs":{"57":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"'":{"df":3,"docs":{"12":{"tf":1.0},"31":{"tf":1.0},"34":{"tf":1.7320508075688772}}},"df":52,"docs":{"0":{"tf":2.6457513110645907},"1":{"tf":2.23606797749979},"10":{"tf":1.4142135623730951},"11":{"tf":1.4142135623730951},"12":{"tf":2.449489742783178},"13":{"tf":1.4142135623730951},"14":{"tf":2.0},"15":{"tf":1.0},"16":{"tf":1.4142135623730951},"17":{"tf":1.0},"18":{"tf":1.0},"19":{"tf":1.0},"2":{"tf":1.4142135623730951},"20":{"tf":2.0},"22":{"tf":1.4142135623730951},"23":{"tf":2.8284271247461903},"24":{"tf":2.8284271247461903},"25":{"tf":1.7320508075688772},"26":{"tf":3.3166247903554},"27":{"tf":2.449489742783178},"28":{"tf":1.4142135623730951},"29":{"tf":2.0},"3":{"tf":2.23606797749979},"30":{"tf":1.7320508075688772},"31":{"tf":1.0},"32":{"tf":3.0},"33":{"tf":1.0},"34":{"tf":2.8284271247461903},"35":{"tf":1.4142135623730951},"37":{"tf":1.0},"38":{"tf":1.0},"4":{"tf":1.4142135623730951},"43":{"tf":1.7320508075688772},"44":{"tf":3.3166247903554},"45":{"tf":4.0},"49":{"tf":1.0},"5":{"tf":1.0},"50":{"tf":2.23606797749979},"51":{"tf":2.0},"52":{"tf":1.7320508075688772},"54":{"tf":3.1622776601683795},"55":{"tf":1.0},"56":{"tf":1.0},"57":{"tf":5.744562646538029},"58":{"tf":1.0},"6":{"tf":4.123105625617661},"60":{"tf":7.810249675906654},"61":{"tf":2.23606797749979},"62":{"tf":2.8284271247461903},"7":{"tf":3.1622776601683795},"8":{"tf":2.449489742783178},"9":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"<":{"df":0,"docs":{},"t":{"df":0,"docs":{},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"60":{"tf":1.7320508075688772}}}}}}}}}}},"u":{"8":{"df":3,"docs":{"57":{"tf":1.0},"59":{"tf":1.0},"60":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":4,"docs":{"51":{"tf":1.0},"54":{"tf":1.4142135623730951},"57":{"tf":1.0},"60":{"tf":1.7320508075688772}}}}}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":2,"docs":{"23":{"tf":1.4142135623730951},"26":{"tf":1.4142135623730951}}}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":1,"docs":{"60":{"tf":1.7320508075688772}},"i":{"df":9,"docs":{"11":{"tf":1.0},"12":{"tf":1.0},"27":{"tf":1.0},"28":{"tf":1.4142135623730951},"29":{"tf":1.4142135623730951},"45":{"tf":2.449489742783178},"60":{"tf":10.862780491200215},"7":{"tf":2.0},"8":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}}}}}},"s":{"a":{"df":1,"docs":{"45":{"tf":1.0}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":17,"docs":{"14":{"tf":1.4142135623730951},"19":{"tf":1.0},"2":{"tf":1.0},"20":{"tf":1.7320508075688772},"23":{"tf":1.0},"24":{"tf":1.0},"26":{"tf":1.0},"3":{"tf":1.7320508075688772},"30":{"tf":1.4142135623730951},"35":{"tf":1.4142135623730951},"40":{"tf":1.0},"47":{"tf":1.4142135623730951},"50":{"tf":1.0},"52":{"tf":1.0},"57":{"tf":5.291502622129181},"60":{"tf":3.1622776601683795},"7":{"tf":2.23606797749979}}}}}}}},"i":{"a":{"df":3,"docs":{"27":{"tf":1.0},"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"c":{"df":0,"docs":{},"e":{"df":1,"docs":{"45":{"tf":1.0}}}},"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"o":{"df":1,"docs":{"20":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"w":{"df":2,"docs":{"44":{"tf":1.0},"45":{"tf":2.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"29":{"tf":1.0}}}}}},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"42":{"tf":1.0},"45":{"tf":1.0}}}},"df":0,"docs":{}}}},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":1,"docs":{"34":{"tf":1.0}}}},"u":{"a":{"df":0,"docs":{},"l":{"df":2,"docs":{"45":{"tf":3.1622776601683795},"8":{"tf":1.0}},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.0}}}}}},"df":0,"docs":{}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"/":{"/":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"i":{"c":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":2,"docs":{"30":{"tf":1.0},"35":{"tf":1.0}}},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":7,"docs":{"0":{"tf":1.7320508075688772},"1":{"tf":1.7320508075688772},"11":{"tf":1.0},"24":{"tf":1.4142135623730951},"33":{"tf":1.0},"54":{"tf":1.7320508075688772},"6":{"tf":1.0}}}}}},"n":{"df":0,"docs":{},"t":{"df":9,"docs":{"23":{"tf":1.4142135623730951},"25":{"tf":1.0},"26":{"tf":1.4142135623730951},"28":{"tf":1.0},"33":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"6":{"tf":1.4142135623730951},"7":{"tf":1.0}}}},"r":{"df":0,"docs":{},"n":{"df":4,"docs":{"45":{"tf":1.0},"57":{"tf":1.7320508075688772},"60":{"tf":2.23606797749979},"61":{"tf":1.7320508075688772}}}},"y":{"df":11,"docs":{"16":{"tf":1.0},"23":{"tf":1.0},"26":{"tf":1.4142135623730951},"33":{"tf":1.0},"38":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.4142135623730951},"59":{"tf":1.4142135623730951},"6":{"tf":2.23606797749979},"60":{"tf":1.0},"7":{"tf":1.7320508075688772}}}},"df":0,"docs":{},"e":{"'":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":1,"docs":{"34":{"tf":1.0}}}}},"a":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"60":{"tf":1.4142135623730951}}}}}},"b":{"c":{"a":{"df":0,"docs":{},"m":{"df":2,"docs":{"34":{"tf":2.0},"44":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"34":{"tf":1.7320508075688772}}}},"o":{"c":{"df":0,"docs":{},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"27":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":4,"docs":{"16":{"tf":1.0},"29":{"tf":1.0},"45":{"tf":1.0},"6":{"tf":1.0}}}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"d":{"9":{"0":{"1":{"0":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":3,"docs":{"57":{"tf":2.6457513110645907},"6":{"tf":1.0},"7":{"tf":1.4142135623730951}}},"df":0,"docs":{}}}}}},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"v":{"df":1,"docs":{"20":{"tf":1.0}}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":3,"docs":{"1":{"tf":1.0},"45":{"tf":1.0},"8":{"tf":1.0}}}}}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":3,"docs":{"44":{"tf":1.0},"45":{"tf":1.0},"57":{"tf":1.0}}}}}},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"i":{"df":5,"docs":{"0":{"tf":1.0},"10":{"tf":1.0},"12":{"tf":1.0},"32":{"tf":1.0},"41":{"tf":1.0}}}},"k":{"df":0,"docs":{},"i":{"df":2,"docs":{"0":{"tf":1.4142135623730951},"6":{"tf":1.0}}}},"p":{"df":0,"docs":{},"e":{"df":3,"docs":{"23":{"tf":1.0},"26":{"tf":1.7320508075688772},"60":{"tf":1.0}}}},"t":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":3,"docs":{"54":{"tf":1.0},"57":{"tf":1.0},"61":{"tf":1.0}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"t":{"df":11,"docs":{"0":{"tf":1.0},"34":{"tf":1.4142135623730951},"36":{"tf":1.0},"40":{"tf":1.0},"45":{"tf":1.0},"51":{"tf":1.0},"54":{"tf":1.0},"6":{"tf":1.4142135623730951},"60":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}}}}}},"o":{"df":0,"docs":{},"n":{"'":{"df":0,"docs":{},"t":{"df":3,"docs":{"6":{"tf":1.0},"60":{"tf":1.0},"7":{"tf":1.4142135623730951}}}},"df":0,"docs":{}},"r":{"d":{"df":1,"docs":{"33":{"tf":1.0}}},"df":0,"docs":{},"k":{"df":8,"docs":{"11":{"tf":1.0},"13":{"tf":1.0},"20":{"tf":1.0},"40":{"tf":1.0},"41":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.4142135623730951},"6":{"tf":1.0}},"s":{"df":0,"docs":{},"p":{"a":{"c":{"df":1,"docs":{"44":{"tf":1.7320508075688772}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"l":{"d":{"df":1,"docs":{"6":{"tf":1.0}}},"df":0,"docs":{}},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"20":{"tf":1.0}}}}}},"r":{"a":{"df":0,"docs":{},"p":{"df":2,"docs":{"45":{"tf":1.0},"54":{"tf":1.4142135623730951}}}},"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":3,"docs":{"11":{"tf":1.0},"33":{"tf":1.0},"44":{"tf":1.0}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":2,"docs":{"20":{"tf":1.4142135623730951},"44":{"tf":1.7320508075688772}}}}}}},"o":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":1,"docs":{"57":{"tf":1.0}}}}}},"s":{"df":2,"docs":{"28":{"tf":1.4142135623730951},"29":{"tf":1.0}},"s":{":":{"/":{"/":{"df":0,"docs":{},"k":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"a":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"28":{"tf":1.0},"29":{"tf":1.0}}}}}}}}},"df":0,"docs":{}}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}}},"x":{"c":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"e":{"df":2,"docs":{"20":{"tf":1.0},"41":{"tf":1.4142135623730951}}}},"df":0,"docs":{}}},"df":1,"docs":{"40":{"tf":1.0}}},"y":{"df":0,"docs":{},"e":{"df":4,"docs":{"41":{"tf":1.0},"6":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}},"i":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"d":{"df":1,"docs":{"57":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"df":0,"docs":{},"u":{"'":{"df":0,"docs":{},"r":{"df":2,"docs":{"34":{"tf":1.4142135623730951},"6":{"tf":1.0}}},"v":{"df":5,"docs":{"27":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0},"7":{"tf":1.0},"8":{"tf":1.0}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"f":{"df":3,"docs":{"1":{"tf":1.0},"24":{"tf":1.0},"8":{"tf":1.0}}}}}}}}}},"z":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"df":0,"docs":{},"z":{"df":1,"docs":{"45":{"tf":1.4142135623730951}}}}}}}}}},"title":{"root":{"1":{"df":1,"docs":{"32":{"tf":1.0}}},"2":{"df":1,"docs":{"33":{"tf":1.0}}},"3":{"df":1,"docs":{"34":{"tf":1.0}}},"5":{".":{"0":{".":{"0":{"df":1,"docs":{"20":{"tf":1.0}}},"1":{"df":1,"docs":{"19":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}},"a":{"c":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":4,"docs":{"14":{"tf":1.0},"34":{"tf":1.0},"35":{"tf":1.0},"38":{"tf":1.0}}}}}}},"df":0,"docs":{}},"d":{"d":{"df":4,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"34":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{},"n":{"d":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"df":0,"docs":{},"i":{"d":{"df":3,"docs":{"42":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0}}},"df":0,"docs":{}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"p":{"df":4,"docs":{"30":{"tf":1.0},"34":{"tf":1.0},"47":{"tf":1.0},"49":{"tf":1.0}},"l":{"df":0,"docs":{},"i":{"c":{"df":1,"docs":{"32":{"tf":1.0}}},"df":0,"docs":{}}}}},"r":{"c":{"df":0,"docs":{},"h":{"df":0,"docs":{},"i":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"44":{"tf":1.0}}}}}},"df":0,"docs":{}}}}}},"df":0,"docs":{}}},"b":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"d":{"df":3,"docs":{"40":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.4142135623730951}}},"df":0,"docs":{}}},"l":{"df":0,"docs":{},"k":{"df":1,"docs":{"59":{"tf":1.0}}}}}},"c":{"df":0,"docs":{},"h":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"18":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"o":{"d":{"df":0,"docs":{},"e":{"df":5,"docs":{"52":{"tf":1.0},"53":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0},"61":{"tf":1.0}}}},"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"13":{"tf":1.0}}}},"df":0,"docs":{}}}},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"l":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{}}}},"n":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"52":{"tf":1.0},"55":{"tf":1.0}}}}}}}},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":1,"docs":{"38":{"tf":1.0}}}},"df":0,"docs":{}}}},"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"13":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":1,"docs":{"61":{"tf":1.0}},"r":{"df":0,"docs":{},"i":{"df":0,"docs":{},"v":{"df":1,"docs":{"61":{"tf":1.0}}}}},"v":{"df":0,"docs":{},"e":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":1,"docs":{"39":{"tf":1.0}}}}}},"i":{"c":{"df":1,"docs":{"10":{"tf":1.0}}},"df":0,"docs":{}}}},"o":{"c":{"df":1,"docs":{"49":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"s":{"df":0,"docs":{},"y":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"62":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}},"f":{"a":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"48":{"tf":1.4142135623730951}}}},"q":{"df":1,"docs":{"5":{"tf":1.0}}}},"df":0,"docs":{},"e":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":1,"docs":{"1":{"tf":1.0}}}}}},"df":0,"docs":{}},"i":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":1,"docs":{"24":{"tf":1.0}}}}}},"o":{"df":0,"docs":{},"u":{"df":0,"docs":{},"n":{"d":{"df":1,"docs":{"47":{"tf":1.0}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"n":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"45":{"tf":1.0}}}}}}},"df":0,"docs":{}}}},"g":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"16":{"tf":1.0}}}}},"t":{"df":1,"docs":{"3":{"tf":1.0}}}},"u":{"df":0,"docs":{},"i":{"d":{"df":1,"docs":{"21":{"tf":1.0}}},"df":0,"docs":{}}}},"h":{"a":{"df":0,"docs":{},"r":{"d":{"df":0,"docs":{},"w":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"0":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"t":{"df":2,"docs":{"33":{"tf":1.0},"37":{"tf":1.0}}}}}},"df":0,"docs":{},"m":{"df":0,"docs":{},"p":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":1,"docs":{"61":{"tf":1.0}}}}}}},"n":{"df":0,"docs":{},"f":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":1,"docs":{"55":{"tf":1.0}}}}}},"s":{"df":0,"docs":{},"t":{"a":{"df":0,"docs":{},"l":{"df":1,"docs":{"23":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"df":0,"docs":{},"r":{"df":0,"docs":{},"o":{"d":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":1,"docs":{"15":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{}}}}},"o":{"df":3,"docs":{"41":{"tf":1.0},"47":{"tf":1.0},"48":{"tf":1.0}}}},"j":{"df":0,"docs":{},"s":{"df":2,"docs":{"30":{"tf":1.0},"34":{"tf":1.0}}}},"k":{"df":0,"docs":{},"e":{"df":0,"docs":{},"y":{"df":3,"docs":{"1":{"tf":1.0},"16":{"tf":1.0},"8":{"tf":1.0}}}}},"l":{"df":0,"docs":{},"i":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"df":1,"docs":{"4":{"tf":1.0}}}}}},"df":0,"docs":{},"n":{"df":0,"docs":{},"k":{"df":1,"docs":{"49":{"tf":1.0}}},"u":{"df":0,"docs":{},"x":{"df":1,"docs":{"48":{"tf":1.0}}}}}}},"m":{"a":{"c":{"df":0,"docs":{},"o":{"df":1,"docs":{"48":{"tf":1.0}}}},"df":0,"docs":{},"n":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"14":{"tf":1.0}}}},"df":0,"docs":{}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"a":{"df":0,"docs":{},"g":{"df":1,"docs":{"58":{"tf":1.0}}}},"df":0,"docs":{}}},"t":{"a":{"d":{"a":{"df":0,"docs":{},"t":{"a":{"df":1,"docs":{"29":{"tf":1.0}}},"df":0,"docs":{}}},"df":0,"docs":{}},"df":0,"docs":{}},"df":0,"docs":{}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":2,"docs":{"36":{"tf":1.0},"37":{"tf":1.0}}}}}}},"o":{"b":{"df":0,"docs":{},"i":{"df":0,"docs":{},"l":{"df":1,"docs":{"32":{"tf":1.0}}}}},"df":0,"docs":{}},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"df":0,"docs":{},"i":{"df":0,"docs":{},"f":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"m":{"df":1,"docs":{"54":{"tf":1.0}}}},"df":0,"docs":{}}}}}}}},"n":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":0,"docs":{},"w":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"k":{"df":4,"docs":{"27":{"tf":1.0},"28":{"tf":1.0},"29":{"tf":1.0},"7":{"tf":1.0}}}}}}},"w":{"df":2,"docs":{"20":{"tf":1.0},"27":{"tf":1.0}}}}},"p":{"a":{"df":0,"docs":{},"t":{"df":0,"docs":{},"h":{"df":2,"docs":{"36":{"tf":1.0},"38":{"tf":1.0}}}},"y":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"a":{"d":{"df":1,"docs":{"61":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}}},"df":0,"docs":{},"h":{"df":0,"docs":{},"r":{"a":{"df":0,"docs":{},"s":{"df":0,"docs":{},"e":{"df":2,"docs":{"36":{"tf":1.0},"37":{"tf":1.0}}}}},"df":0,"docs":{}}},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"k":{"a":{"d":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":6,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"30":{"tf":1.4142135623730951},"32":{"tf":1.0},"34":{"tf":1.4142135623730951}},"j":{"df":1,"docs":{"35":{"tf":1.0}}}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"r":{"df":0,"docs":{},"e":{"df":0,"docs":{},"p":{"a":{"df":0,"docs":{},"r":{"df":1,"docs":{"26":{"tf":1.0}}}},"df":0,"docs":{}}},"i":{"df":0,"docs":{},"v":{"a":{"c":{"df":0,"docs":{},"i":{"df":1,"docs":{"9":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}},"o":{"c":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"s":{"df":1,"docs":{"56":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"q":{"df":0,"docs":{},"r":{"df":5,"docs":{"52":{"tf":1.0},"53":{"tf":1.0},"54":{"tf":1.0},"55":{"tf":1.0},"56":{"tf":1.0}}}},"r":{"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"v":{"df":3,"docs":{"33":{"tf":1.0},"35":{"tf":1.0},"37":{"tf":1.0}}}}},"df":0,"docs":{},"f":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"17":{"tf":1.0}}}}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"i":{"df":0,"docs":{},"r":{"df":1,"docs":{"2":{"tf":1.0}}}}}}},"u":{"df":0,"docs":{},"s":{"df":0,"docs":{},"t":{"df":2,"docs":{"47":{"tf":1.0},"49":{"tf":1.0}}}}}},"s":{"c":{"df":0,"docs":{},"o":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"50":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"c":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":3,"docs":{"10":{"tf":1.0},"12":{"tf":1.0},"9":{"tf":1.0}}}}},"df":0,"docs":{},"e":{"d":{"df":1,"docs":{"8":{"tf":1.0}}},"df":0,"docs":{}},"q":{"df":0,"docs":{},"u":{"df":0,"docs":{},"e":{"df":0,"docs":{},"n":{"c":{"df":1,"docs":{"56":{"tf":1.0}}},"df":0,"docs":{}}}}},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"p":{"df":1,"docs":{"33":{"tf":1.0}}}}}},"h":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"e":{"df":1,"docs":{"56":{"tf":1.0}}}}},"df":0,"docs":{}},"i":{"d":{"df":0,"docs":{},"e":{"df":1,"docs":{"47":{"tf":1.0}}}},"df":0,"docs":{}},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":0,"docs":{},"p":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}}}}}}},"df":0,"docs":{}},"p":{"df":0,"docs":{},"e":{"c":{"df":1,"docs":{"28":{"tf":1.0}}},"df":0,"docs":{}}},"t":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"t":{"df":4,"docs":{"22":{"tf":1.0},"24":{"tf":1.0},"3":{"tf":1.0},"47":{"tf":1.0}}}}},"df":0,"docs":{},"r":{"df":0,"docs":{},"u":{"c":{"df":0,"docs":{},"t":{"df":0,"docs":{},"u":{"df":0,"docs":{},"r":{"df":4,"docs":{"43":{"tf":1.0},"44":{"tf":1.0},"45":{"tf":1.0},"53":{"tf":1.0}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"m":{"df":0,"docs":{},"m":{"a":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"31":{"tf":1.0}}}}},"df":0,"docs":{}}}},"y":{"df":0,"docs":{},"m":{"b":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":1,"docs":{"47":{"tf":1.0}}}}},"df":0,"docs":{}},"s":{"df":0,"docs":{},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"m":{"df":1,"docs":{"2":{"tf":1.0}}}}}}}},"t":{"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"m":{"df":0,"docs":{},"i":{"df":0,"docs":{},"n":{"df":0,"docs":{},"o":{"df":0,"docs":{},"l":{"df":0,"docs":{},"o":{"df":0,"docs":{},"g":{"df":1,"docs":{"51":{"tf":1.0}}}}}}}}}}},"r":{"a":{"df":0,"docs":{},"n":{"df":0,"docs":{},"s":{"a":{"c":{"df":0,"docs":{},"t":{"df":2,"docs":{"57":{"tf":1.0},"59":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"df":0,"docs":{},"o":{"df":0,"docs":{},"u":{"b":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"s":{"df":0,"docs":{},"h":{"df":0,"docs":{},"o":{"df":0,"docs":{},"o":{"df":0,"docs":{},"t":{"df":1,"docs":{"46":{"tf":1.0}}}}}}}}}},"df":0,"docs":{}}}},"u":{"df":0,"docs":{},"r":{"df":0,"docs":{},"n":{"df":1,"docs":{"0":{"tf":1.0}}}},"t":{"df":0,"docs":{},"o":{"df":0,"docs":{},"r":{"df":0,"docs":{},"i":{"df":1,"docs":{"30":{"tf":1.0}}}}}}},"y":{"df":0,"docs":{},"p":{"df":0,"docs":{},"e":{"df":1,"docs":{"52":{"tf":1.0}}}}}},"u":{"df":0,"docs":{},"p":{"d":{"a":{"df":0,"docs":{},"t":{"df":2,"docs":{"12":{"tf":1.0},"60":{"tf":1.0}}}},"df":0,"docs":{}},"df":0,"docs":{},"g":{"df":0,"docs":{},"r":{"a":{"d":{"df":2,"docs":{"25":{"tf":1.0},"26":{"tf":1.0}}},"df":0,"docs":{}},"df":0,"docs":{}}}},"s":{"df":1,"docs":{"11":{"tf":1.0}},"e":{"df":0,"docs":{},"r":{"df":1,"docs":{"21":{"tf":1.0}}}}}},"v":{"a":{"df":0,"docs":{},"u":{"df":0,"docs":{},"l":{"df":0,"docs":{},"t":{"'":{"df":1,"docs":{"34":{"tf":1.0}}},"df":9,"docs":{"0":{"tf":1.0},"12":{"tf":1.0},"14":{"tf":1.0},"22":{"tf":1.0},"25":{"tf":1.0},"30":{"tf":1.0},"32":{"tf":1.0},"43":{"tf":1.0},"62":{"tf":1.0}}}}}},"df":0,"docs":{},"e":{"df":0,"docs":{},"r":{"df":0,"docs":{},"s":{"df":0,"docs":{},"i":{"df":0,"docs":{},"o":{"df":0,"docs":{},"n":{"df":1,"docs":{"20":{"tf":1.0}}}}}}}}},"w":{"a":{"df":0,"docs":{},"l":{"df":0,"docs":{},"l":{"df":0,"docs":{},"e":{"df":0,"docs":{},"t":{"df":1,"docs":{"0":{"tf":1.0}}}}}}},"df":0,"docs":{}}}}},"lang":"English","pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5"},"results_options":{"limit_results":20,"teaser_word_count":30},"search_options":{"bool":"AND","expand":true,"fields":{"body":{"boost":1},"breadcrumbs":{"boost":2},"title":{"boost":2}}}} \ No newline at end of file diff --git a/theme-dawn.js b/theme-dawn.js new file mode 100644 index 0000000000..af391d056b --- /dev/null +++ b/theme-dawn.js @@ -0,0 +1,7 @@ +ace.define("ace/theme/dawn",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-dawn",t.cssText=".ace-dawn .ace_gutter {background: #ebebeb;color: #333}.ace-dawn .ace_print-margin {width: 1px;background: #e8e8e8}.ace-dawn {background-color: #F9F9F9;color: #080808}.ace-dawn .ace_cursor {color: #000000}.ace-dawn .ace_marker-layer .ace_selection {background: rgba(39, 95, 255, 0.30)}.ace-dawn.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #F9F9F9;}.ace-dawn .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-dawn .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(75, 75, 126, 0.50)}.ace-dawn .ace_marker-layer .ace_active-line {background: rgba(36, 99, 180, 0.12)}.ace-dawn .ace_gutter-active-line {background-color : #dcdcdc}.ace-dawn .ace_marker-layer .ace_selected-word {border: 1px solid rgba(39, 95, 255, 0.30)}.ace-dawn .ace_invisible {color: rgba(75, 75, 126, 0.50)}.ace-dawn .ace_keyword,.ace-dawn .ace_meta {color: #794938}.ace-dawn .ace_constant,.ace-dawn .ace_constant.ace_character,.ace-dawn .ace_constant.ace_character.ace_escape,.ace-dawn .ace_constant.ace_other {color: #811F24}.ace-dawn .ace_invalid.ace_illegal {text-decoration: underline;font-style: italic;color: #F8F8F8;background-color: #B52A1D}.ace-dawn .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #B52A1D}.ace-dawn .ace_support {color: #691C97}.ace-dawn .ace_support.ace_constant {color: #B4371F}.ace-dawn .ace_fold {background-color: #794938;border-color: #080808}.ace-dawn .ace_list,.ace-dawn .ace_markup.ace_list,.ace-dawn .ace_support.ace_function {color: #693A17}.ace-dawn .ace_storage {font-style: italic;color: #A71D5D}.ace-dawn .ace_string {color: #0B6125}.ace-dawn .ace_string.ace_regexp {color: #CF5628}.ace-dawn .ace_comment {font-style: italic;color: #5A525F}.ace-dawn .ace_heading,.ace-dawn .ace_markup.ace_heading {color: #19356D}.ace-dawn .ace_variable {color: #234A97}.ace-dawn .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() { + ace.require(["ace/theme/dawn"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); diff --git a/theme-tomorrow_night.js b/theme-tomorrow_night.js new file mode 100644 index 0000000000..7620b2aac9 --- /dev/null +++ b/theme-tomorrow_night.js @@ -0,0 +1,7 @@ +ace.define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-tomorrow-night",t.cssText=".ace-tomorrow-night .ace_gutter {background: #25282c;color: #C5C8C6}.ace-tomorrow-night .ace_print-margin {width: 1px;background: #25282c}.ace-tomorrow-night {background-color: #1D1F21;color: #C5C8C6}.ace-tomorrow-night .ace_cursor {color: #AEAFAD}.ace-tomorrow-night .ace_marker-layer .ace_selection {background: #373B41}.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1D1F21;}.ace-tomorrow-night .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #4B4E55}.ace-tomorrow-night .ace_marker-layer .ace_active-line {background: #282A2E}.ace-tomorrow-night .ace_gutter-active-line {background-color: #282A2E}.ace-tomorrow-night .ace_marker-layer .ace_selected-word {border: 1px solid #373B41}.ace-tomorrow-night .ace_invisible {color: #4B4E55}.ace-tomorrow-night .ace_keyword,.ace-tomorrow-night .ace_meta,.ace-tomorrow-night .ace_storage,.ace-tomorrow-night .ace_storage.ace_type,.ace-tomorrow-night .ace_support.ace_type {color: #B294BB}.ace-tomorrow-night .ace_keyword.ace_operator {color: #8ABEB7}.ace-tomorrow-night .ace_constant.ace_character,.ace-tomorrow-night .ace_constant.ace_language,.ace-tomorrow-night .ace_constant.ace_numeric,.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night .ace_support.ace_constant,.ace-tomorrow-night .ace_variable.ace_parameter {color: #DE935F}.ace-tomorrow-night .ace_constant.ace_other {color: #CED1CF}.ace-tomorrow-night .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night .ace_fold {background-color: #81A2BE;border-color: #C5C8C6}.ace-tomorrow-night .ace_entity.ace_name.ace_function,.ace-tomorrow-night .ace_support.ace_function,.ace-tomorrow-night .ace_variable {color: #81A2BE}.ace-tomorrow-night .ace_support.ace_class,.ace-tomorrow-night .ace_support.ace_type {color: #F0C674}.ace-tomorrow-night .ace_heading,.ace-tomorrow-night .ace_markup.ace_heading,.ace-tomorrow-night .ace_string {color: #B5BD68}.ace-tomorrow-night .ace_entity.ace_name.ace_tag,.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night .ace_meta.ace_tag,.ace-tomorrow-night .ace_string.ace_regexp,.ace-tomorrow-night .ace_variable {color: #CC6666}.ace-tomorrow-night .ace_comment {color: #969896}.ace-tomorrow-night .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() { + ace.require(["ace/theme/tomorrow_night"], function(m) { + if (typeof module == "object" && typeof exports == "object" && module) { + module.exports = m; + } + }); + })(); diff --git a/tomorrow-night.css b/tomorrow-night.css new file mode 100644 index 0000000000..81fe276e7f --- /dev/null +++ b/tomorrow-night.css @@ -0,0 +1,102 @@ +/* Tomorrow Night Theme */ +/* https://github.com/jmblog/color-themes-for-highlightjs */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* https://github.com/jmblog/color-themes-for-highlightjs */ + +/* Tomorrow Comment */ +.hljs-comment { + color: #969896; +} + +/* Tomorrow Red */ +.hljs-variable, +.hljs-attribute, +.hljs-tag, +.hljs-regexp, +.ruby .hljs-constant, +.xml .hljs-tag .hljs-title, +.xml .hljs-pi, +.xml .hljs-doctype, +.html .hljs-doctype, +.css .hljs-id, +.css .hljs-class, +.css .hljs-pseudo { + color: #cc6666; +} + +/* Tomorrow Orange */ +.hljs-number, +.hljs-preprocessor, +.hljs-pragma, +.hljs-built_in, +.hljs-literal, +.hljs-params, +.hljs-constant { + color: #de935f; +} + +/* Tomorrow Yellow */ +.ruby .hljs-class .hljs-title, +.css .hljs-rule .hljs-attribute { + color: #f0c674; +} + +/* Tomorrow Green */ +.hljs-string, +.hljs-value, +.hljs-inheritance, +.hljs-header, +.hljs-name, +.ruby .hljs-symbol, +.xml .hljs-cdata { + color: #b5bd68; +} + +/* Tomorrow Aqua */ +.hljs-title, +.css .hljs-hexcolor { + color: #8abeb7; +} + +/* Tomorrow Blue */ +.hljs-function, +.python .hljs-decorator, +.python .hljs-title, +.ruby .hljs-function .hljs-title, +.ruby .hljs-title .hljs-keyword, +.perl .hljs-sub, +.javascript .hljs-title, +.coffeescript .hljs-title { + color: #81a2be; +} + +/* Tomorrow Purple */ +.hljs-keyword, +.javascript .hljs-function { + color: #b294bb; +} + +.hljs { + display: block; + overflow-x: auto; + background: #1d1f21; + color: #c5c8c6; +} + +.coffeescript .javascript, +.javascript .xml, +.tex .hljs-formula, +.xml .javascript, +.xml .vbscript, +.xml .css, +.xml .hljs-cdata { + opacity: 0.5; +} + +.hljs-addition { + color: #718c00; +} + +.hljs-deletion { + color: #c82829; +} diff --git a/tutorials/Add-New-Network.html b/tutorials/Add-New-Network.html new file mode 100644 index 0000000000..2248737b60 --- /dev/null +++ b/tutorials/Add-New-Network.html @@ -0,0 +1,357 @@ + + + + + + Add New Network - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Add New Network

+

Polkadot Vault supports adding any substrate-based networks or updating an existing network via QR code.

+

After you've installed required software, you need to add Network's Specs to Vault and add Network Metadata for this network, so that Vault is able to decode, and you could read and verify transactions you are signing on this network.

+

If you need to update metadata for already existing network you only need to update Network Metadata. +Off-the-shelf Vault comes with networks that you can update by scanning a multipart QR codes that contain recent metadata for these networks at Metadata Update Portal.

+

Network Specs

+
    +
  1. Get
  2. +
  3. Sign
  4. +
  5. Feed into Vault
  6. +
+

Network Metadata

+
    +
  1. Get
  2. +
  3. Sign
  4. +
  5. Feed into Vault
  6. +
+

Prerequisites

+
    +
  • +Network details +
      +
    • +RPC endpoint (websocket URL)
      +Hint: You can RPC endpoints for some of the public networks e.g. in polkadot-js/apps repository
    • +
    • +Encryption algorithm
    • +
    +
  • +
  • +rust
  • +
  • +a clone of parity-signer repository
  • +
  • +subkey
  • +
  • +Dedicated keypair specifically for signing updates
    +Please make sure you have a backup <secret-phrase> and Public key (hex) of this keypair. You will be able to update a network only with metadata that is signed with the same keypair as network specs. You can generate it with any tool of your choice, e.g with subkey: subkey generate.
  • +
+ +
+
+
+

Let's get started!

+

Add Network Specs

+

Get Network Specs

+

In parity-signer/rust/generate_message

+
cargo run add-specs -u <network-ws-url> --encryption <crypto>
+
+
+
// e.g.
+cargo run add-specs -u wss://statemint-rpc.polkadot.io --encryption sr25519
+
+
+

For networks supporting several tokens:

+
cargo run add-specs -d -u <network-ws-url> --encryption <crypto> --token-decimals <decimals> --token-unit <SYMBOL>
+
+
+
// e.g.
+cargo run add-specs -d -u wss://karura-rpc-0.aca-api.network --encryption sr25519 --token-decimals 12 --token-unit KAR
+
+
+
+

Now your <specs-file> is in parity-signer/rust/files/for_signing.

+

Hint: you can read more about interface with hot database if you want to maintain it.

+ +

Sign Network Spec

+

Get signature

+

In parity-signer/rust/files/for_signing

+
cat <spec-file> | subkey sign --suri <seed-phrase-and-derivation>
+
+
// e.g.
+cat sign_me_add_specs_statemint_sr25519 | subkey sign --suri "bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice"
+
+

This will return a <signature> you need to make a signed QR.

+

Make signed QR

+

In parity-signer/rust/generate_message

+
cargo run --release make --goal qr --crypto <crypto> --msg add-specs --payload <spec-file> --verifier-hex <public-key> --signature-hex <signature>
+
+
// e.g.
+cargo run --release make --goal qr --crypto sr25519 --msg add-specs --payload sign_me_add_specs_statemint_sr25519 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex fa3ed5e1156d3d51349cd9bb4257387d8e32d49861c0952eaff1c2d982332e13afa8856bb6dfc684263aa3570499e067d4d78ea2dfa7a9b85e8ea273d3a81a86
+
+
+

Now your <spec-qr> is in parity-signer/rust/files/signed

+

Feed Network Specs into Vault

+

In Vault open scanner, scan your <spec-qr> and approve chain specs.

+
+

Add Network Metadata

+

Get Network Metadata

+

In parity-signer/rust/generate_message

+
cargo run load-metadata -d -u `<network-ws-url>`
+
+
// e.g.
+cargo run load-metadata -d -u wss://statemint-rpc.polkadot.io
+
+
+

This will fetch fresh <metadata_file>, update the database with it, and - most relevant to us currently - generate file with message body in parity-signer/rust/files/for_signing.

+

Sign Network Metadata

+

Get Signature

+

In parity-signer/rust/files/for_signing

+
cat <metadata-file> | subkey sign --suri <seed-phrase-and-derivation>
+
+
// e.g.
+cat sign_me_load_metadata_statemintV800 | subkey sign --suri "bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice"
+
+

Make signed QR

+

In parity-signer/rust/generate_message

+
cargo run --release make --goal qr --crypto <crypto> --msg load-metadata --payload <metadata-file> --verifier-hex <public-key> --signature-hex <signature>
+
+
// e.g.
+cargo run --release make --goal qr --crypto sr25519 --msg load-metadata --payload sign_me_load-metadata_statemintV800 --verifier-hex 0x927c307614dba6ec42f84411cc1e93c6579893859ce5a7ac3d8c2fb1649d1542 --signature-hex 6a8f8dab854bec99bd8534102a964a4e71f4370683e7ff116c84d7e8d5cb344efd3b90d27059b7c8058f5c4a5230b792009c351a16c007237921bcae2ede2d84
+
+

This QR might take some time to be generated. After it is finished you can find your <metadata-qr> in parity-signer/rust/files/signed. It is a multipart QR-"movie", if your image viewer does not render it correctly, we suggest to open it in a browser.

+

Feed Network Metadata into Vault

+

In Vault open scanner, scan your <metadata-qr> and accept new metadata.

+
+
+
+

Congratulations! You've fetched network specs, signed them, fed them into Vault, fetched recent metadata for the network, signed and fed it into Vault as well. Now you are ready to safely sign transactions on this network.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/tutorials/Hierarchical-Deterministic-Key-Derivation.html b/tutorials/Hierarchical-Deterministic-Key-Derivation.html new file mode 100644 index 0000000000..6a73ea16c7 --- /dev/null +++ b/tutorials/Hierarchical-Deterministic-Key-Derivation.html @@ -0,0 +1,277 @@ + + + + + + Hierarchical-Deterministic-Key-Derivation - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Polkadot Vault Accounts Management

+

Polkadot Vault v4 has introduced the Hierarchical Deterministic Key Derivation (HDKD) feature for Substrate networks. This article explains how to use this feature.

+
    +
  • Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.
  • +
+

Introduction

+

Seed is the starting point for generating accounts. The seed itself does not have any network affiliation. For Substrate networks, generating a new accounts means entering a derivation path and choosing a network. With this feature, you can manage as many accounts as needed with just one seed phrase safely stored.

+

Key Generation

+

Create an account for a Substrate based network.

+

Key generation also refers to accounts creation, with your created Identity:

+
    +
  • Go to key manager and create a new seed or select an existing one
  • +
  • Choose a network
  • +
  • Tap on any key
  • +
  • Tap Derive or N+1 Button
  • +
  • In path derivation screen, input any path and name you like (or accept naming suggestion)
  • +
  • (optional) type password
  • +
  • Tap Derive Button
  • +
  • Done, you can start using new address.
  • +
+

The form of path

+

Paths also refer to the chain codes which described in , though it is different from BIP-32 style:

+
    +
  • Soft derivation starts with a single slash, like: /soft
  • +
  • Hard derivation starts with a double slash, like: //hard
  • +
+

Users are able to create any combination of hard derivation with // and/or soft derivation with /.

+

The encoded string are limited to 32 Bytes.

+

For technical information about the soft and hard derivations on Substrate, please refer to introduction here.

+

Path also could contain optional password; in Subkey standard password is prefixed with ///. However, for convenience, Vault device has separate password entry field with password confirmation, thus do not add /// to derivation field, it will result in error - instead omit /// and type password into its' special field. It will not be stored on the device and will be required for any operation that requires private key of the account. There is no way to restore this password if it is lost so please back it up carefully.

+

Further notes

+
    +
  • With the same BIP32 seed users could create keys under different networks.
  • +
  • Each derived account is bound to certain networks, which prevents it to be misused in another network until it is explicitly added for that network as well. Root account is available for all networks by default.
  • +
+

References:

+
    +
  1. https://github.com/w3f/schnorrkel
  2. +
  3. https://wiki.polkadot.network/docs/en/learn-keys
  4. +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/tutorials/Kusama-tutorial.html b/tutorials/Kusama-tutorial.html new file mode 100644 index 0000000000..873f4a4775 --- /dev/null +++ b/tutorials/Kusama-tutorial.html @@ -0,0 +1,331 @@ + + + + + + Kusama-tutorial - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Polkadot Vault tutorial with Polkadot-js apps

+

This tutorial will walk you through setting up a Kusama account with the Polkadot Vault Android or iOS App and then use this account together with Polkadot-js apps to see your balance and transfer funds or perform any extrinsic from this account.

+
    +
  • Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.
  • +
+

Summary

+ +

1. Get Polkadot Vault mobile application

+

Device security

+

Polkadot Vault is meant to be used offline. The mobile device used to run Polkadot Vault will hold valuable information that needs to be kept securely stored. It is therefore advised to:

+
    +
  • Get a Polkadot Vault dedicated mobile device.
  • +
  • Make a factory reset.
  • +
  • Enable full-disk encryption on the device, with a reasonable password (might not be on by default, for example for older Android devices).
  • +
  • Do not use any biometrics such as fingerprint or face recognition for device decryption/unlocking, as those may be less secure than regular passwords.
  • +
  • Once Polkadot Vault has been installed, enable airplane mode and make sure to switch off Wifi, Bluetooth or any connection ability of the device.
  • +
  • Only charge the phone using a power outlet that is never connected to the internet. Only charge the phone with the manufacturer's charging adapter. Do not charge the phone on public USB chargers.
  • +
+

Please find more info here about the Polkadot Vault application.

+

Install Polkadot Vault mobile application

+

Install Polkadot Vault making sure that it originated from Parity Technologies

+ +

2. Setup or recover an Identity

+

When launching the app for the first time, no identity has been set up yet. At this stage, you will either want to create an identity directly from your mobile device or recover an identity previously created.

+

Create an identity

+

Tap on the Create button, and give a name to this identity.

+

In the next step, your recovery phrase will be presented to you. Think of it as a master key. If you lose it, you lose your money. +Write this recovery phrase down and store it in a safe place. +If your phone gets stolen/broken/forgotten this will be the only way to recover your account.

+

You will then be asked to choose a pin code. This pin will be needed later on to unlock your account to manage the identity or sign a transaction.

+

The next screen will allow you to select a network to generate an account. +If you choose an Ethereum network, the related Ethereum account will be generated for the identity,

+

If you choose a Substrate network (like Kusama), you will first create a root account, and then you will be able to derive more accounts with specified paths and names. The name can be changed later on, but once the path is set, it can not be changed. More information about path derivation see here.

+

For each derived account, you will be able to see the address and its related QR code.

+

create account

+

Recover an identity with your recovery phrase

+

If you already have an account created with either Polkadot Vault or any other wallet, you can recover it by doing so:

+
    +
  • Tap on the top right side user icon, and choose + Add Identity.
  • +
  • Input the new identity name and tap the Recover Identity button.
  • +
  • Type in the recovery phrase, word suggestion helps you prevent any typo. The field will turn red if the recovery phrase is not a bip39.
  • +
  • Tap Recover Identity.
  • +
  • Select a PIN number and confirm it by typing it again.
  • +
  • Identity generated, now you can select the network to create the first account.
  • +
+

NOTICE: For V3 user, after recovering the seed phrase of Kusama account, the account will appear as an identity root account aside with identity name in the network selection screen.

+

3. Add Polkadot Vault's account to Polkadot-js apps

+

To be able to follow this tutorial and interact with the Blockchain from a freshly created account on Polkadot Vault, you will need to get some KSMs on this account first. Polkadot-js apps allows you to manage your Vault account seamlessly.

+
    +
  • Visit Polkadot-js apps website.
  • +
  • Go to Accounts from the left sidebar.
  • +
  • Click on Add via QR button in the top right-hand corner.
  • +
  • It will ask for the webcam permission for you to scan the Polkadot Vault's account QR code, accept it.
  • +
  • On Polkadot Vault, choose on the account you want to copy the address of.
  • +
  • Scan the QR code displayed on your phone with your computer's webcam. Make sure the QR code is fully displayed on your mobile's screen.
  • +
  • You can now name this account on Polkadot-js apps.
  • +
+

4. Sign a transaction

+

Assuming that your Polkadot Vault account now has funds, you will be able to send some funds securely to anyone, without transferring your private key, and without needing any internet connection on your mobile phone.

+
    +
  • On Polkadot-js apps, click on the send button next to your account.
  • +
  • On Polkadot-js apps, enter the address of the account you want to send funds to. Make sure to try with a small amount of money first before sending larger amounts.
  • +
  • Click on Make Transfer
  • +
  • Review the transaction, you can add tip to this transaction.
  • +
  • Click on Scan via QR Code when you're done.
  • +
+

Polkadot Vault Polkadot send transaction

+

You will now be presented with a QR code that represents the transaction. Since this transaction is sending funds from your Polkadot Vault mobile app account, only this account (sitting on your phone) can sign and authorize this transaction. This is what we'll do in the next steps:

+
    +
  • From the Polkadot Vault account overview, tap the scan button on the top right and scan the QR code presented by the Polkadot-js apps website.
  • +
  • Review the transaction addresses and the amount to send on your phone. The amount and addresses must match what you've entered in apps. If you got phished, this is where you can realize it and reject the transaction.
  • +
  • Once you're sure, scroll down and click Sign Transaction to enter your pin and get the QR code of the scanned transaction.
  • +
+

Sign Polkadot apps transaction

+

Your phone has now signed the transaction offline using your Polkadot Vault account private key. The QR code that is now displayed on your phone represents a signed transaction that can be broadcasted. We will do this in the next steps:

+
    +
  • On Polkadot-js apps, click on Scan Signature QR, this will ask to turn on your webcam again.
  • +
  • Face your phone's display to your webcam for the website to be able to read the signed transaction.
  • +
  • Your transaction is sent automatically.
  • +
  • Congrats you just sent funds from an air-gapped account :)
  • +
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/tutorials/Recover-Account-Polkadotjs.html b/tutorials/Recover-Account-Polkadotjs.html new file mode 100644 index 0000000000..c67988faaa --- /dev/null +++ b/tutorials/Recover-Account-Polkadotjs.html @@ -0,0 +1,253 @@ + + + + + + Recover-Account-Polkadotjs - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Recover Account from PolkadotJS

+

The default behavior on Polkadot Vault and PolkadotJS Apps is a little different. This tutorial will walk you through recovering an account on Polkadot Vault from PolkadotJS Apps.

+
    +
  • Notice: The UI may be variant for different versions, but the functionalities are the same in v4 version.
  • +
+

Get the mnemonic phrase and path

+

When creating an account on PolkadotJS, it will give you a mnemonic phrase on the beginning without any key derivation. You can change it if you click Advanced creation options button, here you can specify any path you like, leave it as an empty string if you do not want changes.

+

Create Account on PolkadotJS Apps

+

Recover identity with mnemonic phrase

+

On Polkadot Vault, each mnemonic phrase represents an identity, every account starts with an identity, and identity could derive infinite accounts from it. So firstly let's recover the identity from the mnemonic phrase.

+

recover the identity.

+

After tapping one network from the list, you will have the default account created for this network with a default path (as on the above image, //polkadot), but this one is different from the one created from Polkadot.js Apps, because the paths are different.

+

create the account by path

+

On Polkadot Vault, accounts are grouped by different networks, and the accounts generated by the default way are always prefixed with the network name. For example, //polkadot//fund or //polkadot//staking. So to recover an account with an arbitrary path, we need tap Add Network Account -> Create Custom Path.

+

Recover Account

+

Here We can input the path from PolkadotJS Apps, if you do not have a specific path, then just leave it empty. And then after we choose the network, we will have the same account as we created from PolkadotJS Apps.

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/tutorials/SUMMARY.html b/tutorials/SUMMARY.html new file mode 100644 index 0000000000..c7101279a8 --- /dev/null +++ b/tutorials/SUMMARY.html @@ -0,0 +1,245 @@ + + + + + + User Guides - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/tutorials/Start.html b/tutorials/Start.html new file mode 100644 index 0000000000..e27cd2345c --- /dev/null +++ b/tutorials/Start.html @@ -0,0 +1,261 @@ + + + + + + Start - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Starting with Vault

+

This is suggested usage pattern; you should adjust it to your security protocol if you are certain you know what you are doing.

+

Installation

+

Factory reset the phone

+

The Vault should be installed in most secure environment possible. To achieve that, the phone should be reset to factory state.

+

Wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor.

+

Set up phone

+

Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons).

+

Install Vault

+

Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet!

+

Disable network

+

Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app!

+

First start

+

When you first launch Vault, it prompts you to read and accept terms and conditions and privacy policy. Once that is done, the database is pre-populated with built-in networks and Vault is ready for use. It could import network data or read transactions, but to sign anything you need to create keys.

+ +

Create keys

+

Open key manager by tapping bottom left symbol. On fresh start you will be prompted to create seed (otherwise you could always create more seeds by tapping New seed button in Key Manager). Enter any convenient seed name (it does not matter anything and is not used anywhere except for this particulat Vault device) and - if you would like to use custom seed phrase - switch to recovery mode and type the seed phrase. Custom seed phrase should be used only to recover or import existing key(s), do not input custom seed phrase unless it is properly random! Security of your accounts relies on randomness of seed phrase. If you are generating new seed phrase, use built-in random generator and do not input a custom seed phrase.

+

Once you click create button, you will be prompted to authenticate yourself. This will happen every time cruptographic engine of the phone is used to handle seeds - on all creations, backups, derivations and signatures and in some OS versions on starting the Vault.

+

You will see the created secret seed. Please back it up on paper and store it in safe place. If you lose your Vault device or it will become non-functional, you will be able to recover your keys using this seed phrase. Anyone could recover your keys with knowledge of this phrase. If you lose this seed phrase, though, it will be impossible to recover your keys. You can check the seed phrase anytime in Settings menu, but make sure that it is backed up at all times.

+

Once you dismiss seed phrase backup screen, the seed and some associated keys will be created. For every network known to the Vault, a network root derivation key will be generated, hard-derived from seed phrase with network name. A root key will be generated and made available in all networks. Do not use the root key unless you know what you do!.

+

To learn more on key generation, read subkey specifications that Vault follows tightly and Vault key management.

+

Export public key

+

Once you have a keypair you would like to use, you should first export it to hot wallet. Tap the key and select Export button. You will see the export QR code you can use with hot wallet.

+

Details on signing with Pokadot.js Apps

+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/tutorials/Upgrading.html b/tutorials/Upgrading.html new file mode 100644 index 0000000000..ad1548e334 --- /dev/null +++ b/tutorials/Upgrading.html @@ -0,0 +1,256 @@ + + + + + + Upgrading - Polkadot-Vault + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+
+

Upgrading Vault

+

First of all, you need to be certain you want to upgrade Vault. Starting from v5, all network information could be downloaded through QR codes and upgrades are needed only to add new software features.

+

Preparation to upgrade

+

Back up your keys

+

Make sure your keys are backed up - you should have all seed phrases and derivations recorded somewhere. Once you proceed to the next step, there is no way to recover lost information.

+

Make sure to back up all keys for all networks you use. Ideally you should already have some kind of backup, make sure it is up to date.

+

Wipe Vault device

+

Once you are certain that you have backed up everything, open settings, select Wipe all data button and confirm your action. All data in the Vault will be factory reset; congratulations!

+

Factory reset the phone

+

When the Vault is removed, wipe the phone to factory state. This is good time to install newer version of operating system if you like. Make sure your system is genuine by all means provided by OS vendor.

+

Set up phone

+

Before installing the Vault, you need to set up the phone. It is essential that you enable sufficient authentication method; your secret seeds in Vault are as safe as the phone is. Seed secrets are protected with hardware encryption based on vendor authentication protocol. Other than that, you might want to select dark mode (Vault remains dark for historic reasons)

+

Install Vault

+

Download signed application through application store or from github. Make sure the signature is valid! Install the app. Do not start the app just yet!

+

Disable network

+

Before starting the Vault, you should make sure that network is disabled. Many operating systems allow only partial network monitoring; although there are network detection features in Vault, they are limited and only have informational function. User is responsible for maintaining airgapped state! The simplest way to disable connectivity is setting the phone in airplane mode. Advanced users might want to use physical methods to further protect the phone from connections. Perform all preparations before starting the Vault app!

+

Start the Vault

+

Start the app. Read and accept information provided on launch. Congratulations! The app is ready to use now, however it does not have any keys and only few basic built-in networks. Proceed with setting up keys and adding new networks.

+ + +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/tutorials/images/Network-Metadata-Added.png b/tutorials/images/Network-Metadata-Added.png new file mode 100644 index 0000000000..3c8f5b7766 Binary files /dev/null and b/tutorials/images/Network-Metadata-Added.png differ diff --git a/tutorials/images/Network-Metadata-QR.png b/tutorials/images/Network-Metadata-QR.png new file mode 100644 index 0000000000..7ad8e4f586 Binary files /dev/null and b/tutorials/images/Network-Metadata-QR.png differ diff --git a/tutorials/images/Polkadot-Vault-Fether-add-account.gif b/tutorials/images/Polkadot-Vault-Fether-add-account.gif new file mode 100644 index 0000000000..1502b28f75 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-Fether-add-account.gif differ diff --git a/tutorials/images/Polkadot-Vault-Fether-android-1.png b/tutorials/images/Polkadot-Vault-Fether-android-1.png new file mode 100644 index 0000000000..732b3f7b3e Binary files /dev/null and b/tutorials/images/Polkadot-Vault-Fether-android-1.png differ diff --git a/tutorials/images/Polkadot-Vault-Fether-tx-workflow.jpg b/tutorials/images/Polkadot-Vault-Fether-tx-workflow.jpg new file mode 100644 index 0000000000..c42ece218d Binary files /dev/null and b/tutorials/images/Polkadot-Vault-Fether-tx-workflow.jpg differ diff --git a/tutorials/images/Polkadot-Vault-HDKD-0.png b/tutorials/images/Polkadot-Vault-HDKD-0.png new file mode 100644 index 0000000000..25eeca1435 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-HDKD-0.png differ diff --git a/tutorials/images/Polkadot-Vault-HDKD-1.png b/tutorials/images/Polkadot-Vault-HDKD-1.png new file mode 100644 index 0000000000..7695bf5881 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-HDKD-1.png differ diff --git a/tutorials/images/Polkadot-Vault-MyCrypto-1.jpg b/tutorials/images/Polkadot-Vault-MyCrypto-1.jpg new file mode 100644 index 0000000000..5b011eeadd Binary files /dev/null and b/tutorials/images/Polkadot-Vault-MyCrypto-1.jpg differ diff --git a/tutorials/images/Polkadot-Vault-MyCrypto-2.png b/tutorials/images/Polkadot-Vault-MyCrypto-2.png new file mode 100644 index 0000000000..488b7fceb6 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-MyCrypto-2.png differ diff --git a/tutorials/images/Polkadot-Vault-MyCrypto-3.png b/tutorials/images/Polkadot-Vault-MyCrypto-3.png new file mode 100644 index 0000000000..e47e25f7e6 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-MyCrypto-3.png differ diff --git a/tutorials/images/Polkadot-Vault-MyCrypto-4.png b/tutorials/images/Polkadot-Vault-MyCrypto-4.png new file mode 100644 index 0000000000..0a96e91509 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-MyCrypto-4.png differ diff --git a/tutorials/images/Polkadot-Vault-android-copy-address.gif b/tutorials/images/Polkadot-Vault-android-copy-address.gif new file mode 100644 index 0000000000..af8a2e5af5 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-android-copy-address.gif differ diff --git a/tutorials/images/Polkadot-Vault-apps-0.png b/tutorials/images/Polkadot-Vault-apps-0.png new file mode 100644 index 0000000000..5148834b8f Binary files /dev/null and b/tutorials/images/Polkadot-Vault-apps-0.png differ diff --git a/tutorials/images/Polkadot-Vault-apps-1.png b/tutorials/images/Polkadot-Vault-apps-1.png new file mode 100644 index 0000000000..b0aa11c038 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-apps-1.png differ diff --git a/tutorials/images/Polkadot-Vault-apps-tx-workflow.png b/tutorials/images/Polkadot-Vault-apps-tx-workflow.png new file mode 100644 index 0000000000..27f761acf0 Binary files /dev/null and b/tutorials/images/Polkadot-Vault-apps-tx-workflow.png differ diff --git a/tutorials/images/Polkadot-Vault-introduction.png b/tutorials/images/Polkadot-Vault-introduction.png new file mode 100644 index 0000000000..13cc43d1fe Binary files /dev/null and b/tutorials/images/Polkadot-Vault-introduction.png differ diff --git a/tutorials/images/Polkadotjs-Create-Account.png b/tutorials/images/Polkadotjs-Create-Account.png new file mode 100644 index 0000000000..fb21104bf7 Binary files /dev/null and b/tutorials/images/Polkadotjs-Create-Account.png differ diff --git a/tutorials/images/Recover-Identity.png b/tutorials/images/Recover-Identity.png new file mode 100644 index 0000000000..30470872bf Binary files /dev/null and b/tutorials/images/Recover-Identity.png differ diff --git a/tutorials/images/Recover-Path.png b/tutorials/images/Recover-Path.png new file mode 100644 index 0000000000..c5b90208b2 Binary files /dev/null and b/tutorials/images/Recover-Path.png differ diff --git a/tutorials/images/logo-parity-signer.svg b/tutorials/images/logo-parity-signer.svg new file mode 100644 index 0000000000..86ca188faa --- /dev/null +++ b/tutorials/images/logo-parity-signer.svg @@ -0,0 +1,5 @@ + + + + +