|
|
<!DOCTYPE html>
|
|
|
<html lang="en">
|
|
|
<head>
|
|
|
<meta charset="utf-8">
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
<title>Documentation for Pantheon v0.8.3 </title>
|
|
|
<style>/*!
|
|
|
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
|
|
* Copyright 2011-2016 Twitter, Inc.
|
|
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
|
*//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
|
|
|
/*# sourceMappingURL=bootstrap.min.css.map */</style>
|
|
|
<style>/*
|
|
|
|
|
|
Original highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>
|
|
|
|
|
|
*/
|
|
|
|
|
|
.hljs {
|
|
|
display: block;
|
|
|
overflow-x: auto;
|
|
|
padding: 0.5em;
|
|
|
background: #F0F0F0;
|
|
|
}
|
|
|
|
|
|
|
|
|
/* Base color: saturation 0; */
|
|
|
|
|
|
.hljs,
|
|
|
.hljs-subst {
|
|
|
color: #444;
|
|
|
}
|
|
|
|
|
|
.hljs-comment {
|
|
|
color: #888888;
|
|
|
}
|
|
|
|
|
|
.hljs-keyword,
|
|
|
.hljs-attribute,
|
|
|
.hljs-selector-tag,
|
|
|
.hljs-meta-keyword,
|
|
|
.hljs-doctag,
|
|
|
.hljs-name {
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
|
|
|
|
/* User color: hue: 0 */
|
|
|
|
|
|
.hljs-type,
|
|
|
.hljs-string,
|
|
|
.hljs-number,
|
|
|
.hljs-selector-id,
|
|
|
.hljs-selector-class,
|
|
|
.hljs-quote,
|
|
|
.hljs-template-tag,
|
|
|
.hljs-deletion {
|
|
|
color: #880000;
|
|
|
}
|
|
|
|
|
|
.hljs-title,
|
|
|
.hljs-section {
|
|
|
color: #880000;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
|
.hljs-regexp,
|
|
|
.hljs-symbol,
|
|
|
.hljs-variable,
|
|
|
.hljs-template-variable,
|
|
|
.hljs-link,
|
|
|
.hljs-selector-attr,
|
|
|
.hljs-selector-pseudo {
|
|
|
color: #BC6060;
|
|
|
}
|
|
|
|
|
|
|
|
|
/* Language color: hue: 90; */
|
|
|
|
|
|
.hljs-literal {
|
|
|
color: #78A960;
|
|
|
}
|
|
|
|
|
|
.hljs-built_in,
|
|
|
.hljs-bullet,
|
|
|
.hljs-code,
|
|
|
.hljs-addition {
|
|
|
color: #397300;
|
|
|
}
|
|
|
|
|
|
|
|
|
/* Meta color: hue: 200 */
|
|
|
|
|
|
.hljs-meta {
|
|
|
color: #1f7199;
|
|
|
}
|
|
|
|
|
|
.hljs-meta-string {
|
|
|
color: #4d99bf;
|
|
|
}
|
|
|
|
|
|
|
|
|
/* Misc effects */
|
|
|
|
|
|
.hljs-emphasis {
|
|
|
font-style: italic;
|
|
|
}
|
|
|
|
|
|
.hljs-strong {
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
</style>
|
|
|
<style>/*
|
|
|
|
|
|
github.com style (c) Vasily Polovnyov <vast@whiteants.net>
|
|
|
|
|
|
*/
|
|
|
|
|
|
.hljs {
|
|
|
display: block;
|
|
|
overflow-x: auto;
|
|
|
padding: 0.5em;
|
|
|
color: #333;
|
|
|
background: #f8f8f8;
|
|
|
}
|
|
|
|
|
|
.hljs-comment,
|
|
|
.hljs-quote {
|
|
|
color: #998;
|
|
|
font-style: italic;
|
|
|
}
|
|
|
|
|
|
.hljs-keyword,
|
|
|
.hljs-selector-tag,
|
|
|
.hljs-subst {
|
|
|
color: #333;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
|
.hljs-number,
|
|
|
.hljs-literal,
|
|
|
.hljs-variable,
|
|
|
.hljs-template-variable,
|
|
|
.hljs-tag .hljs-attr {
|
|
|
color: #008080;
|
|
|
}
|
|
|
|
|
|
.hljs-string,
|
|
|
.hljs-doctag {
|
|
|
color: #d14;
|
|
|
}
|
|
|
|
|
|
.hljs-title,
|
|
|
.hljs-section,
|
|
|
.hljs-selector-id {
|
|
|
color: #900;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
|
.hljs-subst {
|
|
|
font-weight: normal;
|
|
|
}
|
|
|
|
|
|
.hljs-type,
|
|
|
.hljs-class .hljs-title {
|
|
|
color: #458;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
|
.hljs-tag,
|
|
|
.hljs-name,
|
|
|
.hljs-attribute {
|
|
|
color: #000080;
|
|
|
font-weight: normal;
|
|
|
}
|
|
|
|
|
|
.hljs-regexp,
|
|
|
.hljs-link {
|
|
|
color: #009926;
|
|
|
}
|
|
|
|
|
|
.hljs-symbol,
|
|
|
.hljs-bullet {
|
|
|
color: #990073;
|
|
|
}
|
|
|
|
|
|
.hljs-built_in,
|
|
|
.hljs-builtin-name {
|
|
|
color: #0086b3;
|
|
|
}
|
|
|
|
|
|
.hljs-meta {
|
|
|
color: #999;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
|
.hljs-deletion {
|
|
|
background: #fdd;
|
|
|
}
|
|
|
|
|
|
.hljs-addition {
|
|
|
background: #dfd;
|
|
|
}
|
|
|
|
|
|
.hljs-emphasis {
|
|
|
font-style: italic;
|
|
|
}
|
|
|
|
|
|
.hljs-strong {
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
</style>
|
|
|
<style> /*General for HTML and PDF*/
|
|
|
body {
|
|
|
font-family: Helvetica, arial, sans-serif;
|
|
|
font-size: 14px;
|
|
|
line-height: 1.6;
|
|
|
padding-top: 10px;
|
|
|
padding-bottom: 10px;
|
|
|
background-color: white;
|
|
|
padding: 30px; }
|
|
|
|
|
|
body > *:first-child {
|
|
|
margin-top: 0 !important; }
|
|
|
body > *:last-child {
|
|
|
margin-bottom: 0 !important; }
|
|
|
|
|
|
a {
|
|
|
color: #4183C4; }
|
|
|
a.absent {
|
|
|
color: #cc0000; }
|
|
|
a.anchor {
|
|
|
display: block;
|
|
|
padding-left: 30px;
|
|
|
margin-left: -30px;
|
|
|
cursor: pointer;
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
bottom: 0; }
|
|
|
|
|
|
h1, h2, h3, h4, h5, h6 {
|
|
|
margin: 20px 0 10px;
|
|
|
padding: 0;
|
|
|
font-weight: bold;
|
|
|
-webkit-font-smoothing: antialiased;
|
|
|
cursor: text;
|
|
|
position: relative; }
|
|
|
|
|
|
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
|
|
|
background: url("../../images/modules/styleguide/para.png") no-repeat 10px center;
|
|
|
text-decoration: none; }
|
|
|
|
|
|
h1 tt, h1 code {
|
|
|
font-size: inherit; }
|
|
|
|
|
|
h2 tt, h2 code {
|
|
|
font-size: inherit; }
|
|
|
|
|
|
h3 tt, h3 code {
|
|
|
font-size: inherit; }
|
|
|
|
|
|
h4 tt, h4 code {
|
|
|
font-size: inherit; }
|
|
|
|
|
|
h5 tt, h5 code {
|
|
|
font-size: inherit; }
|
|
|
|
|
|
h6 tt, h6 code {
|
|
|
font-size: inherit; }
|
|
|
|
|
|
h1 {
|
|
|
font-size: 28px;
|
|
|
color: black; }
|
|
|
|
|
|
h2 {
|
|
|
font-size: 24px;
|
|
|
border-bottom: 1px solid #cccccc;
|
|
|
color: black; }
|
|
|
|
|
|
h3 {
|
|
|
font-size: 18px; }
|
|
|
|
|
|
h4 {
|
|
|
font-size: 16px; }
|
|
|
|
|
|
h5 {
|
|
|
font-size: 14px; }
|
|
|
|
|
|
h6 {
|
|
|
color: #777777;
|
|
|
font-size: 14px; }
|
|
|
|
|
|
pre.hljs {
|
|
|
border:none;
|
|
|
padding: 12px;
|
|
|
}
|
|
|
|
|
|
code {
|
|
|
background-color: #EDEDED;
|
|
|
}
|
|
|
|
|
|
p, blockquote, ul, ol, dl, li, table, pre.hljs {
|
|
|
margin: 15px 0; }
|
|
|
|
|
|
hr {
|
|
|
background: transparent url("../../images/modules/pulls/dirty-shade.png") repeat-x 0 0;
|
|
|
border: 0 none;
|
|
|
color: #cccccc;
|
|
|
height: 4px;
|
|
|
padding: 0; }
|
|
|
|
|
|
body > h2:first-child {
|
|
|
margin-top: 0;
|
|
|
padding-top: 0; }
|
|
|
body > h1:first-child {
|
|
|
margin-top: 0;
|
|
|
padding-top: 0; }
|
|
|
body > h1:first-child + h2 {
|
|
|
margin-top: 0;
|
|
|
padding-top: 0; }
|
|
|
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
|
|
|
margin-top: 0;
|
|
|
padding-top: 0; }
|
|
|
|
|
|
a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
|
|
|
margin-top: 0;
|
|
|
padding-top: 0; }
|
|
|
|
|
|
h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
|
|
|
margin-top: 0; }
|
|
|
|
|
|
li p.first {
|
|
|
display: inline-block; }
|
|
|
|
|
|
ul, ol {
|
|
|
padding-left: 30px; }
|
|
|
|
|
|
ul :first-child, ol :first-child {
|
|
|
margin-top: 0; }
|
|
|
|
|
|
ul :last-child, ol :last-child {
|
|
|
margin-bottom: 0; }
|
|
|
|
|
|
dl {
|
|
|
padding: 0; }
|
|
|
dl dt {
|
|
|
font-size: 14px;
|
|
|
font-weight: bold;
|
|
|
font-style: italic;
|
|
|
padding: 0;
|
|
|
margin: 15px 0 5px; }
|
|
|
dl dt:first-child {
|
|
|
padding: 0; }
|
|
|
dl dt > :first-child {
|
|
|
margin-top: 0; }
|
|
|
dl dt > :last-child {
|
|
|
margin-bottom: 0; }
|
|
|
dl dd {
|
|
|
margin: 0 0 15px;
|
|
|
padding: 0 15px; }
|
|
|
dl dd > :first-child {
|
|
|
margin-top: 0; }
|
|
|
dl dd > :last-child {
|
|
|
margin-bottom: 0; }
|
|
|
|
|
|
blockquote {
|
|
|
border-left: 4px solid #dddddd;
|
|
|
padding: 0 15px;
|
|
|
font-size: 14px;
|
|
|
color: #777777; }
|
|
|
blockquote > :first-child {
|
|
|
margin-top: 0; }
|
|
|
blockquote > :last-child {
|
|
|
margin-bottom: 0; }
|
|
|
|
|
|
table {
|
|
|
padding: 0; }
|
|
|
table tr {
|
|
|
border-top: 1px solid #cccccc;
|
|
|
background-color: white;
|
|
|
margin: 0;
|
|
|
padding: 0; }
|
|
|
table tr:nth-child(2n) {
|
|
|
background-color: #f8f8f8; }
|
|
|
table tr th {
|
|
|
font-weight: bold;
|
|
|
border: 1px solid #cccccc;
|
|
|
text-align: left;
|
|
|
margin: 0;
|
|
|
padding: 6px 13px; }
|
|
|
table tr td {
|
|
|
border: 1px solid #cccccc;
|
|
|
text-align: left;
|
|
|
margin: 0;
|
|
|
padding: 6px 13px; }
|
|
|
table tr th :first-child, table tr td :first-child {
|
|
|
margin-top: 0; }
|
|
|
table tr th :last-child, table tr td :last-child {
|
|
|
margin-bottom: 0; }
|
|
|
|
|
|
img {
|
|
|
max-width: 100%; }
|
|
|
|
|
|
span.frame {
|
|
|
display: block;
|
|
|
overflow: hidden; }
|
|
|
span.frame > span {
|
|
|
border: 1px solid #dddddd;
|
|
|
display: block;
|
|
|
float: left;
|
|
|
overflow: hidden;
|
|
|
margin: 13px 0 0;
|
|
|
padding: 7px;
|
|
|
width: auto; }
|
|
|
span.frame span img {
|
|
|
display: block;
|
|
|
float: left; }
|
|
|
span.frame span span {
|
|
|
clear: both;
|
|
|
color: #333333;
|
|
|
display: block;
|
|
|
padding: 5px 0 0; }
|
|
|
span.align-center {
|
|
|
display: block;
|
|
|
overflow: hidden;
|
|
|
clear: both; }
|
|
|
span.align-center > span {
|
|
|
display: block;
|
|
|
overflow: hidden;
|
|
|
margin: 13px auto 0;
|
|
|
text-align: center; }
|
|
|
span.align-center span img {
|
|
|
margin: 0 auto;
|
|
|
text-align: center; }
|
|
|
span.align-right {
|
|
|
display: block;
|
|
|
overflow: hidden;
|
|
|
clear: both; }
|
|
|
span.align-right > span {
|
|
|
display: block;
|
|
|
overflow: hidden;
|
|
|
margin: 13px 0 0;
|
|
|
text-align: right; }
|
|
|
span.align-right span img {
|
|
|
margin: 0;
|
|
|
text-align: right; }
|
|
|
span.float-left {
|
|
|
display: block;
|
|
|
margin-right: 13px;
|
|
|
overflow: hidden;
|
|
|
float: left; }
|
|
|
span.float-left span {
|
|
|
margin: 13px 0 0; }
|
|
|
span.float-right {
|
|
|
display: block;
|
|
|
margin-left: 13px;
|
|
|
overflow: hidden;
|
|
|
float: right; }
|
|
|
span.float-right > span {
|
|
|
display: block;
|
|
|
overflow: hidden;
|
|
|
margin: 13px auto 0;
|
|
|
text-align: right; }
|
|
|
|
|
|
.nav-container ul, .nav-container ol {
|
|
|
margin-left: 0px;
|
|
|
padding-left: 0px;
|
|
|
}
|
|
|
|
|
|
.nav-container .toc:after {
|
|
|
content: "Table of contents";
|
|
|
}
|
|
|
|
|
|
.nav {
|
|
|
margin:0;
|
|
|
}
|
|
|
|
|
|
.nav-inner > .nav, .nav-inner > .nav > li > .nav {
|
|
|
border-bottom: 1px solid #e0e0e0;
|
|
|
margin-bottom: 2px;
|
|
|
margin-top: 2px;
|
|
|
}
|
|
|
|
|
|
.nav-inner > .nav > li:last-child > .nav {
|
|
|
border-bottom: none;
|
|
|
}
|
|
|
|
|
|
.nav > li {
|
|
|
margin: 0;
|
|
|
}
|
|
|
|
|
|
.nav > li > a {
|
|
|
display: block;
|
|
|
padding: 3px 18px;
|
|
|
font-size: 1em;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
.nav > li > .nav > li > a {
|
|
|
padding:2px 28px;
|
|
|
font-size: 0.92em;
|
|
|
font-weight: 400;
|
|
|
}
|
|
|
|
|
|
.nav > li > .nav > li > .nav > li > a {
|
|
|
padding:2px 36px;
|
|
|
font-size: 0.86em;
|
|
|
font-weight: 400;
|
|
|
}
|
|
|
|
|
|
.nav > li > .nav > li > .nav > li > .nav > li > a {
|
|
|
padding:2px 44px;
|
|
|
font-size: 0.86em;
|
|
|
font-weight: 400;
|
|
|
}
|
|
|
|
|
|
.nav li span {
|
|
|
margin: 0 0;
|
|
|
padding: 3px 18px;
|
|
|
font-size: inherit;
|
|
|
color:#888
|
|
|
}
|
|
|
|
|
|
/*For HTML*/
|
|
|
.html-doc {
|
|
|
padding-top: 60px !important;
|
|
|
}
|
|
|
|
|
|
.html-doc .footer {
|
|
|
font-size: 85%;
|
|
|
margin-top: 20px;
|
|
|
width: 250px;
|
|
|
}
|
|
|
|
|
|
.page:before {
|
|
|
content:"";
|
|
|
display:block;
|
|
|
height:55px; /* fixed header height*/
|
|
|
margin:-55px 0 0; /* negative fixed header height */
|
|
|
}
|
|
|
|
|
|
.page {
|
|
|
height:1px;
|
|
|
font-size:1px;
|
|
|
width: 1px;
|
|
|
padding:50px 0 0 0;
|
|
|
margin: -50px 0 0 0;
|
|
|
}
|
|
|
|
|
|
.html-doc .nav-container {
|
|
|
margin-top: 10px;
|
|
|
position: relative;
|
|
|
}
|
|
|
|
|
|
.html-doc .logo-img {
|
|
|
padding: 10px;
|
|
|
margin:7px 0 0 0;
|
|
|
max-width:75%;
|
|
|
max-height:25%;
|
|
|
}
|
|
|
|
|
|
.html-doc .nav-container .toc:after {
|
|
|
display: block;
|
|
|
color:#888;
|
|
|
text-transform: uppercase;
|
|
|
padding: 4px 18px;
|
|
|
font-weight: 500;
|
|
|
font-size:90%
|
|
|
}
|
|
|
|
|
|
.html-doc .nav-container > .nav-inner {
|
|
|
position: fixed;
|
|
|
}
|
|
|
|
|
|
.html-doc .nav li a:before, .html-doc .nav li span:before {
|
|
|
content: "\00B7 ";
|
|
|
}
|
|
|
|
|
|
.html-doc .nav li.active > a {
|
|
|
color:darkred;
|
|
|
}
|
|
|
|
|
|
.html-doc .nav li.active > a:before {
|
|
|
content: "\25b8 ";
|
|
|
}
|
|
|
|
|
|
.navbar-default .navbar-nav>li>a.generated-by,
|
|
|
.navbar-default .navbar-nav>li>a.generated-by:visited {
|
|
|
font-size: 85%;
|
|
|
color:#ADADAD;
|
|
|
text-shadow: 1px 1px 0 #fff;
|
|
|
}
|
|
|
|
|
|
.navbar-default .navbar-nav>li>a.generated-by:hover {
|
|
|
color:#666
|
|
|
}
|
|
|
|
|
|
@media (max-width: 992px) {
|
|
|
.html-doc .nav-container > .nav-inner {
|
|
|
position: relative;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media (min-width: 768px) {
|
|
|
.navbar > .container .doc-title {
|
|
|
margin-left: 0;
|
|
|
}
|
|
|
.navbar-right {
|
|
|
margin-right: 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media (min-width: 992px) {
|
|
|
.nav-inner {
|
|
|
min-width: 210px;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@media (min-width: 1200px) {
|
|
|
.nav-inner {
|
|
|
min-width: 250px;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*For PDF*/
|
|
|
.pdf-doc{
|
|
|
padding: 0px;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .navbar-toggle {
|
|
|
display: none;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .coverimg {
|
|
|
max-width:50%;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .covertitle {
|
|
|
padding-top: 40%;
|
|
|
text-align: right;
|
|
|
font-size: 40px;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .nav-container {
|
|
|
page-break-before: always !important;
|
|
|
display: block;
|
|
|
}
|
|
|
|
|
|
.pdf-doc pre.hljs, .pdf-doc code {
|
|
|
font-size: 80%;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .nav > li > a {
|
|
|
padding: 3px 6px;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .nav > li > .pdf-doc .nav > li > a {
|
|
|
padding:2px 16px;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .nav > li > .pdf-doc .nav > li > .pdf-doc .nav > li > a {
|
|
|
padding:2px 24px;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .nav > li > .pdf-doc .nav > li > .pdf-doc .nav > li > .pdf-doc .nav > li > a {
|
|
|
padding:2px 32px;
|
|
|
}
|
|
|
|
|
|
.pdf-doc .nav li span {
|
|
|
padding: 3px 6px;
|
|
|
}
|
|
|
</style>
|
|
|
<style>.nav > li > .nav > li > .nav > li > .nav > li {display: none;}</style>
|
|
|
<script>/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */
|
|
|
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c;
|
|
|
}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=N.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function W(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&T.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var X=/^(?:checkbox|radio)$/i,Y=/<([\w:-]+)/,Z=/^$|\/(?:java|ecma)script/i,$={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||d,e=c.documentElement,f=c.body,a.pageX=b.clientX+(e&&e.scrollLeft||f&&f.scrollLeft||0)-(e&&e.clientLeft||f&&f.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||f&&f.scrollTop||0)-(e&&e.clientTop||f&&f.clientTop||0)),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ea.test(f)?this.mouseHooks:da.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=d),3===a.target.nodeType&&(a.target=a.target.parentNode),h.filter?h.filter(a,g):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==ia()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===ia()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ga:ha):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:ha,isPropagationStopped:ha,isImmediatePropagationStopped:ha,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ga,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ga,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ga,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),n.fn.extend({on:function(a,b,c,d){return ja(this,a,b,c,d)},one:function(a,b,c,d){return ja(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ha),this.each(function(){n.event.remove(this,a,c,b)})}});var ka=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,la=/<script|<style|<link/i,ma=/checked\s*(?:[^=]|=\s*.checked.)/i,na=/^true\/(.*)/,oa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=wa[0].contentDocument,b.write(),b.close(),c=ya(a,b),wa.detach()),xa[a]=c),c}var Aa=/^margin/,Ba=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ca=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Da=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Ea=d.documentElement;!function(){var b,c,e,f,g=d.createElement("div"),h=d.createElement("div");if(h.style){h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,g.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",g.appendChild(h);function i(){h.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",h.innerHTML="",Ea.appendChild(g);var d=a.getComputedStyle(h);b="1%"!==d.top,f="2px"===d.marginLeft,c="4px"===d.width,h.style.marginRight="50%",e="4px"===d.marginRight,Ea.removeChild(g)}n.extend(l,{pixelPosition:function(){return i(),b},boxSizingReliable:function(){return null==c&&i(),c},pixelMarginRight:function(){return null==c&&i(),e},reliableMarginLeft:function(){return null==c&&i(),f},reliableMarginRight:function(){var b,c=h.appendChild(d.createElement("div"));return c.style.cssText=h.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",h.style.width="1px",Ea.appendChild(g),b=!parseFloat(a.getComputedStyle(c).marginRight),Ea.removeChild(g),h.removeChild(c),b}})}}();function Fa(a,b,c){var d,e,f,g,h=a.style;return c=c||Ca(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Ba.test(g)&&Aa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0!==g?g+"":g}function Ga(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Ha=/^(none|table(?!-c[ea]).+)/,Ia={position:"absolute",visibility:"hidden",display:"block"},Ja={letterSpacing:"0",fontWeight:"400"},Ka=["Webkit","O","Moz","ms"],La=d.createElement("div").style;function Ma(a){if(a in La)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ka.length;while(c--)if(a=Ka[c]+b,a in La)return a}function Na(a,b,c){var d=T.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Oa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Pa(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ca(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Fa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ba.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Oa(a,b,c||(g?"border":"content"),d,f)+"px"}function Qa(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=N.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=N.access(d,"olddisplay",za(d.nodeName)))):(e=V(d),"none"===c&&e||N.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Fa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Ma(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=T.exec(c))&&e[1]&&(c=W(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Ma(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Fa(a,b,d)),"normal"===e&&b in Ja&&(e=Ja[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Ha.test(n.css(a,"display"))&&0===a.offsetWidth?Da(a,Ia,function(){return Pa(a,b,d)}):Pa(a,b,d):void 0},set:function(a,c,d){var e,f=d&&Ca(a),g=d&&Oa(a,b,d,"border-box"===n.css(a,"boxSizing",!1,f),f);return g&&(e=T.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=n.css(a,b)),Na(a,c,g)}}}),n.cssHooks.marginLeft=Ga(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Fa(a,"marginLeft"))||a.getBoundingClientRect().left-Da(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px":void 0}),n.cssHooks.marginRight=Ga(l.reliableMarginRight,function(a,b){return b?Da(a,{display:"inline-block"},Fa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Aa.test(a)||(n.cssHooks[a+b].set=Na)}),n.fn.extend({css:function(a,b){return K(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ca(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Qa(this,!0)},hide:function(){return Qa(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function Ra(a,b,c,d,e){return new Ra.prototype.init(a,b,c,d,e)}n.Tween=Ra,Ra.prototype={constructor:Ra,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ra.propHooks[this.prop];return a&&a.get?a.get(this):Ra.propHooks._default.get(this)},run:function(a){var b,c=Ra.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ra.propHooks._default.set(this),this}},Ra.prototype.init.prototype=Ra.prototype,Ra.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},Ra.propHooks.scrollTop=Ra.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=Ra.prototype.init,n.fx.step={};var Sa,Ta,Ua=/^(?:toggle|show|hide)$/,Va=/queueHooks$/;function Wa(){return a.setTimeout(function(){Sa=void 0}),Sa=n.now()}function Xa(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=U[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ya(a,b,c){for(var d,e=(_a.tweeners[b]||[]).concat(_a.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Za(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&V(a),q=N.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?N.get(a,"olddisplay")||za(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Ua.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?za(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=N.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;N.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ya(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function $a(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function _a(a,b,c){var d,e,f=0,g=_a.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Sa||Wa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:Sa||Wa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for($a(k,j.opts.specialEasing);g>f;f++)if(d=_a.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,Ya,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(_a,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return W(c.elem,a,T.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],_a.tweeners[c]=_a.tweeners[c]||[],_a.tweeners[c].unshift(b)},prefilters:[Za],prefilter:function(a,b){b?_a.prefilters.unshift(a):_a.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=_a(this,n.extend({},a),f);(e||N.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=N.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Va.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=N.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Xa(b,!0),a,d,e)}}),n.each({slideDown:Xa("show"),slideUp:Xa("hide"),slideToggle:Xa("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Sa=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Sa=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ta||(Ta=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(Ta),Ta=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",l.checkOn=""!==a.value,l.optSelected=c.selected,b.disabled=!0,l.optDisabled=!c.disabled,a=d.createElement("input"),a.value="t",a.type="radio",l.radioValue="t"===a.value}();var ab,bb=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return K(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ab:void 0)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)}}),ab={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=bb[b]||n.find.attr;bb[b]=function(a,b,d){var e,f;return d||(f=bb[b],bb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,bb[b]=f),e}});var cb=/^(?:input|select|textarea|button)$/i,db=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return K(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),
|
|
|
void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):cb.test(a.nodeName)||db.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var eb=/[\t\r\n\f]/g;function fb(a){return a.getAttribute&&a.getAttribute("class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,fb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=fb(c),d=1===c.nodeType&&(" "+e+" ").replace(eb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,fb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=fb(c),d=1===c.nodeType&&(" "+e+" ").replace(eb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,fb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=fb(this),b&&N.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":N.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+fb(c)+" ").replace(eb," ").indexOf(b)>-1)return!0;return!1}});var gb=/\r/g,hb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(gb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(hb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(n.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var ib=/^(?:focusinfocus|focusoutblur)$/;n.extend(n.event,{trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!ib.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),l=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},f||!o.trigger||o.trigger.apply(e,c)!==!1)){if(!f&&!o.noBubble&&!n.isWindow(e)){for(j=o.delegateType||q,ib.test(j+q)||(h=h.parentNode);h;h=h.parentNode)p.push(h),i=h;i===(e.ownerDocument||d)&&p.push(i.defaultView||i.parentWindow||a)}g=0;while((h=p[g++])&&!b.isPropagationStopped())b.type=g>1?j:o.bindType||q,m=(N.get(h,"events")||{})[b.type]&&N.get(h,"handle"),m&&m.apply(h,c),m=l&&h[l],m&&m.apply&&L(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=q,f||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!L(e)||l&&n.isFunction(e[q])&&!n.isWindow(e)&&(i=e[l],i&&(e[l]=null),n.event.triggered=q,e[q](),n.event.triggered=void 0,i&&(e[l]=i)),b.result}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b)}}),n.fn.extend({trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),l.focusin="onfocusin"in a,l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=N.access(d,b);e||d.addEventListener(a,c,!0),N.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=N.access(d,b)-1;e?N.access(d,b,e):(d.removeEventListener(a,c,!0),N.remove(d,b))}}});var jb=a.location,kb=n.now(),lb=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var mb=/#.*$/,nb=/([?&])_=[^&]*/,ob=/^(.*?):[ \t]*([^\r\n]*)$/gm,pb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,qb=/^(?:GET|HEAD)$/,rb=/^\/\//,sb={},tb={},ub="*/".concat("*"),vb=d.createElement("a");vb.href=jb.href;function wb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function xb(a,b,c,d){var e={},f=a===tb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function yb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function zb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Ab(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:jb.href,type:"GET",isLocal:pb.test(jb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ub,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?yb(yb(a,n.ajaxSettings),b):yb(n.ajaxSettings,a)},ajaxPrefilter:wb(sb),ajaxTransport:wb(tb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m=n.ajaxSetup({},c),o=m.context||m,p=m.context&&(o.nodeType||o.jquery)?n(o):n.event,q=n.Deferred(),r=n.Callbacks("once memory"),s=m.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,getResponseHeader:function(a){var b;if(2===v){if(!h){h={};while(b=ob.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===v?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return v||(a=u[c]=u[c]||a,t[a]=b),this},overrideMimeType:function(a){return v||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>v)for(b in a)s[b]=[s[b],a[b]];else x.always(a[x.status]);return this},abort:function(a){var b=a||w;return e&&e.abort(b),z(0,b),this}};if(q.promise(x).complete=r.add,x.success=x.done,x.error=x.fail,m.url=((b||m.url||jb.href)+"").replace(mb,"").replace(rb,jb.protocol+"//"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=n.trim(m.dataType||"*").toLowerCase().match(G)||[""],null==m.crossDomain){j=d.createElement("a");try{j.href=m.url,j.href=j.href,m.crossDomain=vb.protocol+"//"+vb.host!=j.protocol+"//"+j.host}catch(y){m.crossDomain=!0}}if(m.data&&m.processData&&"string"!=typeof m.data&&(m.data=n.param(m.data,m.traditional)),xb(sb,m,c,x),2===v)return x;k=n.event&&m.global,k&&0===n.active++&&n.event.trigger("ajaxStart"),m.type=m.type.toUpperCase(),m.hasContent=!qb.test(m.type),f=m.url,m.hasContent||(m.data&&(f=m.url+=(lb.test(f)?"&":"?")+m.data,delete m.data),m.cache===!1&&(m.url=nb.test(f)?f.replace(nb,"$1_="+kb++):f+(lb.test(f)?"&":"?")+"_="+kb++)),m.ifModified&&(n.lastModified[f]&&x.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&x.setRequestHeader("If-None-Match",n.etag[f])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",m.contentType),x.setRequestHeader("Accept",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+("*"!==m.dataTypes[0]?", "+ub+"; q=0.01":""):m.accepts["*"]);for(l in m.headers)x.setRequestHeader(l,m.headers[l]);if(m.beforeSend&&(m.beforeSend.call(o,x,m)===!1||2===v))return x.abort();w="abort";for(l in{success:1,error:1,complete:1})x[l](m[l]);if(e=xb(tb,m,c,x)){if(x.readyState=1,k&&p.trigger("ajaxSend",[x,m]),2===v)return x;m.async&&m.timeout>0&&(i=a.setTimeout(function(){x.abort("timeout")},m.timeout));try{v=1,e.send(t,z)}catch(y){if(!(2>v))throw y;z(-1,y)}}else z(-1,"No Transport");function z(b,c,d,h){var j,l,t,u,w,y=c;2!==v&&(v=2,i&&a.clearTimeout(i),e=void 0,g=h||"",x.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(u=zb(m,x,d)),u=Ab(m,u,x,j),j?(m.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(n.lastModified[f]=w),w=x.getResponseHeader("etag"),w&&(n.etag[f]=w)),204===b||"HEAD"===m.type?y="nocontent":304===b?y="notmodified":(y=u.state,l=u.data,t=u.error,j=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),x.status=b,x.statusText=(c||y)+"",j?q.resolveWith(o,[l,y,x]):q.rejectWith(o,[x,y,t]),x.statusCode(s),s=void 0,k&&p.trigger(j?"ajaxSuccess":"ajaxError",[x,m,j?l:t]),r.fireWith(o,[x,y]),k&&(p.trigger("ajaxComplete",[x,m]),--n.active||n.event.trigger("ajaxStop")))}return x},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return!n.expr.filters.visible(a)},n.expr.filters.visible=function(a){return a.offsetWidth>0||a.offsetHeight>0||a.getClientRects().length>0};var Bb=/%20/g,Cb=/\[\]$/,Db=/\r?\n/g,Eb=/^(?:submit|button|image|reset|file)$/i,Fb=/^(?:input|select|textarea|keygen)/i;function Gb(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Cb.test(a)?d(a,e):Gb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Gb(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Gb(c,a[c],b,e);return d.join("&").replace(Bb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Fb.test(this.nodeName)&&!Eb.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Db,"\r\n")}}):{name:b.name,value:c.replace(Db,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Hb={0:200,1223:204},Ib=n.ajaxSettings.xhr();l.cors=!!Ib&&"withCredentials"in Ib,l.ajax=Ib=!!Ib,n.ajaxTransport(function(b){var c,d;return l.cors||Ib&&!b.crossDomain?{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Hb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=n("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Jb=[],Kb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Jb.pop()||n.expando+"_"+kb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Kb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Kb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Kb,"$1"+e):b.jsonp!==!1&&(b.url+=(lb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Jb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ca([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var Lb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Lb)return Lb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function Mb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(e=d.getBoundingClientRect(),c=Mb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ea})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;n.fn[a]=function(d){return K(this,function(a,d,e){var f=Mb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ga(l.pixelPosition,function(a,c){return c?(c=Fa(a,b),Ba.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return K(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)},size:function(){return this.length}}),n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Nb=a.jQuery,Ob=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Ob),b&&a.jQuery===n&&(a.jQuery=Nb),n},b||(a.jQuery=a.$=n),n});
|
|
|
</script>
|
|
|
<script>/*!
|
|
|
* Bootstrap v3.3.7 (http://getbootstrap.com)
|
|
|
* Copyright 2011-2016 Twitter, Inc.
|
|
|
* Licensed under the MIT license
|
|
|
*/
|
|
|
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
|
|
|
this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
|
|
|
</head>
|
|
|
<body id="page-top" class="html-doc">
|
|
|
<!-- Fixed navbar -->
|
|
|
<div class="navbar navbar-default navbar-fixed-top">
|
|
|
<div class="container">
|
|
|
<div class="navbar-header">
|
|
|
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
|
|
<span class="sr-only">Toggle navigation</span>
|
|
|
<span class="icon-bar"></span>
|
|
|
<span class="icon-bar"></span>
|
|
|
<span class="icon-bar"></span>
|
|
|
</button>
|
|
|
<a class="navbar-brand doc-title" href="#page-top">Documentation for Pantheon v0.8.3</a>
|
|
|
</div>
|
|
|
<div id="navbar" class="navbar-collapse collapse">
|
|
|
<ul class="nav navbar-nav">
|
|
|
|
|
|
</div><!--/.nav-collapse -->
|
|
|
</div>
|
|
|
</div>
|
|
|
<div id="documentation-container" class="container">
|
|
|
<div class="row">
|
|
|
<div class="col-md-3">
|
|
|
<div class="nav-container">
|
|
|
<div class="nav-inner" id="scroll-spy" style="width: min-content; overflow: auto; top: 60px; bottom: 0; padding 10px 0 10px 0;">
|
|
|
<span class="toc"></span>
|
|
|
<ul class="nav"><li class="active"><a href="#Overview">Overview</a></li><li><a href="#Installation">Installation</a><ul class="nav"><li><a href="#Install-Binaries">Install Binary Distribution</a></li><li><a href="#Build-From-Source">Build from Source</a></li></ul></li><li><a href="#Getting-Started">Getting Started</a><ul class="nav"><li><a href="#Starting-Pantheon">Starting Pantheon</a></li><li><a href="#Run-Docker-Image">Running Pantheon from Docker Image</a></li><li><a href="#Private-Network-Quickstart">Private Network Quickstart</a> </li></ul></li><li><span>Configuring Pantheon</span><ul class="nav"><li><a href="#NetworkID-And-ChainID">Network ID and Chain ID</a></li><li><a href="#Node-Keys">Node Keys</a></li><li><a href="#Networking">Networking</a></li><li><a href="#Accounts-for-Testing">Accounts for Testing</a></li><li><a href="#Logging">Logging</a></li><li><a href="#Testing-Developing-Nodes">Testing and Developing Nodes</a></li><li><a href="#Proof-of-Authority">Proof of Authority</a></li><li><a href="#Passing-JVM-Options">Passing JVM Options</a></li></ul></li><li><span>Using Pantheon</span><ul class="nav"><li><a href="#Transactions">Creating and Sending Transactions</a></li><li><a href="#Account-Management">Using Wallets for Account Management</a></li><li><a href="#Mining">Mining</a></li><li><a href="#RPC-PubSub">RPC Pub/Sub</a></li><li><a href="#Debugging">Debugging Pantheon</a></li></ul></li><li><span>Reference</span><ul class="nav"><li><a href="#Pantheon-CLI-Syntax">Pantheon CLI Reference</a></li><li><a href="#JSON-RPC-API">Pantheon JSON-RPC API</a><ul class="nav"><li><a href="#Using-JSON-RPC-API">Using the JSON-RPC API</a></li><li><a href="#JSON-RPC-API-Methods">JSON-RPC API Methods</a></li><li><a href="#Objects">JSON-RPC API Objects</a> </li></ul></li></ul></li></ul>
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
|
|
|
<div class="col-md-9">
|
|
|
<p class="page" id="Overview"></p><h1>Overview</h1>
|
|
|
<h1 id="pantheon-overview">Pantheon Overview</h1>
|
|
|
<h2 id="contents">Contents</h2>
|
|
|
<ul>
|
|
|
<li><a href="#what-is-pantheon">What is Pantheon?</a></li>
|
|
|
<li><a href="#what-can-you-do-with-pantheon">What can you do with Pantheon?</a></li>
|
|
|
<li><a href="#what-doesnt-pantheon-support">What doesn't Pantheon support?</a></li>
|
|
|
</ul>
|
|
|
<h3 id="what-is-pantheon-">What is Pantheon?</h3>
|
|
|
<p>Pantheon is an open-source Ethereum client developed under the Apache 2.0 license and written in Java. It runs on the Ethereum public network, private networks, and test networks such as Rinkeby and Ropsten. Pantheon implements Proof of Work (Ethash) and Proof of Authority (Clique) consensus mechanisms. </p>
|
|
|
<p>You can use Pantheon to develop enterprise applications requiring secure, high-performance transaction processing in a private network. </p>
|
|
|
<p>Our roadmap includes Pantheon with privacy features, alternative consensus mechanisms, and other enterprise features.</p>
|
|
|
<h3 id="what-can-you-do-with-pantheon-">What can you do with Pantheon?</h3>
|
|
|
<p>Pantheon includes a <a href="https://github.com/PegaSysEng/pantheon/wiki/Pantheon-CLI-Syntax">command line interface</a> and <a href="https://github.com/PegaSysEng/pantheon/wiki/JSON-RPC-API">JSON-RPC API</a> for running, maintaining, debugging, and monitoring node operations in an Ethereum network. You can use the API via RPC over HTTP or via WebSockets transport, and Pub/Sub is supported. The API supports typical Ethereum functionalities such as:</p>
|
|
|
<ul>
|
|
|
<li>Ether token mining</li>
|
|
|
<li>Smart contract development</li>
|
|
|
<li>Decentralized application (Dapp) development</li>
|
|
|
</ul>
|
|
|
<p>The Pantheon client supports common smart contract and Dapp development, deployment, and operational use cases, using tools such as <a href="http://truffleframework.com/">Truffle</a>, <a href="https://github.com/ethereum/remix">Remix</a>, and <a href="https://web3j.io/">web3j</a>. The client supports common JSON-RPC API methods such as eth, net, web3, debug, and miner.</p>
|
|
|
<p>Pantheon doesn't support <a href="https://github.com/PegaSysEng/pantheon/wiki/Account-Management">Account management</a>.</p>
|
|
|
<p class="page" id="Installation"></p><h1>Installation</h1>
|
|
|
<h1 id="pantheon-installation">Pantheon Installation</h1>
|
|
|
<p>You can install Pantheon by:</p>
|
|
|
<ul>
|
|
|
<li><a href="#Install-Binaries">Installing the binary distribution</a> </li>
|
|
|
<li><a href="#Build-From-Source">Building from source</a> </li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> To run a single node to connect the Ethereum mainnet or a public testnet, running from the <a href="#Run-Docker-Image">Pantheon docker image</a> is the fastest way to get started.</p>
|
|
|
</blockquote>
|
|
|
<h2 id="disk-space-and-ram-requirements">Disk Space and RAM Requirements</h2>
|
|
|
<p>Your computer should have at least 4 GB RAM. </p>
|
|
|
<p>Disk space needed varies depending on the network on which you run nodes. A small test network might require 200 MB while a mainnet node might require 1.5TB. If syncing a node on mainnet, allow 1.5 TB to 2 TB for the full blockchain archive.</p>
|
|
|
<p class="page" id="Install-Binaries"></p><h1>Install Binary Distribution</h1>
|
|
|
<h1 id="installation-from-binary-distribution">Installation from Binary Distribution</h1>
|
|
|
<h2 id="contents">Contents</h2>
|
|
|
<ul>
|
|
|
<li><a href="#mac-os">Mac OS</a></li>
|
|
|
<li><a href="#windows">Windows</a></li>
|
|
|
<li><a href="#linux--unix">Linux / Unix</a></li>
|
|
|
</ul>
|
|
|
<h2 id="mac-os">Mac OS</h2>
|
|
|
<h3 id="prerequisites">Prerequisites</h3>
|
|
|
<ul>
|
|
|
<li><a href="https://brew.sh/">Homebrew</a></li>
|
|
|
</ul>
|
|
|
<h3 id="install-using-homebrew">Install Using Homebrew</h3>
|
|
|
<pre class="hljs">brew tap pegasyseng/pantheon
|
|
|
brew install pantheon</pre><p>Display Pantheon command line help to confirm installation: </p>
|
|
|
<pre class="hljs">pantheon --help</pre><h2 id="windows-with-chocolatey">Windows with Chocolatey</h2>
|
|
|
<h3 id="prerequisites">Prerequisites</h3>
|
|
|
<ul>
|
|
|
<li><a href="#Install-Chocolatey">Chocolatey</a></li>
|
|
|
</ul>
|
|
|
<h3 id="install-using-chocolatey">Install Using Chocolatey</h3>
|
|
|
<p>To install from <a href="https://chocolatey.org/packages/pantheon/0.8.2">Chocolatey package</a>: </p>
|
|
|
<pre class="hljs">choco install pantheon</pre><p>Display Pantheon command line help to confirm installation: </p>
|
|
|
<pre class="hljs">pantheon --help</pre><h2 id="linux-unix-windows-without-chocolatey">Linux / Unix / Windows without Chocolatey</h2>
|
|
|
<h3 id="prerequisites">Prerequisites</h3>
|
|
|
<ul>
|
|
|
<li><p><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java JDK</a></p>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> Pantheon requires Java 8+ to compile; earlier versions are not supported.</p>
|
|
|
<p><strong>Note</strong> Pantheon is currently supported only on 64-bit versions of Windows, and requires a 64-bit version of JDK/JRE. We recommend that you also remove any 32-bit JDK/JRE installations.</p>
|
|
|
</blockquote>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<h3 id="install-from-packaged-binaries">Install from Packaged Binaries</h3>
|
|
|
<p>Download the Pantheon <a href="https://bintray.com/consensys/pegasys-repo/pantheon/_latestVersion#filesß">packaged binaries</a>.</p>
|
|
|
<p>Unpackage the downloaded files and change into the <code>pantheon-<release></code> directory. </p>
|
|
|
<p>Display Pantheon command line help to confirm installation: </p>
|
|
|
<pre class="hljs">bin/pantheon --help</pre><p class="page" id="Build-From-Source"></p><h1>Build from Source</h1>
|
|
|
<h1 id="building-pantheon-from-source">Building Pantheon from Source</h1>
|
|
|
<h2 id="prerequisites">Prerequisites</h2>
|
|
|
<ul>
|
|
|
<li><p><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java JDK</a></p>
|
|
|
<blockquote>
|
|
|
<p><strong>IMPORTANT:</strong> Pantheon requires Java 8+ to compile; earlier versions are not supported.</p>
|
|
|
</blockquote>
|
|
|
</li>
|
|
|
<li><p><a href="https://git-scm.com/downloads">Git</a> or <a href="https://desktop.github.com/">GitHub Desktop</a></p>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<h2 id="running-locally">Running Locally</h2>
|
|
|
<ul>
|
|
|
<li><a href="#installation-on-linux--unix--mac-os-x">Installation on Linux / Unix / Mac OS X</a></li>
|
|
|
<li><a href="#installation-on-windows">Installation on Windows</a></li>
|
|
|
</ul>
|
|
|
<h2 id="running-virtually">Running Virtually</h2>
|
|
|
<ul>
|
|
|
<li><a href="#installation-on-vm">Installation on VM</a></li>
|
|
|
</ul>
|
|
|
<h2 id="installation-on-linux-unix-mac-os-x">Installation on Linux / Unix / Mac OS X</h2>
|
|
|
<h4 id="clone-the-pantheon-repository">Clone the Pantheon Repository</h4>
|
|
|
<p>Clone the <strong>PegaSysEng/pantheon</strong> repo to your home directory (<code>/home/<user></code>):</p>
|
|
|
<pre class="hljs">git <span class="hljs-keyword">clone</span> <span class="hljs-title">--recursive</span> https://github.com/PegaSysEng/pantheon.git</pre><h4 id="build-pantheon">Build Pantheon</h4>
|
|
|
<p>After cloning, go to the <code>pantheon</code> directory.</p>
|
|
|
<p>Build Pantheon with the Gradle wrapper <code>gradlew</code>, omitting tests as follows:</p>
|
|
|
<pre class="hljs">./gradlew <span class="hljs-keyword">build </span>-x test</pre><p>Go to the distribution directory: </p>
|
|
|
<pre class="hljs">cd build/distributions/</pre><p>Expand the distribution archive: </p>
|
|
|
<pre class="hljs">tar -xzf pantheon-<version>.tar.gz</pre><p>Move to the expanded folder and display the Pantheon help to confirm installation. </p>
|
|
|
<pre class="hljs">cd pantheon-<version>/
|
|
|
bin/pantheon --help</pre><p>Continue with the <a href="#Private-Network-Quickstart">Private Network Quickstart</a> or <a href="#Starting-Pantheon">Starting Pantheon</a>.</p>
|
|
|
<h2 id="installation-on-windows">Installation on Windows</h2>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> Pantheon is currently supported only on 64-bit versions of Windows, and requires a 64-bit version of JDK/JRE. We recommend that you also remove any 32-bit JDK/JRE installations.</p>
|
|
|
</blockquote>
|
|
|
<h4 id="install-pantheon">Install Pantheon</h4>
|
|
|
<p>In Git bash, go to your working directory for repositories. Clone the <code>PegaSysEng/pantheon</code> repo into this directory:</p>
|
|
|
<pre class="hljs">git <span class="hljs-keyword">clone</span> <span class="hljs-title">--recursive</span> https://github.com/PegaSysEng/pantheon</pre><h4 id="build-pantheon">Build Pantheon</h4>
|
|
|
<p>Go to the <code>pantheon</code> directory:</p>
|
|
|
<pre class="hljs"><span class="hljs-built_in">cd</span> pantheon</pre><p>Open a Windows command prompt. Build Pantheon with the Gradle wrapper <code>gradlew</code>, omitting tests as follows:</p>
|
|
|
<pre class="hljs"><span class="hljs-symbol">gradlew</span> <span class="hljs-keyword">build </span>-x test</pre><blockquote>
|
|
|
<p><strong>Note</strong> To run <code>gradlew</code>, you must have the <strong>JAVA_HOME</strong> system variable set to the Java installation directory.
|
|
|
For example: <code>JAVA_HOME = C:\Program Files\Java\jdk1.8.0_181</code>.</p>
|
|
|
</blockquote>
|
|
|
<p>Go to the distribution directory: </p>
|
|
|
<pre class="hljs">cd build\distributions</pre><p>Expand the distribution archive: </p>
|
|
|
<pre class="hljs">tar -xzf pantheon-<version>.tar.gz</pre><p>Move to the expanded folder and display the Pantheon help to confirm installation. </p>
|
|
|
<pre class="hljs">cd pantheon-<version>
|
|
|
bin\pantheon --help</pre><p>Continue with the <a href="#Private-Network-Quickstart">Private Network Quickstart</a> or <a href="#Starting-Pantheon">Starting Pantheon</a>.</p>
|
|
|
<h2 id="installation-on-vm">Installation on VM</h2>
|
|
|
<p>You can run Pantheon on a virtual machine (VM) on a cloud service such as AWS or Azure, or locally using a VM manager such as <a href="https://www.virtualbox.org/">VirtualBox</a>.</p>
|
|
|
<p>If you set up your own VM locally using a VM manager such as <a href="https://www.virtualbox.org/">VirtualBox</a>, there are a few considerations:</p>
|
|
|
<ul>
|
|
|
<li><p>Make sure that Intel Virtualization Technology (VTx) and Virtualization Technology for Directed I/O (VT-d) are enabled in BIOS settings.</p>
|
|
|
</li>
|
|
|
<li><p>On Windows, you might need to disable Hyper-V in the Windows Feature list.</p>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<p>It is recommended that you create a VM with the following attributes:</p>
|
|
|
<ul>
|
|
|
<li><p>Memory Size: Set to 4096 (recommended)</p>
|
|
|
</li>
|
|
|
<li><p>Create a virtual hard disk with at least 10 GB; 20 GB is recommended</p>
|
|
|
</li>
|
|
|
<li><p>Virtual hard disk file type: VDI (if you need to share it with other apps, use VHD)</p>
|
|
|
</li>
|
|
|
<li><p>(Optional) You can create a shared directory in order to copy block files or genesis files from the host computer to the VM. For details on how to create a shared directory, see "Share Folders" in <a href="https://linus.nci.nih.gov/bdge/installUbuntu.html">Install Ubuntu on Oracle VirtualBox</a>.</p>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<p class="page" id="Getting-Started"></p><h1>Getting Started</h1>
|
|
|
<h1 id="getting-started">Getting Started</h1>
|
|
|
<p>You can get started with Pantheon by:</p>
|
|
|
<ul>
|
|
|
<li>Starting a node as described in <a href="#Starting-Pantheon">Starting Pantheon</a></li>
|
|
|
<li>Running from the <a href="#Run-Docker-Image">Pantheon docker image</a></li>
|
|
|
<li>Using the <a href="#Private-Network-Quickstart">Private Network Quickstart</a> </li>
|
|
|
</ul>
|
|
|
<p>To run a single node to connect the Ethereum mainnet or a public testnet, running from the Pantheon <a href="#Run-Docker-Image">docker image</a> or <a href="#Install-Binaries">installing the packaged binaries</a> is the fastest way to get started. </p>
|
|
|
<p>To run a private network on which you can make JSON-RPC requests and send transactions, or explore Pantheon and Ethereum networks, the <a href="#Private-Network-Quickstart">Private Network Quickstart</a> runs a private network of Pantheon nodes in a Docker container. </p>
|
|
|
<p class="page" id="Starting-Pantheon"></p><h1>Starting Pantheon</h1>
|
|
|
<h1 id="starting-pantheon">Starting Pantheon</h1>
|
|
|
<p>Pantheon nodes can be used for varying purposes as described in the <a href="#Overview">Overview</a>. Nodes can connect to the Ethereum mainnet, public testnets such as Ropsten, or private networks.</p>
|
|
|
<h2 id="prerequisites">Prerequisites</h2>
|
|
|
<p><a href="#Installation">Pantheon Installed</a></p>
|
|
|
<h2 id="local-block-data">Local Block Data</h2>
|
|
|
<p>When connecting to a network other than the network previously connected to, you must either delete the local block data or use the <code>--datadir</code> option to specify a different data directory. </p>
|
|
|
<p>To delete the local block data, delete the <code>database</code> directory in the <code>pantheon/build/distribution/pantheon-<version></code> directory.</p>
|
|
|
<h2 id="genesis-configuration">Genesis Configuration</h2>
|
|
|
<p>Pantheon specifies the genesis configuration, and sets the network ID and bootnodes when connecting to <a href="#run-a-node-on-ethereum--mainnet">mainnet</a>, <a href="#run-a-node-on-rinkeby-testnet">Rinkeby</a>, and <a href="#run-a-node-on-ropsten-testnet">Ropsten</a>. </p>
|
|
|
<p>When <code>--dev-mode</code> is specified, Pantheon uses the development mode genesis configuration.</p>
|
|
|
<p>The genesis files defining the genesis configurations are in the <a href="https://github.com/PegaSysEng/pantheon/tree/master/config/src/main/resources">Pantheon source files</a>. </p>
|
|
|
<p>To define a genesis configuration, create a genesis file (for example, <code>genesis.json</code>) and specify the file using the <code>--genesis</code> option.</p>
|
|
|
<h2 id="confirm-node-is-running">Confirm Node is Running</h2>
|
|
|
<p>If you have started Pantheon with the <code>--rpc-enabled</code> option, use <a href="https://curl.haxx.se/">cURL</a> to call <a href="#JSON-RPC-API">JSON-RPC API methods</a> to confirm the node is running. For example:</p>
|
|
|
<ul>
|
|
|
<li><p><code>eth_chainId</code> returns the chain ID of the network. </p>
|
|
|
<pre class="hljs"> curl -X POST --data '{<span class="hljs-string">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-string">"method"</span>:<span class="hljs-string">"eth_chainId"</span>,<span class="hljs-string">"params"</span>:<span class="hljs-string">[]</span>,<span class="hljs-string">"id"</span>:<span class="hljs-number">1</span>}' <span class="hljs-number">127.0.0.1:8545</span></pre></li>
|
|
|
<li><p><code>eth_syncing</code> returns the starting, current, and highest block. </p>
|
|
|
<pre class="hljs"> curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' 127.0.0.1:8545</pre><p> For example, after connecting to mainnet <code>eth_syncing</code> will return something similar to: </p>
|
|
|
<pre class="hljs"> {
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"startingBlock"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"currentBlock"</span> : <span class="hljs-string">"0x2d0"</span>,
|
|
|
<span class="hljs-attr">"highestBlock"</span> : <span class="hljs-string">"0x66c0"</span>
|
|
|
}</pre></li>
|
|
|
</ul>
|
|
|
<h2 id="run-a-node-on-ethereum-mainnet">Run a Node on Ethereum Mainnet</h2>
|
|
|
<p>To run a node on the Ethereum mainnet: </p>
|
|
|
<p><code>$ bin/pantheon</code></p>
|
|
|
<p>To run a node on mainnet with the HTTP JSON-RPC service enabled: </p>
|
|
|
<p><code>$ bin/pantheon --rpc-enabled</code></p>
|
|
|
<h2 id="run-a-node-on-ropsten-testnet">Run a Node on Ropsten Testnet</h2>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> From v0.8.2, use the <a href="#Pantheon-CLI-Syntaxoptions"><code>--ropsten</code> option</a> instead of the following options. For v0.8.1, use the following options.</p>
|
|
|
</blockquote>
|
|
|
<p>To run a node on Ropsten: </p>
|
|
|
<p><code>$ bin/pantheon --network-id=3 --genesis=<path>/pantheon/ethereum/core/src/main/resources/ropsten.json --bootnodes=enode://6332792c4a00e3e4ee0926ed89e0d27ef985424d97b6a45bf0f23e51f0dcb5e66b875777506458aea7af6f9e4ffb69f43f3778ee73c81ed9d34c51c4b16b0b0f@52.232.243.152:30303,enode://94c15d1b9e2fe7ce56e458b9a3b672ef11894ddedd0c6f247e0f1d3487f52b66208fb4aeb8179fce6e3a749ea93ed147c37976d67af557508d199d9594c35f09@192.81.208.223:30303</code></p>
|
|
|
<p>To run a node on Ropsten with the HTTP JSON-RPC service enabled and allow Remix to access the node: </p>
|
|
|
<p><code>$ bin/pantheon --rpc-enabled --rpc-cors-origins "http://remix.ethereum.org" --network-id=3 --genesis=<path>/pantheon/ethereum/core/src/main/resources/ropsten.json --bootnodes=enode://6332792c4a00e3e4ee0926ed89e0d27ef985424d97b6a45bf0f23e51f0dcb5e66b875777506458aea7af6f9e4ffb69f43f3778ee73c81ed9d34c51c4b16b0b0f@52.232.243.152:30303,enode://94c15d1b9e2fe7ce56e458b9a3b672ef11894ddedd0c6f247e0f1d3487f52b66208fb4aeb8179fce6e3a749ea93ed147c37976d67af557508d199d9594c35f09@192.81.208.223:30303</code></p>
|
|
|
<p>Where <code><path></code> is the path to the <code>/pantheon</code> directory. </p>
|
|
|
<h2 id="run-a-node-on-rinkeby-testnet">Run a Node on Rinkeby Testnet</h2>
|
|
|
<p>To run a node on Rinkeby specifying a data directory: </p>
|
|
|
<p><code>$ bin/pantheon --rinkeby --datadir=<path>/<rinkebyDataDir></code></p>
|
|
|
<p>Where <code><path></code> and <code><rinkebyDataDir></code> are the path and file where the Rinkeby chain data is to be saved.</p>
|
|
|
<h2 id="run-a-node-on-goerli-testnet">Run a Node on Goerli Testnet</h2>
|
|
|
<p>To run a node on <a href="https://github.com/goerli/testnet">Goerli</a> specifying a data directory: </p>
|
|
|
<p><code>$ bin/pantheon --goerli --datadir=<path>/<goerliDataDir></code></p>
|
|
|
<p>Where <code><path></code> and <code><goerliDataDir></code> are the path and file where the Goerli chain data is to be saved. </p>
|
|
|
<blockquote>
|
|
|
<p><strong>Note:</strong> This option is only available from v0.8.3.</p>
|
|
|
</blockquote>
|
|
|
<h2 id="run-a-node-for-testing">Run a Node for Testing</h2>
|
|
|
<p>To run a node that mines blocks at a rate suitable for testing purposes: </p>
|
|
|
<p><code>$ bin/pantheon --dev-mode --network-id="2018" --bootnodes= --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-cors-origins "all" --ws-enabled --rpc-enabled</code></p>
|
|
|
<p class="page" id="Run-Docker-Image"></p><h1>Running Pantheon from Docker Image</h1>
|
|
|
<h1 id="run-pantheon-from-docker-image">Run Pantheon from Docker Image</h1>
|
|
|
<p>A Docker image is provided to run a Pantheon node in a Docker container. </p>
|
|
|
<p>Use this Docker image to run a single Pantheon node without installing Pantheon. </p>
|
|
|
<h2 id="prerequisites">Prerequisites</h2>
|
|
|
<p>To run Pantheon from the Docker image, you must have <a href="https://docs.docker.com/install/">Docker</a> installed. </p>
|
|
|
<h2 id="quickstart">Quickstart</h2>
|
|
|
<p>To run a Pantheon node in a container connected to the Ethereum mainnet: </p>
|
|
|
<pre class="hljs">docker run pegasyseng/pantheon:latest</pre><h2 id="command-line-options">Command Line Options</h2>
|
|
|
<p>You cannot use the following Pantheon command line options when running Pantheon from the Docker image: </p>
|
|
|
<ul>
|
|
|
<li><code>--datadir</code>, see <a href="#persisting-data">Persisting Data</a></li>
|
|
|
<li><code>--config</code>, see <a href="#custom-configuration-file">Custom Configuration File</a></li>
|
|
|
<li><code>--genesis</code>, see <a href="#custom-genesis-file">Custom Genesis File</a>.</li>
|
|
|
<li><code>--rpc-listen</code>, <code>--p2plisten</code>, <code>--ws-listen</code>, see <a href="#exposing-ports">Exposing Ports</a></li>
|
|
|
</ul>
|
|
|
<p>All other <a href="https://github.com/PegaSysEng/pantheon/wiki/Pantheon-CLI-Syntax">Pantheon command line options</a> work in the same way as when Pantheon is installed locally.</p>
|
|
|
<h3 id="persisting-data">Persisting Data</h3>
|
|
|
<p>Specify a Docker volume to persist data between stopping and restarting the container. This is the equivalent of specifying the <code>-datadir</code> option. </p>
|
|
|
<p>If a Docker volume is not specified, all data saved to the data directory is removed each time the container is stopped. </p>
|
|
|
<p>To run Pantheon specifying a volume for the data directory: </p>
|
|
|
<pre class="hljs">docker run --mount type=bind,source=/<pantheonDataDir>,target=/var/lib/pantheon pegasyseng/pantheon:latest
|
|
|
</pre><p>Where <code><pantheonDataDir></code> is the volume to which the data is saved. </p>
|
|
|
<h3 id="custom-configuration-file">Custom Configuration File</h3>
|
|
|
<p>Specify a custom configuration file to provide a file containing key/value pairs for command line options. This is the equivalent of specifying the <code>--config</code> option. </p>
|
|
|
<p>To run Pantheon specifying a custom configuration file: </p>
|
|
|
<pre class="hljs">docker run --mount type=bind,source=/<path/myconf.toml>,target=/etc/pantheon/pantheon.conf pegasyseng/pantheon:latest
|
|
|
</pre><p>Where <code>myconf.toml</code> is your custom configuration file and <code>path</code> is the absolute path to the file. For example:</p>
|
|
|
<pre class="hljs">docker run --mount type=bind,source=/Users/username/pantheon/myconf.toml,target=/etc/pantheon/pantheon.conf pegasyseng/pantheon:latest</pre><h3 id="custom-genesis-file">Custom Genesis File</h3>
|
|
|
<p>Specify a custom genesis file to configure the blockchain. This is equivalent to specifying the <code>--genesis</code> option.</p>
|
|
|
<p>To run Pantheon specifying a custom genesis file: </p>
|
|
|
<pre class="hljs">docker run --mount type=bind,source=</path/mygenesis.json>,target=/etc/pantheon/genesis.json pegasyseng/pantheon:latest</pre><p>Where <code>mygenesis.json</code> is your custom configuration file and <code>path</code> is the absolute path to the file. For example:</p>
|
|
|
<pre class="hljs">docker run --mount type=bind,source=/Users/username/pantheon/mygenesis.json,target=/etc/pantheon/genesis.json pegasyseng/pantheon:latest</pre><h3 id="exposing-ports">Exposing Ports</h3>
|
|
|
<p>Expose ports for P2P peer discovery, JSON-RPC service, and WebSockets. This is required to use the defaults ports or specify different ports (the equivalent of specifying the <code>--rpc-listen</code>, <code>--p2p-listen</code>, <code>--ws-listen</code> options).</p>
|
|
|
<p>To run Pantheon exposing local ports for access: </p>
|
|
|
<pre class="hljs">docker run -p <localportJSON-RPC>:8545 -p <localportWS>:8546 -p <localportP2P>:30303 pegasyseng/pantheon:latest --rpc-enabled --ws-enabled</pre><p>For example, to enable RPC calls to <a href="http://127.0.0.1:8545">http://127.0.0.1:8545</a> and P2P discovery on <a href="http://127.0.0.1:13001">http://127.0.0.1:13001</a>:</p>
|
|
|
<pre class="hljs">docker run -p 8545:8545 -p 13001:30303 pegasyseng/pantheon:latest --rpc-enabled</pre><h2 id="starting-pantheon">Starting Pantheon</h2>
|
|
|
<h3 id="run-a-node-on-ethereum-mainnet">Run a Node on Ethereum Mainnet</h3>
|
|
|
<p>To run a node on the Ethereum mainnet: </p>
|
|
|
<pre class="hljs">docker run -p 30303:30303 --mount type=bind,source=/<myvolume/pantheon>,target=/var/lib/pantheon pegasyseng/pantheon:latest</pre><p>To run a node on mainnet with the HTTP JSON-RPC service enabled: </p>
|
|
|
<pre class="hljs">docker run -p 8545:8545 -p 30303:30303 --mount type=bind,source=/<myvolume/pantheon>,target=/var/lib/pantheon pegasyseng/pantheon:latest --rpc-enabled</pre><h2 id="run-a-node-on-ropsten-testnet">Run a Node on Ropsten Testnet</h2>
|
|
|
<p>Save a local copy of the <a href="https://github.com/PegaSysEng/pantheon/blob/master/config/src/main/resources/ropsten.json">Ropsten genesis file</a>. </p>
|
|
|
<p>To run a node on Ropsten: </p>
|
|
|
<pre class="hljs">docker run -p 30303:30303 --mount type=bind,source=/<myvolume/pantheon/ropsten>,target=/var/lib/pantheon --mount type=bind,source=/<path>/ropsten.json,target=/etc/pantheon/genesis.json pegasyseng/pantheon:latest --network-id=3 --bootnodes=enode://6332792c4a00e3e4ee0926ed89e0d27ef985424d97b6a45bf0f23e51f0dcb5e66b875777506458aea7af6f9e4ffb69f43f3778ee73c81ed9d34c51c4b16b0b0f@52.232.243.152:30303,enode://94c15d1b9e2fe7ce56e458b9a3b672ef11894ddedd0c6f247e0f1d3487f52b66208fb4aeb8179fce6e3a749ea93ed147c37976d67af557508d199d9594c35f09@192.81.208.223:30303</pre><h2 id="run-a-node-on-rinkeby-testnet">Run a Node on Rinkeby Testnet</h2>
|
|
|
<p>To run a node on Rinkeby: </p>
|
|
|
<pre class="hljs">docker run -p 30303:30303 --mount type=bind,source=/<myvolume/pantheon/rinkeby>,target=/var/lib/pantheon pegasyseng/pantheon:latest --rinkeby</pre><h2 id="run-a-node-for-testing">Run a Node for Testing</h2>
|
|
|
<p>To run a node that mines blocks at a rate suitable for testing purposes with WebSockets enabled: </p>
|
|
|
<pre class="hljs">docker run -p 8546:8546 --mount type=bind,source=/<myvolume/pantheon/testnode>,target=/var/lib/pantheon pegasyseng/pantheon:latest --dev-mode --bootnodes= --miner-enabled --miner-coinbase fe3b557e8fb62b89f4916b721be55ceb828dbd73 --rpc-cors-origins "all" --ws-enabled</pre><h2 id="stopping-pantheon-and-cleaning-up-resources">Stopping Pantheon and Cleaning up Resources</h2>
|
|
|
<p>When you're done running nodes, you can shut down the node container without deleting resources. Alternatively, you can delete the container (after stopping it) and its associated volume. Run <code>docker container ls</code> and <code>docker volume ls</code> to obtain the container and volume names. Then run the following commands:</p>
|
|
|
<p>To stop a container:</p>
|
|
|
<pre class="hljs">docker stop <container-name></pre><p>To delete a container:</p>
|
|
|
<pre class="hljs">docker rm <container-name></pre><p>To delete a container volume (optional):</p>
|
|
|
<pre class="hljs">docker volume rm <volume-name></pre><p class="page" id="Private-Network-Quickstart"></p><h1>Private Network Quickstart</h1>
|
|
|
<h1 id="private-network-quickstart-tutorial">Private Network Quickstart Tutorial</h1>
|
|
|
<p>This tutorial describes how to use Pantheon to run a private network of Pantheon nodes in a Docker container.</p>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> To run the Private Network Quickstart, you must install Pantheon by <a href="https://github.com/PegaSysEng/pantheon/wiki/Build-From-Source">cloning and building</a>. </p>
|
|
|
<p>If you have installed Pantheon from the <a href="#Install-Binaries">packaged binaries</a> or are running the <a href="https://hub.docker.com/u/pegasyseng/">Docker image</a>, you can proceed with <a href="#Starting-Pantheon">Starting Pantheon</a>.</p>
|
|
|
</blockquote>
|
|
|
<h2 id="prerequisites">Prerequisites</h2>
|
|
|
<p>To run this tutorial, you must have the following installed:</p>
|
|
|
<ul>
|
|
|
<li><p><a href="https://docs.docker.com/compose/install/">Docker and Docker-compose</a> </p>
|
|
|
</li>
|
|
|
<li><p><a href="https://git-scm.com/">Git command line</a></p>
|
|
|
</li>
|
|
|
<li><p><a href="https://curl.haxx.se/download.html">Curl command line</a> </p>
|
|
|
</li>
|
|
|
<li><p>A web browser that supports <a href="https://metamask.io/">Metamask</a> (currently Chrome, Firefox, Opera, and Brave), and has the MetaMask plug-in installed. This tutorial uses screenshots from Brave.</p>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<h2 id="clone-pantheon-source-code">Clone Pantheon Source Code</h2>
|
|
|
<p>As indicated in <a href="#Installationclone-the-pantheon-repository">the installation section</a>, clone the repository.</p>
|
|
|
<h2 id="build-docker-images-and-start-services-and-network">Build Docker Images and Start Services and Network</h2>
|
|
|
<p>This tutorial uses <a href="https://docs.docker.com/compose/">Docker Compose</a> to simplify assembling images and
|
|
|
running in a private network. To run the containers, go to the <code>pantheon</code> directory and run the following commands:</p>
|
|
|
<blockquote>
|
|
|
<p>On Linux/Mac, run the following shell command provided with the code:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">quickstart/runPantheonPrivateNetwork.sh</pre><blockquote>
|
|
|
<p>On Windows, run the following docker-compose commands:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">// Run the Docker containers
|
|
|
quickstart\docker-compose up -d --scale node=4
|
|
|
|
|
|
// List the endpoints
|
|
|
quickstart\docker-compose port explorer 80</pre><p>This script builds Pantheon, builds the images and runs the containers. It will also scale the regular node container to four containers to simulate a network with enough peers to synchronize.</p>
|
|
|
<p>When the process ends, it lists the running services:</p>
|
|
|
<pre class="hljs"> Name Command State Ports
|
|
|
-----------------------------------------------------------------------------------------------------------------------------
|
|
|
quickstart_bootnode_1 /opt/pantheon/bootnode_sta ... Up <span class="hljs-number">30303</span>/tcp, <span class="hljs-number">8545</span>/tcp, <span class="hljs-number">8546</span>/tcp
|
|
|
quickstart_explorer_1 nginx -g daemon off; Up <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">32770</span>-><span class="hljs-number">80</span>/tcp
|
|
|
quickstart_minernode_1 /opt/pantheon/node_start.s ... Up <span class="hljs-number">30303</span>/tcp, <span class="hljs-number">8545</span>/tcp, <span class="hljs-number">8546</span>/tcp
|
|
|
quickstart_node_1 /opt/pantheon/node_start.s ... Up <span class="hljs-number">30303</span>/tcp, <span class="hljs-number">8545</span>/tcp, <span class="hljs-number">8546</span>/tcp
|
|
|
quickstart_node_2 /opt/pantheon/node_start.s ... Up <span class="hljs-number">30303</span>/tcp, <span class="hljs-number">8545</span>/tcp, <span class="hljs-number">8546</span>/tcp
|
|
|
quickstart_node_3 /opt/pantheon/node_start.s ... Up <span class="hljs-number">30303</span>/tcp, <span class="hljs-number">8545</span>/tcp, <span class="hljs-number">8546</span>/tcp
|
|
|
quickstart_node_4 /opt/pantheon/node_start.s ... Up <span class="hljs-number">30303</span>/tcp, <span class="hljs-number">8545</span>/tcp, <span class="hljs-number">8546</span>/tcp
|
|
|
quickstart_rpcnode_1 /opt/pantheon/node_start.s ... Up <span class="hljs-number">30303</span>/tcp, <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">32769</span>-><span class="hljs-number">8545</span>/tcp, <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">32768</span>-><span class="hljs-number">8546</span>/tcp</pre><p>This is followed by a list of the endpoints:</p>
|
|
|
<pre class="hljs"><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-emphasis">***</span>*
|
|
|
JSON-RPC HTTP service endpoint : http://localhost:32770/jsonrpc *
|
|
|
JSON-RPC WebSocket service endpoint : ws://localhost:32770/jsonws *
|
|
|
Web block explorer address : http://localhost:32770 *
|
|
|
<span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-emphasis">***</span>*</pre><ul>
|
|
|
<li>Use the <strong>JSON-RPC HTTP service endpoint</strong> to access the RPC node service from your Dapp or from cryptocurrency wallets such as Metamask.</li>
|
|
|
<li>Use the <strong>JSON-RPC WebSocket service endpoint</strong> to access the web socket node service from your Dapp. Use the form <code>ws://localhost:32770/jsonws</code>.</li>
|
|
|
<li>Use the <strong>Web block explorer address</strong> to display the block explorer web application. View the block explorer by entering the URL in your web browser.</li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p>On Linux/Mac, to display the list of endpoints again, run the following shell command:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">quickstart/listQuickstartServices.sh</pre><blockquote>
|
|
|
<p>On Windows, to display the list of endpoints again, run the following docker-compose command:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">quickstart\docker-compose port explorer 80</pre><h2 id="block-explorer">Block Explorer</h2>
|
|
|
<p>This tutorial uses the <a href="https://aleth.io/">Alethio light block explorer</a>.</p>
|
|
|
<h3 id="run-the-block-explorer">Run the Block Explorer</h3>
|
|
|
<p>Access the explorer by copying and pasting the <code>Web block explorer address</code> displayed when starting the private network to your browser.</p>
|
|
|
<p>The block explorer displays a summary of the private network:</p>
|
|
|
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA10AAACnCAYAAADqmja9AAABfGlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGAqSSwoyGFhYGDIzSspCnJ3UoiIjFJgv8PAzcDDIMRgxSCemFxc4BgQ4MOAE3y7xsAIoi/rgsxK8/x506a1fP4WNq+ZclYlOrj1gQF3SmpxMgMDIweQnZxSnJwLZOcA2TrJBUUlQPYMIFu3vKQAxD4BZIsUAR0IZN8BsdMh7A8gdhKYzcQCVhMS5AxkSwDZAkkQtgaInQ5hW4DYyRmJKUC2B8guiBvAgNPDRcHcwFLXkYC7SQa5OaUwO0ChxZOaFxoMcgcQyzB4MLgwKDCYMxgwWDLoMjiWpFaUgBQ65xdUFmWmZ5QoOAJDNlXBOT+3oLQktUhHwTMvWU9HwcjA0ACkDhRnEKM/B4FNZxQ7jxDLX8jAYKnMwMDcgxBLmsbAsH0PA4PEKYSYyjwGBn5rBoZt5woSixLhDmf8xkKIX5xmbARh8zgxMLDe+///sxoDA/skBoa/E////73o//+/i4H2A+PsQA4AJHdp4IxrEg8AAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjg2MTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xNjc8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KRb1+IQAAQABJREFUeAHtnQt8FcWh/38YSHhjlJAKRIGgRFNjTVEI1RIfyBUUyqWAXKO2oF4uVqXQW29K/Rj/1abWK6W2UlrBWsCioEVRtIjFUL0ELQ238QajPDWADSCBEB4nEvn/Zh/n7Hklh+QkBPgN5Ozs7Lz2u7Oz85uZnW1z+IjvOGREQAREQAREQAREQAREQAREQASahcBZzRKrIhUBERABERABERABERABERABEbAISHSpIIiACIiACIiACIiACIiACIhAMxKQ6GpGuIpaBERABERABERABERABERABCS6VAZEQAREQAREQAREQAREQAREoBkJSHQ1I1xFLQIiIAIiIAIiIAIiIAIiIAISXSoDIiACIiACIiACIiACIiACItCMBCS6mhGuohYBERABERABERABERABERABiS6VAREQAREQAREQAREQAREQARFoRgISXc0IV1GLgAiIgAiIgAiIgAiIgAiIgESXyoAIiIAIiIAIiIAIiIAIiIAINCMBia5mhKuoRUAEREAEREAEREAEREAERECiS2VABERABERABERABERABERABJqRgERXM8JV1CIgAiIgAiIgAiIgAiIgAiIg0aUyIAIiIAIiIAIiIAIiIAIiIALNSECiqxnhKmoREAEREAEREAEREAEREAERaCsEIiACIiACIiACIiACItBaCQz+UWKLZ23dT2tbPE0leHoTkOhq4Pp2aN/yN3oDWTrjDx85qoowUiFoybKqaxDpCshNBETgVCJw/PhxZOV8u8Wy/MG6l1osrdMtoTZtgOJHW+bZz2KBnJlq+51uZag1nI9EV2u4CsqDCIiACLQAATUmbMgt2YBrgcuqJERABERABE4BAnqn6xS4SMqiCIiACIiACIiACIiACIjAqUtAouvUvXbKuQiIgAiIgAiIgAiIgAiIwClAQKLrFLhIyqIIiIAIiIAIiIAIiIAIiMCpS0Ci69S9dsq5CIiACIiACIiACIiACIjAKUBAC2mcAhepyVmsq8TKl1dhT207XP4vE5CZ3OQYFcGpTMBXheLVK7By/Rb4eB4pqenIuXYYcvqnnspnpbyLgAiIQPMRyBiGp340Bjl9nQfosUOoKC3Fz+5/EsXNl6pibgyBAwlYufosrN3JJQ9pErsex/DBX2LgRXWNiU1hRCBuBCS64oby5Ee0Y3MpKqqAtIws9O7iyY+vEnN+8gLK6DQ9cyRFV2fPQVnPJAK+T1dh/KgnrbIQOO/1mDPnBWRPexRLvpMVcJZNBEgg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iIAIiIAIiIAInFYENL2wgcuppbEbAKTDrYaAymqruRTKiAiIwClAoA2/HaBl3E+BC8UsmmXcB//IXhn61MixcikC4QT0na5wJnIRAREQAREQAREQAREQAREQgbgR0PTCuKFURCIgAiIgAiIgAiIgAiIgAiIQTkCiK5yJXERABERABERABERABERABEQgbgQkuuKGUhGJgAiIgAiIgAiIgAiIgAiIQDgBia5wJnIRAREQAREQAREQAREQAREQgbgRkOiKG0pFJAIiIAIiIAIiIAIiIAIiIALhBCS6wpnIRQREQAREQAREQAREQAREQATiRkCiK24oFZEIiIAIiIAIiIAIiIAIiIAIhBOQ6ApnIhcREAEREAEREAEREAEREAERiBsBia64oVREIiACIiACIiACIiACIiACIhBOQKIrnIlcREAEREAEREAEREAEREAERCBuBCS64oZSEYmACIiACIiACIiACIiACIhAOAGJrnAmchEBERABERABERABERABERCBuBGQ6IobSkUkAiIgAiIgAiIgAiIgAiIgAuEEJLrCmchFBERABERABERABERABERABOJGQKIrbigVkQiIgAiIgAiIgAiIgAiIgAiEE5DoCmciFxEQAREQAREQAREQAREQARGIGwGJrrihVEQiIAIiIAIiIAIiIAIiIAIiEE5AoiuciVxEQAREQAREQAREQAREQAREIG4EJLrihlIRiYAIiIAIiIAIiIAIiIAIiEA4AYmucCZyEQEREAEREAEREAEREAEREIG4EZDoihtKRSQCIiACIiACIiACIiACIiAC4QQkusKZyEUEREAEREAEREAEREAEREAE4kZAoituKBWRCIiACIiACIiACIiACIiACIQTkOgKZyIXERABERABERABERABERABEYgbAYmuuKFURCIgAiIgAiIgAiIgAiIgAiIQTkCiK5yJXERABERABERABERABERABEQgbgQkuuKGUhGJgAiIgAiIgAiIgAiIgAiIQDgBia5wJnIRAREQAREQAREQAREQAREQgbgRkOiKG0pFJAIiIAIiIAIiIAIiIAIiIALhBNqGO52Yy3HXu9/iOmgrAiIgAiIgAiIgAiIgAiIgAq2UQBs7X86mWTN5QqLL0lV+ceW3NGsGFbkIiIAIiIAIiIAIiIAIiIAIxJ2AI2cCqiagwuItxGISXcednHTskBj3c1WEIiACIiACIiACIiACIiACItCaCBw+Umtlp02c1Fe9ossVW0BA/7UmGMqLCIiACIiACIiACIiACIiACMSfgK1/jh+3VVdTxVfUhTRswWUSk+CK/0VUjCIgAiIgAiIgAiIgAiIgAq2fgK2HAoNRjctxRNEVEFyBSCW9AixkEwEREAEREAEREAEREAEROH0JhGuf42iK8AoTXREFlyXwwpM+fTHrzERABERABERABERABERABM5YAhRF4SIrkltshMJEV2iwSCIs1I/2RUAEREAEREAEREAEREAEROD0ItB4kRXKIUh0hQosd18DXaHYtC8CIiACIiACIiACIiACInC6EjA6yJ7nFyq8QvdjIxAkurxB3EQsN2vHdvH6kV0EREAEREAEREAEREAEREAETj8C1D5++UOh1cQT9IsuOyJPdI7VP9rlOdTENBVcBERABERABERABERABERABFotgTANFKSFTlyE+UWXV77ZcbqR2UNo7l6rJaOMiYAIiIAIiIAIiIAIiIAIiEAcCBjt4xdeVnwhaihIhDWcYEB0ef26kXDrWgMWr0fZRUAEREAEREAEREAEREAEROA0I+CIIGvjCiJ324hT9YiuKLHQOUTXNSIZBREBERABERABERABERABERCBU4eApYGiSCTP0FRMJ+QRXV7/rsxyUpHw8sKRXQREQAREQAREQAREQARE4DQmECy4QrRRI87bEl1eAee3W0LLE6P/gMdNVhEQAREQAREQAREQAREQARE43Qh4tI9ldfY9zif09lX4SJc3JsJzdd3pxlHnIwIiIAIiIAIiIAIiIAIiIAL1EQjTQiFaqb6w3mO26IoW2HE3iUXz4o1MdhEQAREQAREQAREQAREQARE41QkY7eNXQNGEUDT3CCffNoJbsNMJRBYcUHsiIAIiIAIiIAIiIAIicGYR2FgB/HYVUPwR4PvizDr3k3m27dsBOQOAf78BuLh3HHNitFCbpsfX5vAR33F3DXoTnWs3W3PA/0etd3bXzk1PUTGIgAiIgAiIgAiIgAiIwGlIwAiu7/xaYutkXlojvp69t+nCa391DbUW/7Xx/pkzM/vuGXrtrlvkbT0jXSFDXCG7kaNrvOv+AwexavU6rPzLWlTs/Cc+++deS1V+pce56HN+Twy7Jgc3XJeDbhJ+jYeskCIgAiIgAiIgAiIgAs1G4Ldv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H//wLnzn38ykKRkROH0IVJet4geU+c2gmwb6RwdOn7PTmYiACIiACIjA6Ukg3qLLUOrU3n7f6iin8t3LkbFDds/36Qkwjmcl0RUC8y2OeN3/wM+dkYCQg/Xsmt7IXz72Q1yfO6geXzokAiIgAiIgAiIgAiIgAi1DoDlEl8l5R87PruXsATMFUSY2Aq1RdLX4O11eVEY0vfnyb3Dr+BFo29bM/6jftGvXFv827kb8ZflvJbjqR6WjIiACIiACIiACIiACpwGBwxzdkuA69S/kSZteGIpu/4GDWPX2OqxaXWytZFi5Z5/lJZUfS+5zfk8uCZ+DG67LQaRve4XGpX0REAEREAEREAEREAERaEkCzTXS1ZLncLqk1RpHulqN6DpdLrLOQwREQAREQAREQARE4MwjINHVeq55axRdJ3V6Yeu5NMqJCIiACIiACIiACIiACIiACDQPAYmu5uGqWEVABERABERABERABM4gAmZ0JanhJQrOICIn71STnM9unrwchKcs0RXORC4iIAIiIAIiIAIiIAIicMIEcgaccBAFaAYCORc1Q6RNjFKiq4kAFVwEREAEREAEREAEREAEDIF/v4GjXa1wlOVMujrtyd9ch9ZmJLpa2xVRfkRABERABERABERABE5JApekAc9+D8j9qsRXS19AI7auIfdn7wUu7t3SqTecnlYvbJiRfIiACIiACIiACIiACIiACJxBBPYfqEEbvqgX+INl5y+3Lgiv3XWLvNVIV2QuchUBERABERABERABERABERCBuBCQ6IoLRkUiAiIgAiIgAiIgAiIgAiIgApEJSHRF5iJXERABERABERABERABERABEYgLAYmuuGBUJCIgAiIgAiIgAiIgAiIgAiIQmYBEV2QuchUBERABERABERABERABERCBuBCQ6IoLRkUiAiIgAiIgAiIgAiIgAiIgApEJSHRF5iJXERABERABERABERABERABEYgLAYmuuGBUJCIgAiIgAiIgAiIgAiIgAiIQmYBEV2QuchUBERABERABERABERABERCBuBCQ6IoLRkUiAiIgAiIgAiIgAiIgAiIgApEJSHRF5iJXERABERABERABERABERABEYgLAYmuuGBUJCIgAiIgAiIgAiIgAiIgAiIQmYBEV2QuchUBERABERABERABERABERCBuBCoR3S1CU4gZDf4oPZEQAREQAREQAREQAREQARE4DQhEKZ9whxO6ETrEV2eeKw0mpaQJzZZRUAEREAEREAEREAEREAERKAVE6D2iaP8advgmZrEjtu+qg7U4Phx7vDP2vCA2RoP9ta2W76dMJZdPyIgAiIgAiIgAiIgAiIgAiJwMgn4RZRtaWNt2sBs+WttzU8b58/Kqj9M0zJuiy4TWSSR5LibTHg9HDf7bYz4sgWg2W/DfVt4Gb80zsbe0a8IiIAIiIAIiIAIiIAIiIAItA4CfsHlZsfSLrbqMVb7zxE0zsb16t9Gc/d7CFjCpxeGBLaTDgSwJKA/fVrs//RghBd/nX1uZERABERABERABERABERABETgpBMw2sT6M1rFEiqOyjH71hGPB09u/cdcNyusuxP71hrpMmHdgS6/3WTAHsyyY7MS4A+Hs2xrGzOpkH64pUfLzdiNb2vHv7HD61cEREAEREAEREAEREAEREAETjIBW8vYmbBEFR2sKYVuvtxRJGc/2L/r6cS0TpR3ukzylqRirPYcQiOuXGl2nBlpY+YScmv74jEj0EyGjUVGBERABERABERABERABERABFolAWf8ylJTHsFlNA7za/9ZwsbJvePfOtK4E/KILhN9BMFk0rNGsIzIMv/5Q8HlFV5WMDMsZhkTj4wIiIAIiIAIiIAIiIAIiIAItE4CtmKxxI0tpVzBxa3t4OieqNIm6oGIJ+wRXZ7jJg6joUya3FpyyrJzHMuaSsgdV3hZwfzjXYFIXA0WcJFNBERABERABERABERABERABE4OAaNxPMbaNSKLxvyaKYaW/rF//O7WQdeT5XriPwHRZVJyhJJtNWNajpiylJcjuMyolyu8THrONMOgpE08JhI3wqCD2hEBERABERABERABERABERCBliRgiRNHo9jpOi5GbdnShQ6Wzdnaesw5Zh8JZNgfOOBUn80vukw4ezmMIOVl8kBdxcRChFdAVIWm6B3iCj1WX1Z0TAREQAREQAREQAREQAREQASakYAlT2yN4lcqtLjSymgcY/cLLteTu7Wy5vcdc0b9ois0hInXL8KsHZM4BZW9WoY9BubY7bCO2ApyC41V+yIgAiIgAiIgAiIgAiIgAiJwEgk4AipIOtHN3XcFlxFgtnGPuPsnvg0SXe6olpFbxrj7ZpqhSdQd8TJHrdUMnYz43+iyDlhB9SMCIiACIiACIiACIiACIiACrZOAo2OC5BTdbGe6OseNS8BuTiV0P7bTCxJdkYK4wssa92LiZvTLDHjZOTJyy0ra1mn+zEWKSW4iIAIiIAIiIAIiIAIiIAIi0EoIONrF3gR2ApKmcQIr0tmFiS6vyHIDWG5GZVFhuaNe5phfgJmdQO6sI8ZJRgREQAREQAREQAREQAREQARaD4Eg0WJni07BrrZDsJvx2ngRFia6rOiYgplKaA9fGRcnI8bdZMkMb1lulgqzd4J+TVgZERABERABERABERABERABETgVCDj6hZvISqbxgsucfUTRZQ4ERrzMnqOyjLvZ9efEGvfyHjZHZURABERABERABERABERABESg9ROIKrLcrNvCx2ijppioostE6kZuj3oZl4D4MnvGWOk3MRN2TPoVAREQAREQAREQAREQAREQgdZAID5iyz2TekWX68kvvozE8usuv8X1pq0IiIAIiIAIiIAIiIAIiIAInKIEnJEkbhxb3M4jJtHlpmYl7s+BbfFLL7/F9a2tCIiACIiACIiACIiACIiACLRSAo6u8cubZszmCYmuSPnwZ9JvieRLbiIgAiIgAiIgAiIgAiIgAiJwZhI468w8bZ21CIiACIiACIiACIiACIiACLQMAYmuluGsVERABERABERABERABERABM5QAhJdZ+iF12mLgAiIgAiIgAiIgAiIgAi0DAGJrpbhrFREQAREQAREQAREQAREQATOUAISXWfohddpi4AIiIAIiIAIiIAIiIAItAwBia6W4axUREAEREAEREAEREAEREAEzlAC/x8Py26eadN5bwAAAABJRU5ErkJggg==" /></p>
|
|
|
<p>Notice the explorer indicates 6 peers: the 4 regular nodes, the mining node and the bootnode.</p>
|
|
|
<p>Click on the block number to the right of <strong>Best Block</strong> to display the block details. </p>
|
|
|
<p><img src="data:image/png;base64,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pGSCgCAgCAgCgkCrRUAITKutWimYICAICAKCgCDQehEQAtN661ZKJggIAoKAICAItFoEhMC02qqVggkCgoAgIAgIAq0XASEwrbdupWSCgCAgCAgCgkCrRUB2IbXaqpWCCQKCgCAgCAgCrRcB0cC03rqVkgkCgoAgIAgIAq0WASEwrbZqpWCCgCAgCAgCgkDrRUAITOutWymZICAICAKCgCDQahEQAtNqq1YKJggIAoKAICAItF4EhMC03rqVkgkCgoAgIAgIAq0WASEwrbZqpWCCgCAgCAgCgkDrRUAITOutWymZICAICAKCgCDQahEQAtNqq1YKJggIAoKAICAItF4EhMC03rqVkgkCgoAgIAgIAq0WASEwrbZqpWCCgCAgCAgCgkDrRUAITOutWymZICAICAKCgCDQahEQAtNqq1YKJggIAoKAICAItF4EhMC03rqVkgkCgoAgIAgIAq0WASEwrbZqpWCCgCAgCAgCgkDrRUAITOutWymZICAICAKCgCDQahEQAtNqq1YKJggIAoKAICAItF4EhMC03rqVkgkCgoAgIAgIAq0WASEwrbZqpWCCgCAgCAgCgkDrRUAITOutWymZICAICAKCgCDQahEQAtNqq1YKJggIAoKAICAItF4EhMC03rqVkgkCgoAgIAgIAq0WASEwrbZqpWCCgCAgCAgCgkDrRUAITOutWymZICAICAKCgCDQahEQAtNqq1YKJggIAoKAICAItF4EhMC03rqVkgkCgoAgIAgIAq0WgbattmRSsOuCQPHnG7Bq004UnznH57VDyuBhGDdsEMIdV/D4mirkblmLdVv3w8VknEHRSBs2DMPTesF5OcnWlGLze1tQzvz5dHxI4rAxSI20Mu06sR+bt+RgV9FJRglBj5T+GM5yRVkielLM666cDVj3wR4UV1chPDgaqUOGYfSw/ggP1EXK87dgfd5JOOrLvPH8xNIcv+Ts+fRZHl+e7pPI37UTBSUnUeFyoO+IMUiJMAQZlvvRRrz/eQHc9IrqkoiBQ4chrUd0nZT8xsUT041dm9Zi36lziOrDOkypm6ZHlBeukjysy9kDtzMaw+8dhigDQ49MRRE2b92Ocvc5OGMGISOtuycIftSFJSxXzQWB4twNyCmpQu1XS8uf6xw63z4S6T066tmtOcn3LQcFp6sAR3cMH8W+hiFle7Zg89763jH2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" /></p>
|
|
|
<p>You can explore blocks by clicking on the blocks under <strong>Bk</strong> down the left-hand side. </p>
|
|
|
<p>You can search for a specific block, transaction hash, or address by clicking the magnifying glass in the top left-hand corner. </p>
|
|
|
<p><img src="data:image/png;base64,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" /></p>
|
|
|
<h2 id="run-json-rpc-requests">Run JSON-RPC Requests</h2>
|
|
|
<p>Now we're ready to run requests.</p>
|
|
|
<p>You can run RPC requests on <code>rpcnode</code>, the node that is exposed to the host in order to listen for requests. This tutorial uses <a href="https://curl.haxx.se/download.html">cURL</a> to make JSON-RPC requests.</p>
|
|
|
<blockquote>
|
|
|
<p><strong>On Windows:</strong> We suggest using Postman or a similar client to make RPC requests from Windows. Using curl via Command Prompt or Windows PowerShell might not work.</p>
|
|
|
</blockquote>
|
|
|
<p>This tutorial uses the placeholder <code>http://localhost:http-rpc-port</code>. When you run this tutorial, replace <code>http-rpc-port</code> with the JSON-RPC HTTP service endpoint provided when you list the endpoints. (For example, <code>http://localhost:32770/jsonrpc</code>.) The dynamic docker port mapping changes each time you run the network.</p>
|
|
|
<h3 id="requesting-the-node-version">Requesting the Node Version</h3>
|
|
|
<p>Run the following command from the host shell :</p>
|
|
|
<pre class="hljs">curl -X POST --data <span class="hljs-string">'{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'</span> http://localhost:http-rpc-port</pre><p>The result should be as follows: </p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"pantheon/1.0.0"</span>
|
|
|
}</pre><p>Here we simply query the version of the Pantheon node, which confirms the node is running.</p>
|
|
|
<p>Now if this works, let's see some more interesting requests.</p>
|
|
|
<h3 id="counting-peers">Counting Peers</h3>
|
|
|
<p>Peers are the number of other nodes connected to the RPC node.</p>
|
|
|
<p>Poll the peer count using <code>net_peerCount</code>:</p>
|
|
|
<pre class="hljs">curl -X POST --data <span class="hljs-string">'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}'</span> http://localhost:http-rpc-port</pre><p>The result should be the following response, indicating that there are 6 peers:</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x6"</span>
|
|
|
}</pre><h3 id="requesting-the-most-recent-mined-block-number">Requesting the Most Recent Mined Block Number</h3>
|
|
|
<p>This provides the count of blocks already mined.</p>
|
|
|
<p>To do so, call <code>eth_blockNumber</code> to retrieve the number of the most recent block:</p>
|
|
|
<pre class="hljs">curl -X POST --data <span class="hljs-string">'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'</span> http://localhost:http-rpc-port</pre><p>The result of this call should be:</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x8b8"</span>
|
|
|
}</pre><p>Here the hexadecimal value <code>0x8b8</code> translates to <code>2232</code> in decimal; that many blocks have already been mined.</p>
|
|
|
<h3 id="checking-the-miner-account-balance-coinbase-">Checking the Miner Account Balance (Coinbase)</h3>
|
|
|
<p>Then call <code>eth_getBalance</code> to retrieve the balance of the mining address defined in the miner node:</p>
|
|
|
<pre class="hljs">curl -X POST --data <span class="hljs-string">'{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xfe3b557e8fb62b89f4916b721be55ceb828dbd73","latest"],"id":1}'</span> http://localhost:http-rpc-port</pre><p>The result of this call should be something like :</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x79f905c6fd34e80000"</span>
|
|
|
}</pre><p><em>0x79f905c6fd34e80000 = 2250000000000000000000 Wei (2250 Ether)</em> (you can use a unit <a href="https://etherconverter.online/">converter</a> )</p>
|
|
|
<p>Wait a few seconds until new blocks are mined and make this call again. The balance should increase,
|
|
|
meaning that the miner address successfully received the mining reward.</p>
|
|
|
<p><em>Also you can see this information in the block explorer. It does exactly the same thing as we
|
|
|
did manually, connecting to the rpc node using http JSON-RPC, but displays information on a web page.</em></p>
|
|
|
<h3 id="additional-requests">Additional Requests</h3>
|
|
|
<p>Now that you are familiar with basic RPC requests you can run JSON-RPC commands to send transactions.
|
|
|
In order to send transactions, you will first need to create an account or use one of the 3 accounts
|
|
|
created during the genesis of this test network.</p>
|
|
|
<h4 id="account-1">Account 1</h4>
|
|
|
<p>This is the mining node coinbase account:</p>
|
|
|
<ul>
|
|
|
<li>Address: 0xfe3b557e8fb62b89f4916b721be55ceb828dbd73</li>
|
|
|
<li>Private key : 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63</li>
|
|
|
<li><p>Initial balance : 0xad78ebc5ac6200000 (200000000000000000000 in decimal) </p>
|
|
|
<h4 id="account-2">Account 2</h4>
|
|
|
</li>
|
|
|
<li><p>Address: 0x627306090abaB3A6e1400e9345bC60c78a8BEf57</p>
|
|
|
</li>
|
|
|
<li>Private key : 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3</li>
|
|
|
<li><p>Initial balance : 0x90000000000000000000000 (2785365088392105618523029504 in decimal)</p>
|
|
|
<h4 id="account-3">Account 3</h4>
|
|
|
</li>
|
|
|
<li><p>Address: 0xf17f52151EbEF6C7334FAD080c5704D77216b732</p>
|
|
|
</li>
|
|
|
<li>Private key : 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f</li>
|
|
|
<li>Initial balance : 0x90000000000000000000000 (2785365088392105618523029504 in decimal)</li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> Pantheon does not provide an accounts management system, so if you want to create your own account, you will have to use a third party tool like Metamask.</p>
|
|
|
</blockquote>
|
|
|
<h3 id="creating-a-transaction-using-metamask">Creating a Transaction Using MetaMask</h3>
|
|
|
<p>After you sign in to MetaMask, connect to the private network RPC endpoint by:</p>
|
|
|
<ol>
|
|
|
<li>In the MetaMask network list, select <strong>Custom RPC</strong>.</li>
|
|
|
<li>In the <strong>New RPC URL</strong> field, enter the <code>JSON-RPC HTTP service endpoint</code> displayed when you started the private network.</li>
|
|
|
</ol>
|
|
|
<p>Save the configuration and return to the MetaMask main screen. Your current network is now set to the private network RPC node.</p>
|
|
|
<p><a href="https://metamask.zendesk.com/hc/en-us/articles/360015489331-Importing-an-Account-New-UI-">Import one of the existing accounts above into metamask</a>
|
|
|
using the corresponding private key. </p>
|
|
|
<p><strong>NOTE that here we don't really care about securing the keys as it's just a tutorial, but be sure
|
|
|
to secure your accounts when you run into a real usecase. This will be discussed in a more advanced
|
|
|
chapter.</strong></p>
|
|
|
<p>Once this is done, try to <a href="https://metamask.zendesk.com/hc/en-us/articles/360015289452-Creating-Additional-MetaMask-Wallets-New-UI-">create another account from scratch</a>
|
|
|
to send some ether to.</p>
|
|
|
<p><em>Of course remember that here we are dealing with valueless ether as we are not
|
|
|
on the main network but on a local private network.</em></p>
|
|
|
<p>In MetaMask, select the new account and copy the account address by clicking the <strong>...</strong> button and selecting <strong>Copy Address to clipboard</strong>.</p>
|
|
|
<p>In the block explorer, search for the new account by clicking on the magnifying glass and pasting the account address into the search box. The account is displayed with a zero balance. </p>
|
|
|
<p><a href="https://metamask.zendesk.com/hc/en-us/articles/360015488991-Sending-Ether-New-UI-">Send some ether</a>
|
|
|
from the first account (containing some ether) to the new one (that have a zero balance).</p>
|
|
|
<p>Click refresh on the browser page displaying the new account. The updated balance is displayed and reflects the transaction completed using MetaMask. </p>
|
|
|
<h3 id="truffle-pet-shop-tutorial">Truffle Pet Shop Tutorial</h3>
|
|
|
<p>With a couple of modifications, we can use the private network in this tutorial as the blockchain for the <a href="https://truffleframework.com/tutorials/pet-shop">PetShop tutorial on Truffle website</a>.</p>
|
|
|
<h4 id="prerequisites">Prerequisites</h4>
|
|
|
<ul>
|
|
|
<li><a href="https://nodejs.org/en/">Node.js v6+ LTS and npm</a> (comes with Node)</li>
|
|
|
</ul>
|
|
|
<h4 id="install-truffle-and-unpack-truffle-box">Install Truffle and Unpack Truffle Box</h4>
|
|
|
<p>Install Truffle :</p>
|
|
|
<pre class="hljs">npm install -g truffle</pre><blockquote>
|
|
|
<p><strong>Note</strong> <code>npm</code> requires <code>sudo</code> on Linux. </p>
|
|
|
</blockquote>
|
|
|
<p>Create a <code>pet-shop-tutorial</code> directory and move into it:</p>
|
|
|
<pre class="hljs">mkdir pet-shop-tutorial
|
|
|
<span class="hljs-built_in">cd</span> pet-shop-tutorial</pre><p>Unpack Pet Shop <a href="https://truffleframework.com/boxes">truffle box</a>: </p>
|
|
|
<p><code>truffle unbox pet-shop</code></p>
|
|
|
<p>Install the <a href="https://www.npmjs.com/package/truffle-privatekey-provider">wallet</a>:</p>
|
|
|
<pre class="hljs">npm install truffle-privatekey-provider</pre><blockquote>
|
|
|
<p><strong>Note</strong> <code>npm</code> requires <code>sudo</code> on Linux.</p>
|
|
|
</blockquote>
|
|
|
<h4 id="modify-the-pet-shop-example">Modify the Pet Shop Example</h4>
|
|
|
<p>Modify the <code>truffle.js</code> file in the <code>pet-shop-tutorial</code> directory to add our wallet provider:</p>
|
|
|
<pre class="hljs"><span class="hljs-keyword">const</span> PrivateKeyProvider = <span class="hljs-built_in">require</span>(<span class="hljs-string">"truffle-privatekey-provider"</span>);
|
|
|
<span class="hljs-keyword">const</span> privateKey = <span class="hljs-string">"8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63"</span>;
|
|
|
<span class="hljs-keyword">const</span> privateKeyProvider = <span class="hljs-keyword">new</span> PrivateKeyProvider(privateKey, <span class="hljs-string">"<YOUR HTTP RPC NODE ENDPOINT>"</span>);
|
|
|
|
|
|
<span class="hljs-built_in">module</span>.exports = {
|
|
|
<span class="hljs-comment">// See <http://truffleframework.com/docs/advanced/configuration></span>
|
|
|
<span class="hljs-comment">// for more about customizing your Truffle configuration!</span>
|
|
|
networks: {
|
|
|
<span class="hljs-attr">development</span>: {
|
|
|
<span class="hljs-attr">host</span>: <span class="hljs-string">"127.0.0.1"</span>,
|
|
|
<span class="hljs-attr">port</span>: <span class="hljs-number">7545</span>,
|
|
|
<span class="hljs-attr">network_id</span>: <span class="hljs-string">"*"</span> <span class="hljs-comment">// Match any network id</span>
|
|
|
},
|
|
|
<span class="hljs-attr">quickstartWallet</span>: {
|
|
|
<span class="hljs-attr">provider</span>: privateKeyProvider,
|
|
|
<span class="hljs-attr">network_id</span>: <span class="hljs-string">"*"</span>
|
|
|
},
|
|
|
}
|
|
|
};</pre><p>Replace <code><YOUR HTTP RPC NODE ENDPOINT></code> with your HTTP RPC node endpoint (for example, <code>http://localhost:32770/jsonrpc</code>).</p>
|
|
|
<p>The private key is the miner address which means it will have funds. </p>
|
|
|
<p>Once this is done, you can continue with the <a href="https://truffleframework.com/tutorials/pet-shop#directory-structure">regular tutorial steps</a> on the Truffle website until Step 3 in the <a href="https://truffleframework.com/tutorials/pet-shop#migration">Migration section</a>.</p>
|
|
|
<h4 id="use-pantheon-private-network-instead-of-genache">Use Pantheon Private Network Instead of Genache</h4>
|
|
|
<p>We are going to use our private network instead of Genache, so skip steps 3, 4, and 5 in the <a href="https://truffleframework.com/tutorials/pet-shop#migration">Migration section</a>. </p>
|
|
|
<p>In step 4, specify our private network: </p>
|
|
|
<pre class="hljs">truffle migrate --network quickstartWallet</pre><p>Output similar to the following is displayed (your addresses will differ):</p>
|
|
|
<pre class="hljs">Using network 'quickstartWallet'.
|
|
|
|
|
|
Running migration: 1_initial_migration.js
|
|
|
Deploying Migrations...
|
|
|
... 0xfc1dbc1eaa14fa283c2c4415364579da0d195b3f2f2fefd7e0edb600a6235bdb
|
|
|
Migrations: 0x9a3dbca554e9f6b9257aaa24010da8377c57c17e
|
|
|
Saving successful migration to network...
|
|
|
... 0x77cc6e9966b886fb74268f118b3ff44cf973d32b616ed4f050b3eabf0a31a30e
|
|
|
Saving artifacts...
|
|
|
Running migration: 2_deploy_contracts.js
|
|
|
Deploying Adoption...
|
|
|
... 0x5035fe3ea7dab1d81482acc1259450b8bf8fefecfbe1749212aca86dc765660a
|
|
|
Adoption: 0x2e1f232a9439c3d459fceca0beef13acc8259dd8
|
|
|
Saving successful migration to network...
|
|
|
... 0xa7b5a36e0ebc9c25445ce29ff1339a19082d0dda516e5b72c06ee6b99a901ec0
|
|
|
Saving artifacts...</pre><p>Search for the deployed contracts and transactions in the block explorer using the addresses displayed in your output.</p>
|
|
|
<p>Continue with the regular tutorial steps in the <a href="https://truffleframework.com/tutorials/pet-shop#testing-the-smart-contract">Testing the smart contract section</a>.</p>
|
|
|
<p>To run the tests in the <a href="https://truffleframework.com/tutorials/pet-shop#running-the-tests">Running the tests section</a>, specify our private network: </p>
|
|
|
<pre class="hljs">truffle <span class="hljs-built_in">test</span> --network quickstartWallet</pre><p>Output similar to the following is displayed: </p>
|
|
|
<pre class="hljs">Using network 'quickstartWallet'.
|
|
|
|
|
|
Compiling ./contracts/Adoption.sol...
|
|
|
Compiling ./test/TestAdoption.sol...
|
|
|
Compiling truffle/Assert.sol...
|
|
|
Compiling truffle/DeployedAddresses.sol...
|
|
|
|
|
|
|
|
|
TestAdoption
|
|
|
✓ testUserCanAdoptPet (2071ms)
|
|
|
✓ testGetAdopterAddressByPetId (6070ms)
|
|
|
✓ testGetAdopterAddressByPetIdInArray (6077ms)
|
|
|
|
|
|
|
|
|
3 passing (37s)</pre><p>Continue with the regular tutorial steps in the <a href="https://truffleframework.com/tutorials/pet-shop#creating-a-user-interface-to-interact-with-the-smart-contract">Creating a user interface to interact with the smart contract section</a>.</p>
|
|
|
<p>We have already connected our private network to MetaMask so you can skip the <a href="https://truffleframework.com/tutorials/pet-shop#installing-and-configuring-metamask">Installing and configuring MetaMask section</a>.</p>
|
|
|
<p>Continue with the regular tutorial steps from the <a href="https://truffleframework.com/tutorials/pet-shop#installing-and-configuring-lite-server">Installing and configuring lite-server section</a> to the end of the tutorial.</p>
|
|
|
<p>When you adopt pets in the browser and approve the transaction in MetaMask, you will be able to see the transactions in the block explorer. </p>
|
|
|
<h2 id="shut-down-the-network-and-remove-the-containers">Shut Down the Network and Remove the Containers</h2>
|
|
|
<p>To shut down the network and delete all containers:</p>
|
|
|
<blockquote>
|
|
|
<p>On Linux/Mac, run the following shell command:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">quickstart/removePantheonPrivateNetwork.sh</pre><blockquote>
|
|
|
<p>On Windows, run the following docker-compose command:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">quickstart\docker-compose down</pre><blockquote>
|
|
|
<p><strong>Note</strong> On Windows, the quickstart creates a volume called <code>quickstart_public-keys</code>. Remove this volume using <code>docker volume rm quickstart_public-keys</code>.</p>
|
|
|
</blockquote>
|
|
|
<h2 id="stop-and-restart-the-private-network-without-removing-the-containers">Stop and restart the Private Network without Removing the Containers</h2>
|
|
|
<p>To shut down the network without deleting the containers:</p>
|
|
|
<blockquote>
|
|
|
<p>On Linux/Mac, run the following shell command:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">quickstart/stopPantheonPrivateNetwork.sh</pre><blockquote>
|
|
|
<p>On Windows, run the following docker command:</p>
|
|
|
</blockquote>
|
|
|
<pre class="hljs">docker-compose stop</pre><p>(This command will also stop other running containers unrelated to quickstart.)</p>
|
|
|
<p>To restart the private network:</p>
|
|
|
<blockquote>
|
|
|
<p>On Linux/Mac, run the following shell command:</p>
|
|
|
<pre class="hljs">quickstart/resumePantheonPrivateNetwork.sh</pre></blockquote>
|
|
|
<blockquote>
|
|
|
<p>On Windows, run the following docker command:</p>
|
|
|
<pre class="hljs">docker-compose start</pre></blockquote>
|
|
|
<p class="page" id="NetworkID-And-ChainID"></p><h1>Network ID and Chain ID</h1>
|
|
|
<h1 id="network-id-and-chain-id">Network ID and Chain ID</h1>
|
|
|
<p>Ethereum networks have a network ID and a chain ID. The network ID is specified using the <code>--network-id</code> option and the chain ID is specified in the genesis file.</p>
|
|
|
<p>For most networks including mainnet and the public testnets, the network ID and the chain ID are the same. </p>
|
|
|
<p>The network ID is automatically set by Pantheon when connecting to the Ethereum mainnet (<code>1</code>), Rinkeby (<code>4</code>), and Ropsten(<code>3</code>).</p>
|
|
|
<p>When using the <code>--dev-mode</code> or <code>--genesis</code> options, specify the network ID using the <code>--network-id</code> option. </p>
|
|
|
<p class="page" id="Node-Keys"></p><h1>Node Keys</h1>
|
|
|
<h1 id="node-keys">Node Keys</h1>
|
|
|
<p>Each node has a node key pair consisting of a node private key and node public key. </p>
|
|
|
<h2 id="node-private-key">Node Private Key</h2>
|
|
|
<p>If a <code>key</code> file does not exist in the data directory and the <code>--node-private-key</code> option is not specified when Pantheon is started, a node private key is generated and written to the <code>key</code> file. If Pantheon is stopped and restarted without deleting the <code>key</code> file, the same private key is used when Pantheon is restarted.</p>
|
|
|
<p>If a <code>key</code> file exists in the data directory when Pantheon is started, the node is started with the private key in the <code>key</code> file. </p>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> The private key is not encrypted. </p>
|
|
|
</blockquote>
|
|
|
<h2 id="node-public-key">Node Public Key</h2>
|
|
|
<p>The node public key is displayed in the log after starting Pantheon. Use the <a href="#Pantheon-CLI-Syntaxcommands"><code>export-pub-key</code></a> subcommand to export the public key to a file. </p>
|
|
|
<p>The node public key is also referred to as the node ID. The node ID forms part of the <a href="#Testing-Developing-Nodesprivate-networks">enode URL</a> for a node. </p>
|
|
|
<h2 id="specifying-a-custom-node-private-key-file">Specifying a Custom Node Private Key File</h2>
|
|
|
<p>Use the <code>--node-private-key</code> option to specify a custom <code>key</code> file in any location. </p>
|
|
|
<p>If the <code>key</code> file exists, the node is started with the private key in the custom <code>key</code> file. If the custom <code>key</code> file does not exist, a node private key is generated and written to the custom <code>key</code> file.</p>
|
|
|
<p>For example, the following command either reads the node private key from the <code>privatekeyfile</code> or writes the generated private key to the <code>privatekeyfile</code>:</p>
|
|
|
<p><code>bin/pantheon --node-private-key "/Users/username/privatekeyfile"</code></p>
|
|
|
<p class="page" id="Networking"></p><h1>Networking</h1>
|
|
|
<h1 id="networking">Networking</h1>
|
|
|
<p>Pantheon uses the network to find and connect to peers. </p>
|
|
|
<h2 id="firewalls-and-incoming-connections">Firewalls and Incoming Connections</h2>
|
|
|
<p>The default logging configuration does not list node connection and disconnection messages. </p>
|
|
|
<p>To enable listing of node connection and disconnection messages, specify the command line option <code>--logging=DEBUG</code>. For more verbosity, specify <code>--logging=TRACE</code>. </p>
|
|
|
<p>The console logs connection and disconnection events when the log level is <code>DEBUG</code> or higher. If <code>Successfully accepted connection from ...</code> is displayed, connections are getting through the firewalls. For example:</p>
|
|
|
<pre class="hljs">2018-10-16 12:37:35.479-04:00 | nioEventLoopGroup-3-1 | <span class="hljs-builtin-name">INFO</span> | NettyP2PNetwork | Successfully accepted<span class="hljs-built_in"> connection </span><span class="hljs-keyword">from</span> 0xa979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c</pre><p>If connections are not getting through the firewalls, ensure the peer discovery port is open on your firewall. </p>
|
|
|
<h2 id="peer-discovery-port">Peer Discovery Port</h2>
|
|
|
<p>The <code>--p2p-listen</code> option specifies the host and port on which P2P peer discovery listens. The default is <code>127.0.0.1:30303</code>.</p>
|
|
|
<h2 id="limiting-peers">Limiting Peers</h2>
|
|
|
<p>Limiting peers reduces the bandwidth used by Pantheon. It also reduces the CPU time and disk access used to manage and respond to peers. </p>
|
|
|
<p>Use the <code>--max-peers</code> command line option to reduce the maximum number of peers. The default is 25.</p>
|
|
|
<p>Use the <code>--max-trailing-peers</code> option to reduce the maximum P2P peer connections for peers that are trailing behind the local chain head. The default is unlimited but the number of trailing peers cannot exceed the value specified by <code>--max-peers</code>.</p>
|
|
|
<p>Trailing peers cannot be used to get new blocks and are more likely to be requesting blocks from you. Limiting trailing peers may reduce the time taken to catch up to the chain head when synchronizing. </p>
|
|
|
<h2 id="no-discovery">No Discovery</h2>
|
|
|
<p>The <code>--no-discovery</code> command line option disables P2P peer discovery. Only use this option if you are running a test node or a test network with fixed nodes.</p>
|
|
|
<h2 id="monitoring-peer-connections">Monitoring Peer Connections</h2>
|
|
|
<p>Use the <a href="#JSON-RPC-API-Methodsdebug_metrics"><code>debug_metrics</code></a> JSON-RPC API method to obtain information about peer connections. </p>
|
|
|
<p class="page" id="Accounts-for-Testing"></p><h1>Accounts for Testing</h1>
|
|
|
<h3 id="accounts-for-testing">Accounts for Testing</h3>
|
|
|
<p>You can use existing accounts for testing by including them in the genesis file for a private network. Alternatively, Pantheon provides predefined accounts in development mode. </p>
|
|
|
<h4 id="development-mode">Development Mode</h4>
|
|
|
<p> When you start Pantheon with the <a href="#Pantheon-CLI-Syntax"><code>--dev-mode</code> command line option</a>, the <code>dev.json</code> genesis file is used by default. </p>
|
|
|
<p> The <code>dev.json</code> genesis file defines the accounts below that can be used for testing. </p>
|
|
|
<blockquote>
|
|
|
<p><strong>Warning</strong> Do not use the following accounts on mainnet or any public network except for testing. The private keys are displayed here so the accounts are not secure. </p>
|
|
|
</blockquote>
|
|
|
<h5 id="account-1-miner-coinbase-account-">Account 1 (Miner Coinbase Account)</h5>
|
|
|
<ul>
|
|
|
<li>Address: <code>0xfe3b557e8fb62b89f4916b721be55ceb828dbd73</code></li>
|
|
|
<li>Private key : <code>0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63</code></li>
|
|
|
<li><p>Initial balance : <code>0xad78ebc5ac6200000</code> (200000000000000000000 in decimal) </p>
|
|
|
<h5 id="account-2">Account 2</h5>
|
|
|
</li>
|
|
|
<li><p>Address: <code>0x627306090abaB3A6e1400e9345bC60c78a8BEf57</code></p>
|
|
|
</li>
|
|
|
<li>Private key : <code>0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3</code></li>
|
|
|
<li><p>Initial balance : <code>0x90000000000000000000000</code> (2785365088392105618523029504 in decimal)</p>
|
|
|
<h5 id="account-3">Account 3</h5>
|
|
|
</li>
|
|
|
<li><p>Address: <code>0xf17f52151EbEF6C7334FAD080c5704D77216b732</code></p>
|
|
|
</li>
|
|
|
<li>Private key : <code>0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f</code></li>
|
|
|
<li><p>Initial balance : <code>0x90000000000000000000000</code> (2785365088392105618523029504 in decimal)</p>
|
|
|
<h4 id="genesis-file">Genesis File</h4>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<p>To use existing test accounts, specify the accounts and balances in a genesis file for your test network. For an example of defining accounts in the genesis file, refer to <a href="https://github.com/PegaSysEng/pantheon/blob/master/config/src/main/resources/dev.json"><code>dev.json</code></a>.</p>
|
|
|
<p>Use the <a href="https://github.com/PegaSysEng/pantheon/wiki/Pantheon-CLI-Syntax"><code>--genesis</code> command line option</a> to start Pantheon with the genesis file defining the existing accounts. </p>
|
|
|
<p class="page" id="Logging"></p><h1>Logging</h1>
|
|
|
<h1 id="logging">Logging</h1>
|
|
|
<p>Pantheon uses Log4J2 for logging. There are two methods to configure logging behavior: </p>
|
|
|
<ul>
|
|
|
<li>Basic - changes the log level. </li>
|
|
|
<li>Advanced - configures the output and format of the logs. </li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> For most use-cases, the basic method provides sufficient configurability. </p>
|
|
|
</blockquote>
|
|
|
<h2 id="basic-log-level-setting">Basic Log Level Setting</h2>
|
|
|
<p>Use the <a href="#Pantheon-CLI-Syntax"><code>--logging</code> command line option</a> to specify the logging verbosity. The <code>--logging</code> option changes the volume of events displayed in the log. </p>
|
|
|
<h2 id="advanced-custom-logging">Advanced Custom Logging</h2>
|
|
|
<p>You can provide your own logging configuration using the standard Log4J2 configuration mechanisms. For example, the following Log4J2 configuration is the same as the <a href="https://github.com/PegaSysEng/pantheon/blob/master/pantheon/src/main/resources/log4j2.xml">default configuration</a> except logging of stack traces for exceptions is excluded.</p>
|
|
|
<pre class="hljs"><span class="hljs-meta"><?xml version="1.0" encoding="UTF-8"?></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">Configuration</span> <span class="hljs-attr">status</span>=<span class="hljs-string">"INFO"</span>></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">Properties</span>></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">Property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"root.log.level"</span>></span>INFO<span class="hljs-tag"></<span class="hljs-name">Property</span>></span>
|
|
|
<span class="hljs-tag"></<span class="hljs-name">Properties</span>></span>
|
|
|
|
|
|
<span class="hljs-tag"><<span class="hljs-name">Appenders</span>></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">Console</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"Console"</span> <span class="hljs-attr">target</span>=<span class="hljs-string">"SYSTEM_OUT"</span>></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">PatternLayout</span> <span class="hljs-attr">pattern</span>=<span class="hljs-string">"%d{yyyy-MM-dd HH:mm:ss.SSSZZZ} | %t | %-5level | %c{1} | %msg %throwable{short.message}%n"</span> /></span> <span class="hljs-tag"></<span class="hljs-name">Console</span>></span>
|
|
|
<span class="hljs-tag"></<span class="hljs-name">Appenders</span>></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">Loggers</span>></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">Root</span> <span class="hljs-attr">level</span>=<span class="hljs-string">"${sys:root.log.level}"</span>></span>
|
|
|
<span class="hljs-tag"><<span class="hljs-name">AppenderRef</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">"Console"</span> /></span>
|
|
|
<span class="hljs-tag"></<span class="hljs-name">Root</span>></span>
|
|
|
<span class="hljs-tag"></<span class="hljs-name">Loggers</span>></span>
|
|
|
<span class="hljs-tag"></<span class="hljs-name">Configuration</span>></span></pre><p>To use your custom configuration, set the environment variable <code>LOG4J_CONFIGURATION_FILE</code> to the location of your configuration file. </p>
|
|
|
<p>If you have more specific requirements, you can create your own <a href="https://logging.apache.org/log4j/2.x/manual/configuration.html">log4j2 configuration</a>.</p>
|
|
|
<p>For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Pantheon. For example, to set the debug logging and start Pantheon connected to the Rinkeby testnet:</p>
|
|
|
<pre class="hljs">LOG4J_CONFIGURATION_FILE=./debug.xml bin/pantheon --rinkeby</pre><p class="page" id="Testing-Developing-Nodes"></p><h1>Testing and Developing Nodes</h1>
|
|
|
<h1 id="testing-and-developing-nodes">Testing and Developing Nodes</h1>
|
|
|
<h2 id="bootnodes">Bootnodes</h2>
|
|
|
<p>Bootnodes are used to initially discover peers. </p>
|
|
|
<h3 id="mainnet-and-public-testnets">Mainnet and Public Testnets</h3>
|
|
|
<p>For mainnet and Rinkeby, Pantheon predefines a list of enonde URLs. For Ropsten, bootnodes are specified using the <a href="#Starting-Pantheonrun-a-node-on-ropsten-testnet"><code>--bootnodes</code> option</a>. </p>
|
|
|
<h3 id="private-networks">Private Networks</h3>
|
|
|
<p>To start a bootnode for a private network:</p>
|
|
|
<ol>
|
|
|
<li><p>Export the public key to a file:</p>
|
|
|
<pre class="hljs">pantheon export-pub-key bootnode</pre><p>The node public key is exported to the <code>bootnode</code> file. </p>
|
|
|
</li>
|
|
|
<li><p>Start the bootnode, specifying:</p>
|
|
|
<ul>
|
|
|
<li>An empty string for the <code>--bootnodes</code> option because this is the bootnode. </li>
|
|
|
<li><p>The network ID for your private network. </p>
|
|
|
<pre class="hljs">pantheon --bootnodes="" --network-id 123 </pre></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
</ol>
|
|
|
<p>To specify this bootnode for another node, the enode URL for the <code>--bootnodes</code> option is <code>enode://<id>@<host:port></code> where:</p>
|
|
|
<ul>
|
|
|
<li><code><id></code> is the node public key written to the specified file (<code>bootnode</code> in the above example) excluding the initial 0x. </li>
|
|
|
<li><code><host:port></code> is the host and port the bootnode is listening on for P2P peer discovery. Specified by the <code>--p2p-listen</code> option for the bootnode (default is <code>127.0.0.1:30303</code>).</li>
|
|
|
</ul>
|
|
|
<p>For example, if the <code>--p2p-listen</code> option is not specified and the node public key exported is <code>0xc35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f</code></p>
|
|
|
<p>Then the enode URL is:
|
|
|
<code>enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb9589bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303</code> </p>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> The default host and port for P2P peer discovery is <code>127.0.0.1:30303</code>. The <code>--p2p-listen</code> option can be used to specify a host and port. </p>
|
|
|
</blockquote>
|
|
|
<p>To start a node specifying the bootnode for P2P discovery:</p>
|
|
|
<pre class="hljs">pantheon --datadir=/tmp/pantheon/30301 --p2p-listen=127.0.0.1:30301 --network-id=123 --bootnodes=enode://c35c3ec90a8a51fd5703594c6303382f3ae6b2ecb99bab2c04b3794f2bc3fc2631dabb0c08af795787a6c004d8f532230ae6e9925cbbefb0b28b79295d615f@127.0.0.1:30303</pre><p class="page" id="Proof-of-Authority"></p><h1>Proof of Authority</h1>
|
|
|
<h2 id="proof-of-authority">Proof of Authority</h2>
|
|
|
<p>Pantheon implements the Clique Proof-of-Authority (PoA) consensus protocol. Clique is used by the Rinkeby testnet and can be used for private networks. </p>
|
|
|
<p>In PoA networks, transactions and blocks are validated by approved accounts, known as signers. Signers take turns to create the next block. Existing signers propose and vote to add or remove signers. </p>
|
|
|
<h2 id="genesis-file">Genesis File</h2>
|
|
|
<p>To use Clique in a private network, Pantheon requires a PoA genesis file. When connecting to Rinkeby, Pantheon uses the <a href="https://github.com/PegaSysEng/pantheon/blob/master/ethereum/core/src/main/resources/rinkeby.json"><code>rinkeby.json</code></a> genesis file in the <code>/pantheon/ethereum/core/src/main/resources</code> directory.</p>
|
|
|
<p>A PoA genesis file defines properties specific to Clique:</p>
|
|
|
<pre class="hljs">{
|
|
|
"config": {
|
|
|
....
|
|
|
"clique": {
|
|
|
"period": 15,
|
|
|
"epoch": 30000
|
|
|
}
|
|
|
},
|
|
|
...
|
|
|
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000dd37f65db31c107f773e82a4f85c693058fef7a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
|
...
|
|
|
}</pre><p>The properties specific to Clique are:</p>
|
|
|
<ul>
|
|
|
<li><code>period</code> - Block time in seconds. </li>
|
|
|
<li><code>epoch</code> - Number of blocks after which to reset all votes.</li>
|
|
|
<li><code>extraData</code> - Initial signers are specified after the 32 bytes reserved for vanity data. </li>
|
|
|
</ul>
|
|
|
<p>To connect to the Rinkeby testnet, start Pantheon with the <code>--rinkeby</code> option. To start a node on a PoA private network, use the <code>--network-id</code> and <code>--genesis</code> options. </p>
|
|
|
<h3 id="adding-and-removing-signers">Adding and Removing Signers</h3>
|
|
|
<p>To propose adding or removing signers using the JSON-RPC methods, you must enable the RPC interface using the <a href="#Pantheon-CLI-Syntaxoptions"><code>--rpc-enabled</code> option</a>. If also using the <a href="#Pantheon-CLI-Syntaxoptions"><code>--rpc-api</code> option</a>, include <code>CLIQUE</code>.</p>
|
|
|
<p>The JSON-RPC methods to add or remove signers are:</p>
|
|
|
<ul>
|
|
|
<li><a href="#JSON-RPC-API-Methodsclique_propose">clique_propose</a></li>
|
|
|
<li><a href="#JSON-RPC-API-Methodsclique_getsigners">clique_getSigners</a></li>
|
|
|
<li><a href="#JSON-RPC-API-Methodsclique_discard">clique_discard</a></li>
|
|
|
</ul>
|
|
|
<p>To propose adding a signer, call <code>clique_propose</code> specifying the address of the proposed signer and <code>true</code>. For example, </p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}' <JSON-RPC-endpoint:port></pre><p>When the next block is created by the signer, a vote is added to the block for the proposed signer. </p>
|
|
|
<p>When more than half of the existing signers propose adding the signer and their votes have been distributed in blocks, the signer is added and can begin signing blocks. </p>
|
|
|
<p>Use <code>clique_getSigners</code> to return a list of the signers and to confirm that your proposed signer has been added. </p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1}' <JSON-RPC-endpoint:port></pre><p>To discard your proposal after confirming the signer was added, call <code>clique_discard</code> specifying the address of the proposed signer. For example:</p>
|
|
|
<pre class="hljs"> curl -X POST --data '{"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}' <JSON-RPC-endpoint:port></pre><p>The process for removing a signer is the same as adding a signer except you specify <code>false</code> as the second parameter of <code>clique_propose</code>. </p>
|
|
|
<h4 id="epoch-transition">Epoch Transition</h4>
|
|
|
<p>At each epoch transition, all pending votes collected from received blocks are discarded. Existing proposals remain in effect and signers re-add their vote the next time they create a block. </p>
|
|
|
<p>Define the number of blocks between epoch transitions in the genesis file. </p>
|
|
|
<p class="page" id="Passing-JVM-Options"></p><h1>Passing JVM Options</h1>
|
|
|
<h1 id="passing-jvm-options-to-pantheon">Passing JVM Options to Pantheon</h1>
|
|
|
<p>To perform tasks such as attaching a debugger or configuring the garbage collector, pass JVM options to Pantheon. </p>
|
|
|
<p>Pantheon passes the contents of the <code>PANTHEON_OPTS</code> environmental variable to the JVM. Set standard JVM options in the <code>PANTHEON_OPTS</code> variable. </p>
|
|
|
<p>For Bash-based executions, you can set the variable for only the scope of the program execution by setting it before starting Pantheon. For example:</p>
|
|
|
<pre class="hljs">PANTHEON_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,<span class="hljs-built_in">suspend</span>=n,address=5005 bin/pantheon --rinkeby</pre><p class="page" id="Transactions"></p><h1>Creating and Sending Transactions</h1>
|
|
|
<h1 id="transactions">Transactions</h1>
|
|
|
<p>You can send signed transactions using the <a href="#JSON-RPC-API-Methodseth_sendrawtransaction"><code>eth_sendRawTransaction</code></a> JSON-RPC API method.</p>
|
|
|
<p>These examples describe how to create a signed raw transaction that can be passed to <a href="#JSON-RPC-API-Methodseth_sendrawtransaction"><code>eth_sendRawTransaction</code></a>.</p>
|
|
|
<p><strong>To avoid exposing your private keys, create signed transactions offline.</strong> </p>
|
|
|
<p>The examples use the following libraries to create signed transactions:</p>
|
|
|
<ul>
|
|
|
<li><a href="https://github.com/ethereum/web3.js/">https://github.com/ethereum/web3.js/</a></li>
|
|
|
<li><a href="https://github.com/ethereumjs/ethereumjs-tx">https://github.com/ethereumjs/ethereumjs-tx</a></li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p><strong>Note:</strong> Other libraries (such as <a href="https://github.com/web3j/web3j">webj3</a> or <a href="https://github.com/ethereum/ethereumj">ethereumj</a>) and tools (such as <a href="https://kb.myetherwallet.com/offline/making-offline-transaction-on-myetherwallet.html">MyEtherWallet</a> or <a href="https://mycrypto.com/">MyCrypto</a>) can also be used to create signed transactions. </p>
|
|
|
</blockquote>
|
|
|
<p>Example JS scripts are provided to create signed raw transaction strings to: </p>
|
|
|
<ul>
|
|
|
<li><a href="#sending-ether">Send ether</a></li>
|
|
|
<li><a href="#deploying-a-contract">Deploy a contract</a></li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p><strong>Note:</strong> <a href="https://nodejs.org/en/download/">Node.js</a> must be installed to run JS scripts. </p>
|
|
|
</blockquote>
|
|
|
<p>The example JS scripts can be used to create raw transactions to send in the private network created by the <a href="#Private-Network-Quickstartprivate-network-quickstart-tutorial">Private Network Quickstart</a>. The <code>JSON-RPC endpoint</code> in the examples must be updated to the endpoint for the private network displayed after running the <code>quickstart/runPantheonPrivateNetwork.sh</code> script. </p>
|
|
|
<p>To create and display the transaction string, run the JS script. For example:</p>
|
|
|
<p><code>node create_signed_raw_transaction.js</code></p>
|
|
|
<p>To send a signed transaction, run:</p>
|
|
|
<pre class="hljs">curl -X POST --data <span class="hljs-string">'{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["raw_transaction_string"],"id":1}'</span> <JSON-RPC-endpoint:port></pre><p>Where:</p>
|
|
|
<ul>
|
|
|
<li><code>raw_transaction_string</code> is the signed raw transaction string displayed by the JS script. </li>
|
|
|
<li><code><JSON-RPC-endpoint:port></code> is the JSON-RPC endpoint.</li>
|
|
|
</ul>
|
|
|
<p>For example: </p>
|
|
|
<pre class="hljs">curl -X POST --data <span class="hljs-string">'{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xf86a808203e882520894f17f52151ebef6c7334fad080c5704d77216b732896c6b935b8bbd400000801ca08ce4a6c12f7f273321c5dc03910744f8fb11573fcce8140aa44486d385d22fb3a051f6bcc918bf3f12e06bfccfd1451bea5c517dffee0777ebd50caf177b17f383"],"id":1}'</span> http://localhost:8545</pre><p>All accounts and private keys in the examples are from the <code>dev.json</code> genesis file in the <code>/pantheon/ethereum/core/src/main/resources</code> directory.</p>
|
|
|
<h2 id="sending-ether">Sending Ether</h2>
|
|
|
<p>The following is an example of JavaScript that displays a signed transaction string to send ether. </p>
|
|
|
<pre class="hljs">const web3 = require(<span class="hljs-string">'web3'</span>)
|
|
|
const ethTx = require(<span class="hljs-string">'ethereumjs-tx'</span>)
|
|
|
|
|
|
// web3 initialization - must point to the HTTP JSON-RPC endpoint
|
|
|
const web3 = new Web3(new Web3.providers.HttpProvider(<span class="hljs-string">'http://127.0.0.1:8545'</span>))
|
|
|
|
|
|
// Sender address and private key
|
|
|
// Second acccount <span class="hljs-keyword">in</span> dev.json genesis file
|
|
|
// Exclude 0x at the beginning of the private key
|
|
|
const addressFrom = <span class="hljs-string">'0x627306090abaB3A6e1400e9345bC60c78a8BEf57'</span>
|
|
|
const privKey = Buffer.from(<span class="hljs-string">'c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3'</span>, <span class="hljs-string">'hex'</span>)
|
|
|
|
|
|
// Receiver address and value to transfer
|
|
|
// Third account <span class="hljs-keyword">in</span> dev.json genesis file
|
|
|
const addressTo = <span class="hljs-string">'0xf17f52151EbEF6C7334FAD080c5704D77216b732'</span>
|
|
|
const valueInEther = 2000
|
|
|
|
|
|
// Get the address transaction count <span class="hljs-keyword">in</span> order to specify the correct nonce
|
|
|
txnCount = web3.eth.getTransactionCount(addressFrom, <span class="hljs-string">"pending"</span>);
|
|
|
|
|
|
// Create the transaction object
|
|
|
var txObject = {
|
|
|
nonce: web3.toHex(txnCount),
|
|
|
gasPrice: web3.toHex(1000),
|
|
|
gasLimit: web3.toHex(21000),
|
|
|
to: addressTo,
|
|
|
value: web3.toHex(web3.toWei(valueInEther, <span class="hljs-string">'ether'</span>))
|
|
|
};
|
|
|
|
|
|
// Sign the transaction with the private key
|
|
|
const tx = new ethTx(txObject);
|
|
|
tx.sign(privKey)
|
|
|
|
|
|
//Convert to raw transaction string
|
|
|
const serializedTx = tx.serialize();
|
|
|
const rawTxHex = <span class="hljs-string">'0x'</span> + serializedTx.toString(<span class="hljs-string">'hex'</span>);
|
|
|
|
|
|
console.log(<span class="hljs-string">"Raw transaction string="</span> + rawTxHex)</pre><h2 id="deploying-a-contract">Deploying a Contract</h2>
|
|
|
<p>The following is an example of JavaScript that displays a signed raw transaction string to deploy a contract.</p>
|
|
|
<pre class="hljs">const web3 = require(<span class="hljs-string">'web3'</span>)
|
|
|
const ethTx = require(<span class="hljs-string">'ethereumjs-tx'</span>)
|
|
|
|
|
|
// web3 initialization - must point to the HTTP JSON-RPC endpoint
|
|
|
const web3 = new Web3(new Web3.providers.HttpProvider(<span class="hljs-string">'http://127.0.0.1:8545'</span>))
|
|
|
|
|
|
// Deployer address and private key
|
|
|
// First account <span class="hljs-keyword">in</span> the dev.json genesis file
|
|
|
const addressFrom = <span class="hljs-string">'0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73'</span>
|
|
|
const privKey = Buffer.from(<span class="hljs-string">'8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63'</span>, <span class="hljs-string">'hex'</span>)
|
|
|
|
|
|
// Compiled contract <span class="hljs-built_in">hash</span> - can obtain from Remix by clicking the Details button <span class="hljs-keyword">in</span> the Compile tab.
|
|
|
// Compiled contract <span class="hljs-built_in">hash</span> is value of data parameter <span class="hljs-keyword">in</span> the WEB3DEPLOY section
|
|
|
const contractData = <span class="hljs-string">'0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029'</span>
|
|
|
|
|
|
// Get the address transaction count <span class="hljs-keyword">in</span> order to specify the correct nonce
|
|
|
txnCount = web3.eth.getTransactionCount(addressFrom, <span class="hljs-string">"pending"</span>);
|
|
|
|
|
|
var txObject = {
|
|
|
nonce: web3.toHex(txnCount),
|
|
|
gasPrice: web3.toHex(1000),
|
|
|
gasLimit: web3.toHex(126165),
|
|
|
data: contractData
|
|
|
};
|
|
|
|
|
|
const tx = new ethTx(txObject);
|
|
|
tx.sign(privKey)
|
|
|
|
|
|
const serializedTx = tx.serialize();
|
|
|
const rawTxHex = <span class="hljs-string">'0x'</span> + serializedTx.toString(<span class="hljs-string">'hex'</span>);
|
|
|
|
|
|
console.log(<span class="hljs-string">"Raw transaction string="</span> + rawTxHex); </pre><h2 id="eth_call-or-eth_sendrawtransaction">eth_call or eth_sendRawTransaction</h2>
|
|
|
<p>You can interact with contracts using <a href="#JSON-RPC-API-Methodseth_call">eth_call</a> or <a href="#JSON-RPC-API-Methodseth_sendrawtransaction">eth_sendRawTransaction</a>. </p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>eth_call</th>
|
|
|
<th>eth_sendRawTransaction</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td>Read-only</td>
|
|
|
<td>Write</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>Invokes contract function locally</td>
|
|
|
<td>Broadcasts to network</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>Does not change state of blockchain</td>
|
|
|
<td>Updates blockchain (for example, transfers ether between accounts)</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>Does not consume gas</td>
|
|
|
<td>Requires gas</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>Synchronous</td>
|
|
|
<td>Asynchronous</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td>Return value of contract function available immediately</td>
|
|
|
<td>Returns transaction hash only. Possible transaction may not be included in a block (for example, if the gas price is too low)</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<p class="page" id="Account-Management"></p><h1>Using Wallets for Account Management</h1>
|
|
|
<h2 id="using-wallets-for-account-management">Using Wallets for Account Management</h2>
|
|
|
<p>Pantheon does not implement private key management. Use third-party tools (for example, <a href="https://consensys.zendesk.com/hc/en-us/articles/360004685212-Generating-MetaMask-Wallet-New-UI-">MetaMask</a> and <a href="https://web3j.io/">web3j</a>) for creating accounts. </p>
|
|
|
<p>In Pantheon, you can use the JSON-RPC methods:</p>
|
|
|
<ul>
|
|
|
<li><a href="#JSON-RPC-API-Methodseth_getbalance">eth_getBalance</a> to obtain the account balance</li>
|
|
|
<li><a href="#JSON-RPC-API-Methodseth_sendrawtransaction">eth_sendRawTransaction</a> to transfer ether or create and interact with contracts (for more information, refer to <a href="#Transactionstransactions">Transactions</a>). </li>
|
|
|
</ul>
|
|
|
<p class="page" id="Mining"></p><h1>Mining</h1>
|
|
|
<h1 id="mining">Mining</h1>
|
|
|
<p>Start Pantheon with the following options to enable mining: </p>
|
|
|
<pre class="hljs">bin/pantheon --miner-enabled --miner-coinbase <account></pre><p>Where <code><account></code> is the account to which mining rewards are to be paid. For example, <code>fe3b557e8fb62b89f4916b721be55ceb828dbd73</code>.</p>
|
|
|
<p>JSON-RPC API methods for mining are: </p>
|
|
|
<ul>
|
|
|
<li><a href="#JSON-RPC-API-Methodsminer_start"><code>miner_start</code></a> to start mining. </li>
|
|
|
<li><a href="#JSON-RPC-API-Methodsminer_stop"><code>miner_stop</code></a> to stop mining. </li>
|
|
|
<li><a href="#JSON-RPC-API-Methodseth_mining"><code>eth_mining</code></a> to determine whether the client is actively mining new blocks. </li>
|
|
|
</ul>
|
|
|
<p class="page" id="RPC-PubSub"></p><h1>RPC Pub/Sub</h1>
|
|
|
<h1 id="rpc-pub-sub">RPC Pub/Sub</h1>
|
|
|
<h2 id="contents">Contents</h2>
|
|
|
<ul>
|
|
|
<li><a href="#introduction">Introduction</a> </li>
|
|
|
<li><a href="#subscribing">Subscribing</a></li>
|
|
|
<li><a href="#unsubscribing">Unsubscribing</a></li>
|
|
|
</ul>
|
|
|
<h2 id="introduction">Introduction</h2>
|
|
|
<p>Use the RPC Pub/Sub API to wait for events instead of polling for them. For example, a Dapp can subscribe to logs to be notified when a specific event has occurred. </p>
|
|
|
<p>The RPC Pub/Sub methods are: </p>
|
|
|
<ul>
|
|
|
<li><code>eth_subscribe</code> - create a subscription for specific events.</li>
|
|
|
<li><code>eth_unsubscribe</code> - cancel a subscription.</li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> Unlike other <a href="#JSON-RPC-API-Methods">JSON RPC-API methods</a>, the RPC Pub/Sub methods cannot be called over HTTP. </p>
|
|
|
</blockquote>
|
|
|
<h3 id="using-rpc-pub-sub">Using RPC Pub/Sub</h3>
|
|
|
<p>The RPC Pub/Sub API requires a persistent connection. Connect to the RPC Pub/Sub API using a tool such as <a href="#Using-JSON-RPC-APIendpoint-address-and-port">WebSockets</a>. </p>
|
|
|
<p>Use <code>eth_subscribe</code> to create subscriptions. Once subscribed, notifications are published by the API using <code>eth_subscription</code>.</p>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> Notifications are published by <code>eth_subscription</code>; you do not need to call <code>eth_subscription</code>.</p>
|
|
|
</blockquote>
|
|
|
<p>Subscriptions are coupled to a connection. If the connection is closed, all subscriptions created over this connection are removed.</p>
|
|
|
<h3 id="subscription-id">Subscription ID</h3>
|
|
|
<p><code>eth_subscribe</code> returns a subscription ID for each subscription created. Notifications include the subscription ID. For example, to create a synchronizing subscription:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_subscribe"</span>, <span class="hljs-attr">"params"</span>: [<span class="hljs-string">"syncing"</span>]}</pre><p>The result includes the subscription ID of <code>"0x1"</code>: </p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"id"</span>:<span class="hljs-number">1</span>,<span class="hljs-attr">"result"</span>:<span class="hljs-string">"0x1"</span>}</pre><p>The notifications also include the subscription ID of <code>"0x1"</code>: </p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"method"</span>:<span class="hljs-string">"eth_subscription"</span>,<span class="hljs-attr">"params"</span>:{<span class="hljs-attr">"subscription"</span>:<span class="hljs-string">"0x1"</span>,<span class="hljs-attr">"result"</span>:{<span class="hljs-attr">"startingBlock"</span>:<span class="hljs-string">"0x0"</span>,<span class="hljs-attr">"currentBlock"</span>:<span class="hljs-string">"0x50"</span>,<span class="hljs-attr">"highestBlock"</span>:<span class="hljs-string">"0x343c19"</span>}}}</pre><h3 id="notifications-when-synchronizing">Notifications when Synchronizing</h3>
|
|
|
<p>Subscribing to some events (for example, logs) can cause a flood of notifications while the node is synchronizing.</p>
|
|
|
<h2 id="subscribing">Subscribing</h2>
|
|
|
<p>Use <code>eth_subscribe</code> to create subscriptions for the following event types:</p>
|
|
|
<ul>
|
|
|
<li><a href="#new-headers">New headers</a></li>
|
|
|
<li><a href="#logs">Logs</a></li>
|
|
|
<li><a href="#pending-transactions">Pending transactions</a></li>
|
|
|
<li><a href="#synchronizing">Synchronizing</a> </li>
|
|
|
</ul>
|
|
|
<h4 id="new-headers">New Headers</h4>
|
|
|
<p>Use the <code>newHeads</code> parameter with <code>eth_subscribe</code> to be notified each time a block is added to the blockchain. </p>
|
|
|
<p>If a chain reorganization occurs, the subscription publishes notifications for blocks in the new chain. This means the subscription can publish notifications for multiple blocks at the same height on the blockchain.</p>
|
|
|
<p>The new headers subscription returns <a href="#Objectsblock-object">Block Objects</a>. </p>
|
|
|
<p>To subscribe to new header notifications:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_subscribe"</span>, <span class="hljs-attr">"params"</span>: [<span class="hljs-string">"newHeads"</span>, {<span class="hljs-attr">"includeTransactions"</span>: <span class="hljs-literal">true</span>}]}</pre><p>The second parameter is optional. If specified, whole <a href="#Objectstransaction-object">transaction objects</a> are included in the notifications. Otherwise, the transaction hashes are included. </p>
|
|
|
<p>Example result: </p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"id"</span>:<span class="hljs-number">2</span>,<span class="hljs-attr">"result"</span>:<span class="hljs-string">"0x1"</span>}</pre><p>Example notification without the <code>{"includeTransactions": true}</code> parameter included: </p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_subscription"</span>,
|
|
|
<span class="hljs-attr">"params"</span>:{
|
|
|
<span class="hljs-attr">"subscription"</span>:<span class="hljs-string">"0x1"</span>,
|
|
|
<span class="hljs-attr">"result"</span>: {
|
|
|
<span class="hljs-attr">"number"</span>:<span class="hljs-string">"0x40c22"</span>,
|
|
|
<span class="hljs-attr">"hash"</span>:<span class="hljs-string">"0x16af2ee1672203c7ac13ff280822008be0f38e1e5bdc675760015ae3192c0e3a"</span>,
|
|
|
<span class="hljs-attr">"parentHash"</span>:<span class="hljs-string">"0x1fcf5dadfaf2ab4d985eb05d40eaa23605b0db25d736610c4b87173bfe438f91"</span>,
|
|
|
<span class="hljs-attr">"nonce"</span>:<span class="hljs-string">"0x0000000000000000"</span>,
|
|
|
<span class="hljs-attr">"sha3Uncles"</span>:<span class="hljs-string">"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"</span>,
|
|
|
<span class="hljs-attr">"logsBloom"</span>:<span class="hljs-string">"0x00008000000000080000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000040000000000000000000000000000000000000000001000000000000000000000040000000000000000000000000000000000000400000000010000000000000000100000000000020000000000000000000000000000000000010000000000000000000000000000000000000000000"</span>,
|
|
|
<span class="hljs-attr">"transactionsRoot"</span>:<span class="hljs-string">"0x5b2e3c1a49352f1ca9fb5dfe74b7ffbbb6d70e23a12693444e26058d8a8e6296"</span>,
|
|
|
<span class="hljs-attr">"stateRoot"</span>:<span class="hljs-string">"0xbe8d3bc58bd982421a3ea8b66753404502df0f464ae78a17661d157c406dd38b"</span>,
|
|
|
<span class="hljs-attr">"receiptsRoot"</span>:<span class="hljs-string">"0x81b175ec1f4d44fbbd6ba08f1bd3950663b307b7cb35751c067b535cc0b58f12"</span>,
|
|
|
<span class="hljs-attr">"miner"</span>:<span class="hljs-string">"0x0000000000000000000000000000000000000000"</span>,
|
|
|
<span class="hljs-attr">"difficulty"</span>:<span class="hljs-string">"0x1"</span>,
|
|
|
<span class="hljs-attr">"totalDifficulty"</span>:<span class="hljs-string">"0x7c16e"</span>,
|
|
|
<span class="hljs-attr">"extraData"</span>:<span class="hljs-string">"0xd783010600846765746887676f312e372e33856c696e757800000000000000002160f780bb1f61eda045c67cdb1297ba37d8349df8035533cb0cf82a7e45f23f3d72bbec125a9f499b3eb110b7d1918d466cb2ede90b38296cfe2aaf452c513f00"</span>,
|
|
|
<span class="hljs-attr">"size"</span>:<span class="hljs-string">"0x3a1"</span>,
|
|
|
<span class="hljs-attr">"gasLimit"</span>:<span class="hljs-string">"0x47e7c4"</span>,
|
|
|
<span class="hljs-attr">"gasUsed"</span>:<span class="hljs-string">"0x11ac3a"</span>,
|
|
|
<span class="hljs-attr">"timestamp"</span>:<span class="hljs-string">"0x592afc24"</span>,
|
|
|
<span class="hljs-attr">"uncles"</span>:[],
|
|
|
<span class="hljs-attr">"transactions"</span>:[<span class="hljs-string">"0x419c69d21b14e2e8f911def22bb6d0156c876c0e1c61067de836713043364d6c"</span>,<span class="hljs-string">"0x70a5b2cb2cee6e0b199232a1757fc2a9d6053a4691a7afef8508fd88aeeec703"</span>,<span class="hljs-string">"0x4b3035f1d32339fe1a4f88147dc197a0fe5bbd63d3b9dec2dad96a3b46e4fddd"</span>],
|
|
|
},
|
|
|
}
|
|
|
}</pre><p>Example notification with the <code>{"includeTransactions": true}</code> parameter included: </p>
|
|
|
<pre class="hljs">{
|
|
|
"jsonrpc":"2.0",
|
|
|
"method":"eth_subscription",
|
|
|
"params":{
|
|
|
"subscription":"0x1",
|
|
|
"result": {
|
|
|
....
|
|
|
"transactions":[
|
|
|
{
|
|
|
"blockHash":"0xa30ee4d7c271ae5150aec494131c5f1f34089c7aa8fb58bd8bb916a55275bb90",
|
|
|
"blockNumber":"0x63",
|
|
|
"from":"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",
|
|
|
"gas":"0x5208",
|
|
|
"gasPrice":"0x3b9aca00",
|
|
|
"hash":"0x11f66c3e96a92e3c14c1c33ad77381221bf8b58a887b4fed6aee456fc6f39b24",
|
|
|
"input":"0x",
|
|
|
"nonce":"0x1",
|
|
|
"to":"0x627306090abab3a6e1400e9345bc60c78a8bef57",
|
|
|
"transactionIndex":"0x0",
|
|
|
"value":"0x56bc75e2d63100000",
|
|
|
"v":"0xfe8",
|
|
|
"r":"0x4b57d179c74885ef5f9326fd000665ea7fae44095c1e2016a2817fc671beb8cc",
|
|
|
"s":"0x7ec060b115746dda392777df07ae1feacc0b83b3646f0a3de9a5fc3615af9bb8",
|
|
|
}
|
|
|
],
|
|
|
},
|
|
|
},
|
|
|
}
|
|
|
</pre><h4 id="logs">Logs</h4>
|
|
|
<p>Use the <code>logs</code> parameter with <code>eth_subscribe</code> to be notified of logs included in new blocks. You can specify a <a href="#Objectsfilter-options-object">filter object</a> to receive notifications only for logs matching your filter. </p>
|
|
|
<p>Logs subscriptions have an filter object parameter with the following fields:</p>
|
|
|
<ul>
|
|
|
<li><code>address</code> - (optional) Either an address or an array of addresses. Returns only logs created from these addresses.</li>
|
|
|
<li><code>topics</code> - (optional) Returns only logs that match the specified topics.</li>
|
|
|
</ul>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> The <code>fromBlock</code> and <code>toBlock</code> attributes are not included in the filter object for the logs subscription because the subscription waits for logs rather than requesting them. </p>
|
|
|
</blockquote>
|
|
|
<p>If a chain reorganization occurs, the subscription publishes notifications for logs from the old chain with the <code>removed</code> property in the <a href="#Objectslog-object">log object</a> set to <code>true</code>. This means the subscription can publish notifications for multiple logs for the same transaction.</p>
|
|
|
<p>The logs subscription returns <a href="#Objectslog-object">Log objects</a>. </p>
|
|
|
<p>To subscribe to all logs notifications:</p>
|
|
|
<pre class="hljs"> {<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_subscribe"</span>, <span class="hljs-attr">"params"</span>: [<span class="hljs-string">"logs"</span>,{}]}</pre><p>To subscribe to logs for a specific address and topic: </p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_subscribe"</span>, <span class="hljs-attr">"params"</span>: [<span class="hljs-string">"logs"</span>, {<span class="hljs-attr">"address"</span>: <span class="hljs-string">"0x8320fe7702b96808f7bbc0d4a888ed1468216cfd"</span>, <span class="hljs-attr">"topics"</span>: [<span class="hljs-string">"0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"</span>]}]}</pre><p>Example result:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"id"</span>:<span class="hljs-number">1</span>,<span class="hljs-attr">"result"</span>:<span class="hljs-string">"0x2"</span>}</pre><p>Example notification: </p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"method"</span>:<span class="hljs-string">"eth_subscription"</span>,
|
|
|
<span class="hljs-attr">"params"</span>:{
|
|
|
<span class="hljs-attr">"subscription"</span>:<span class="hljs-string">"0x2"</span>,
|
|
|
<span class="hljs-attr">"result"</span>:{
|
|
|
<span class="hljs-attr">"logIndex"</span>:<span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"removed"</span>:<span class="hljs-literal">false</span>,
|
|
|
<span class="hljs-attr">"blockNumber"</span>:<span class="hljs-string">"0x2174"</span>,
|
|
|
<span class="hljs-attr">"blockHash"</span>:<span class="hljs-string">"0x7bc83837534aa13df55ff7db77784b1d1ba666d4c4bdd223cae9fe09c7c37eba"</span>,
|
|
|
<span class="hljs-attr">"transactionHash"</span>:<span class="hljs-string">"0x942179373e413824c6bc7045e92295aff91b679215446549b4aeb084da46495b"</span>,
|
|
|
<span class="hljs-attr">"transactionIndex"</span>:<span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"address"</span>:<span class="hljs-string">"0x9b8397f1b0fecd3a1a40cdd5e8221fa461898517"</span>,
|
|
|
<span class="hljs-attr">"data"</span>:<span class="hljs-string">"0x"</span>,
|
|
|
<span class="hljs-attr">"topics"</span>:[<span class="hljs-string">"0x199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca072787"</span>,<span class="hljs-string">"0x0000000000000000000000000000000000000000000000000000000000000005"</span>],
|
|
|
},
|
|
|
},
|
|
|
}</pre><h4 id="pending-transactions">Pending Transactions</h4>
|
|
|
<p>Use the <code>newPendingTransactions</code> parameter with <code>eth_subscribe</code> to be notified of pending transactions added to the transaction pool for the node. </p>
|
|
|
<p>The pending transactions subscription returns the transaction hashes of the pending transactions. </p>
|
|
|
<p>If a chain reorganization occurs, transactions are resubmitted to be included in the new canonical chain. This means the subscription can publish notifications for the same pending transaction more than once.</p>
|
|
|
<p>To subscribe to pending transaction notifications:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_subscribe"</span>, <span class="hljs-attr">"params"</span>: [<span class="hljs-string">"newPendingTransactions"</span>]}</pre><p>Example result:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"id"</span>:<span class="hljs-number">1</span>,<span class="hljs-attr">"result"</span>:<span class="hljs-string">"0x1"</span>}</pre><p>Example notification: </p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"method"</span>:<span class="hljs-string">"eth_subscription"</span>,
|
|
|
<span class="hljs-attr">"params"</span>:{
|
|
|
<span class="hljs-attr">"subscription"</span>:<span class="hljs-string">"0x1"</span>,
|
|
|
<span class="hljs-attr">"result"</span>:<span class="hljs-string">"0x5705bc8bf875ff03e98adb98489428835892dc6ba6a6b139fee1becbc26db0b8"</span>
|
|
|
}
|
|
|
}</pre><h4 id="synchronizing">Synchronizing</h4>
|
|
|
<p>Use the <code>syncing</code> parameter with <code>eth_subscribe</code> to be notified about synchronization progress.</p>
|
|
|
<p>The sychronizing subscription returns an object indicating the synchronization progress.</p>
|
|
|
<p>To subscribe to synchronizing notifications:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_subscribe"</span>, <span class="hljs-attr">"params"</span>: [<span class="hljs-string">"syncing"</span>]}</pre><p>Example result:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"id"</span>:<span class="hljs-number">1</span>,<span class="hljs-attr">"result"</span>:<span class="hljs-string">"0x4"</span>}</pre><p>Example notification: </p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"method"</span>:<span class="hljs-string">"eth_subscription"</span>,
|
|
|
<span class="hljs-attr">"params"</span>:{
|
|
|
<span class="hljs-attr">"subscription"</span>:<span class="hljs-string">"0x4"</span>,
|
|
|
<span class="hljs-attr">"result"</span>:{
|
|
|
<span class="hljs-attr">"startingBlock"</span>:<span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"currentBlock"</span>:<span class="hljs-string">"0x3e80"</span>,
|
|
|
<span class="hljs-attr">"highestBlock"</span>:<span class="hljs-string">"0x67b93c"</span>,
|
|
|
}
|
|
|
}
|
|
|
}</pre><h2 id="unsubscribing">Unsubscribing</h2>
|
|
|
<p>Use the <a href="#subscription-id">subscription ID</a> with <code>eth_unsubscribe</code> to cancel a subscription. Only the connection that created a subscription can unsubscribe from it. </p>
|
|
|
<p>To unsubscribe from a subsciption with subscription ID of <code>0x1</code>:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">"method"</span>: <span class="hljs-string">"eth_unsubscribe"</span>, <span class="hljs-attr">"params"</span>: [<span class="hljs-string">"0x1"</span>]}</pre><p><code>eth_unsubscribe</code> returns <code>true</code> if subscription succuessfully unsubscribed; otherwise, an error is returned. </p>
|
|
|
<p>Example result: </p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"id"</span>:<span class="hljs-number">1</span>,<span class="hljs-attr">"result"</span>:<span class="hljs-literal">true</span>}</pre><p class="page" id="Debugging"></p><h1>Debugging Pantheon</h1>
|
|
|
<h1 id="faq">FAQ</h1>
|
|
|
<h3 id="my-command-line-options-are-not-working-as-i-expected-">My command line options are not working as I expected?</h3>
|
|
|
<p>Ensure quotes have not been automatically converted to smart quotes or hyphens combined if copying and pasting. </p>
|
|
|
<h3 id="how-can-i-monitor-node-performance-and-connectivity-">How can I monitor node performance and connectivity?</h3>
|
|
|
<p>Using the <a href="#JSON-RPC-API-Methodsdebug_metrics"><code>debug_metrics</code></a> JSON-RPC API method. </p>
|
|
|
<p class="page" id="Pantheon-CLI-Syntax"></p><h1>Pantheon CLI Reference</h1>
|
|
|
<h2 id="pantheon-command-line-interface-reference">Pantheon Command Line Interface Reference</h2>
|
|
|
<p>This reference describes the syntax of the Pantheon Command Line Interface (CLI) options and subcommands.</p>
|
|
|
<pre class="hljs">pantheon <span class="hljs-string">[OPTIONS]</span> <span class="hljs-string">[COMMAND]</span></pre><p>Runs the Pantheon Ethereum full node client.</p>
|
|
|
<h2 id="options">Options</h2>
|
|
|
<dl>
|
|
|
<dt><code>--banned-nodeids=<bannedNodeId&gt[,<bannedNodeId>...]...</code></dt>
|
|
|
|
|
|
<dd>List of node IDs with which this node will not peer. The node ID is the public key of the node. You can specify the banned node IDs with or without the <code>0x</code> prefix.</dd>
|
|
|
|
|
|
><strong>Note</strong> This option is only available from v0.8.2.
|
|
|
|
|
|
<dt><code>--bootnodes=<enode://id@host:port>[,<enode://id@host:port>...]...</code></dt>
|
|
|
|
|
|
<dd>List of comma-separated enode URLs for P2P discovery bootstrap. </dd>
|
|
|
|
|
|
<dd>When connecting to mainnet and Rinkeby, the default is a predefined list of enode URLs. Specify bootnodes when <a href="https://github.com/PegaSysEng/pantheon/wiki/Starting-Pantheon#run-a-node-on-ropsten-testnet">connecting to Ropsten</a> or a <a href="https://github.com/PegaSysEng/pantheon/wiki/Testing-Developing-Nodes#bootnodes">private network.</a></dd>
|
|
|
<br>
|
|
|
<dt><code>--config=<PATH></code></dt>
|
|
|
<dd>The path to the TOML configuration file. The default is <code>none</code>. The TOML file is composed of key/value pairs. Each key is the same as the corresponding CLI option name without the leading dashes (<code>--</code>). The config option is not used in the config file. Values must be treated according to TOML specifications for string, numbers, arrays and Booleans.
|
|
|
|
|
|
Example:
|
|
|
<code># Valid TOML config file
|
|
|
datadir="~/pantheondata" # Path
|
|
|
|
|
|
# Network
|
|
|
bootnodes=["enode://001@123:4567", "enode://002@123:4567", "enode://003@123:4567"]
|
|
|
p2p-listen="1.2.3.4:1234" # IP:port
|
|
|
max-peers=42
|
|
|
rpc-listen="5.6.7.8:5678" # IP:port
|
|
|
ws-listen="9.10.11.12:9101" # IP:port
|
|
|
|
|
|
# Chain
|
|
|
genesis="~/genesis.json" # Path to the custom genesis file
|
|
|
|
|
|
# Mining
|
|
|
miner-enabled=true
|
|
|
miner-coinbase="0x0000000000000000000000000000000000000002"</code>
|
|
|
</dd>
|
|
|
<br>
|
|
|
|
|
|
> <strong>Note:</strong> This option is not used when running Pantheon from the <a href="#Run-Docker-Imagecustom-configuration-file">Docker image</a>.
|
|
|
<dt><code>--datadir=<PATH></code></dt>
|
|
|
<dd>The path to the Pantheon data directory. The default location is the <code>/build/distributions/pantheon-<version></code> directory in the Pantheon installation directory.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> This option is not used when running Pantheon from the <a href="#Run-Docker-Imagepersisting-data">Docker image</a>.
|
|
|
<br>
|
|
|
<dt><code>--dev-mode</code></dt>
|
|
|
<dd>
|
|
|
Set this option to <code>true</code> to run in development mode. For example, specify this option to perform CPU mining more easily in a private test network. In development mode, a custom genesis configuration specifies the chain ID. When using this option, also set the <code>--network-id</code> option to the network you use for development. Default is <code>false</code>.
|
|
|
</dd>
|
|
|
|
|
|
> <strong>Note:</strong> The <code>--dev-mode</code> option overrides the <code>--genesis</code> option. If both are specified, the development mode configuration is used.<br><br>
|
|
|
<dt><code>--genesis=<PATH></code></dt>
|
|
|
<dd>The path to the genesis file. The default is the embedded genesis file for the Ethereum mainnet. When using this option, it is recommended to also set the <code>--network-id</code> option.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> This option is not used when running Pantheon from the <a href="#Run-Docker-Imagecustom-genesis-file">Docker image</a>.
|
|
|
<br>
|
|
|
|
|
|
> <strong>Note:</strong> The <code>--genesis</code> option is overridden by the <code>--dev-mode</code> option. If both are specified, the specified genesis file is ignored and the development mode configuration used.
|
|
|
<br>
|
|
|
|
|
|
<dt><code>--goerli</code></dt>
|
|
|
<dd>Uses the Goerli test network. Default is <code>false</code>.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> This option is only available from v0.8.3.<br><br>
|
|
|
|
|
|
<dt><code>--host-whitelist=<hostname></code></dt>
|
|
|
|
|
|
<dd>Comma-separated list of hostnames to allow access to the HTTP JSON-RPC API. Default is <code>localhost</code>. </dd>
|
|
|
|
|
|
To allow all hostnames, use <code>*</code> or <code>all</code>. We don't recommend this for production code.
|
|
|
|
|
|
> <strong>Note:</strong> This option is only available from v0.8.3. Earlier versions allow access by all hostnames.
|
|
|
<br>
|
|
|
<dt><code>--max-peers=<INTEGER></code></dt>
|
|
|
<dd>Specifies the maximum P2P peer connections that can be established. The default is 25.</dd>
|
|
|
<br>
|
|
|
<dt><code>--max-trailing-peers=<INTEGER></code></dt>
|
|
|
<dd>Specifies the maximum P2P peer connections for peers that are trailing behind the local chain head. The default is unlimited but the number of trailing peers cannot exceed the value specified by <code>--max-peers</code>.</dd>
|
|
|
<br>
|
|
|
<dt><code>--miner-coinbase=<Ethereum account address></code></dt>
|
|
|
<dd>Account to which mining rewards are paid. You must specify a valid coinbase when you enable mining using the <code>--miner-enabled</code> option or the <code>miner_start</code> JSON RPC-API method.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> This option is ignored in networks using the <a href="https://github.com/PegaSysEng/pantheon/wiki/Proof-of-Authority">Clique Proof-of-Authority (PoA) consensus protocol</a>.
|
|
|
<br>
|
|
|
|
|
|
<dt><code>--miner-enabled</code></dt>
|
|
|
<dd>Enables mining when the node is starts. Default is <code>false</code>.
|
|
|
|
|
|
</dd>
|
|
|
<br>
|
|
|
<dt><code>--miner-extraData=<Extra data></code></dt>
|
|
|
<dd>A hex string representing the 32 bytes to be included in the extra data field of a mined block. The default is 0x.</dd>
|
|
|
<br>
|
|
|
<dt><code>--miner-minTransactionGasPriceWei=<minTransactionGasPrice></code></dt>
|
|
|
<dd>The minimum price that a transaction offers for it to be included in a mined block The default is 1000.</dd>
|
|
|
|
|
|
<br>
|
|
|
<dt><code>--network-id=<INTEGER></code></dt>
|
|
|
<dd>P2P network identifier. The default is set to mainnet with value <code>1</code>.</dd>
|
|
|
|
|
|
<br>
|
|
|
<dt><code>--no-discovery</code></dt>
|
|
|
<dd>Disables P2P peer discovery. The default is <code>false</code>.</dd>
|
|
|
|
|
|
<br>
|
|
|
<dt><code>--node-private-key=<PATH></code></dt>
|
|
|
<dd><code><PATH></code> is the path of the private key file of the node. The default is the key file in the data directory. If no key file exists, a key file containing the generated private key is created; otherwise, the existing key file specifies the node private key.
|
|
|
</dd>
|
|
|
|
|
|
> <strong>Note</strong> The private key is not encrypted.
|
|
|
|
|
|
><strong>Note</strong> This option is only available from v0.8.2.
|
|
|
|
|
|
<br>
|
|
|
<dt><code>--nodes-whitelist[=<enode://id@host:port>[,<enode://id@host:port>...]...]</code></dt>
|
|
|
<dd>Comma-separated enode URLs for permissioned networks. If you specify an empty list or <code>--nodes-whitelist</code> without a list, your node will not connect to any other nodes.
|
|
|
</dd>
|
|
|
|
|
|
><strong>Note</strong> This option is only available from v0.8.3.
|
|
|
|
|
|
> <strong>Note:</strong> Permissioning is not currently supported. Support for permissioning is in active development.
|
|
|
|
|
|
<br>
|
|
|
<dt><code>--ottoman</code></dt>
|
|
|
<dd>Synchronize against the Ottoman test network. This is only useful if you are using an IBFT genesis file. The default is <code>false</code>.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> IBFT is not currently supported. Support for IBFT is in active development.
|
|
|
<br>
|
|
|
<dt><code>--p2p-listen=<HOST:PORT></code></dt>
|
|
|
<dd>Specifies the host and port on which P2P peer discovery listens. The default is 127.0.0.1:30303.</dd>
|
|
|
|
|
|
> <strong>Note</strong> This option is not used when running Pantheon from the <a href="#Run-Docker-Imageexposing-ports">Docker image</a>.
|
|
|
<br>
|
|
|
<dt><code>--rinkeby</code></dt>
|
|
|
<dd>Uses the Rinkeby test network. Default is <code>false</code>.</dd>
|
|
|
|
|
|
<br>
|
|
|
<br>
|
|
|
<dt><code>--ropsten</code></dt>
|
|
|
<dd>Uses the Ropsten test network. Default is <code>false</code>.</dd>
|
|
|
|
|
|
> <strong>Note</strong> This option is only available only from v0.8.2. For v0.8.1, refer <a href="#Starting-Pantheonrun-a-node-on-ropsten-testnet">here</a>.
|
|
|
<br>
|
|
|
<dt><code>--rpc-enabled</code></dt>
|
|
|
<dd>Set to <code>true</code> to enable the JSON-RPC service (RPC over HTTP). The default is <code>false</code>.</dd>
|
|
|
<br>
|
|
|
<dt><code>--rpc-listen=<HOST:PORT></code></dt>
|
|
|
<dd>Specifies the host and port on which JSON-RPC listens. The default is 127.0.0.1:8545.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> This option is not used when running Pantheon from the <a href="#Run-Docker-Imageexposing-ports">Docker image</a>.
|
|
|
<br>
|
|
|
<dt><code>--rpc-api=<api name>[,<api name>...]...</code></dt>
|
|
|
<dd>Comma-separated APIs to enable on the JSON-RPC channel. When you use this option, the <code>--rpc-enabled</code> option must also be specified. The available API options are: <code>ETH</code>, <code>NET</code>, <code>WEB3</code>, <code>CLIQUE</code>, <code>IBFT</code>, <code>DEBUG</code>, and <code>MINER</code>. The default is: <code>ETH</code>, <code>NET</code>, <code>WEB3</code>, <code>CLIQUE</code>, <code>IBFT</code>.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> IBFT is not currently supported. Support for IBFT is in active development.
|
|
|
<br>
|
|
|
<dt><code>--rpc-cors-origins=<rpcCorsAllowedOrigins></code></dt>
|
|
|
<dd>
|
|
|
Specifies domain URLs for CORS validation. Domain URLs must be enclosed in double quotes and comma-separated.
|
|
|
|
|
|
Listed domains will be allowed access to node data (whitelisted). If your client interacts with Pantheon using a browser app (such as Remix using a direct connection or a block explorer), you must whitelist the client domains. For example, the following allows Remix to interact with your Pantheon node without using MetaMask:
|
|
|
|
|
|
<code>--rpc-cors-origins "http://remix.ethereum.org"</code>
|
|
|
|
|
|
<strong>Note:</strong> MetaMask runs as native code so does not require CORS validation. If Remix is connecting to the node through MetaMask, it also does not require CORS validation.
|
|
|
|
|
|
The default value is <code>"none"</code>. If you don't whitelist any domains, you won't be able to use webapps to interact with your Pantheon node.
|
|
|
|
|
|
You can whitelist one or more domains with a comma-separated list. For example:
|
|
|
|
|
|
<code>--rpc-cors-origins "http://foo.com, https://bar.io"</code>
|
|
|
|
|
|
For development purposes, you can use <code>"all"</code> to accept requests from any domain, but we don't recommend this for production code.
|
|
|
</dd>
|
|
|
|
|
|
|
|
|
<br>
|
|
|
<dt><code>--ws-enabled</code></dt>
|
|
|
<dd>Set to <code>true</code> to enable the WS-RPC (WebSockets) service. The default is <code>false</code>.</dd>
|
|
|
<br>
|
|
|
<dt><code>--ws-api=<api name>[,<api name>...]...
|
|
|
</code></dt>
|
|
|
<dd>Comma-separated APIs to enable on Websockets channel. When you use this option, the <code>--ws-enabled</code> option must also be specified. The available API options are: <code>ETH</code>, <code>NET</code>, <code>WEB3</code>, <code>CLIQUE</code>, <code>IBFT</code>, <code>DEBUG</code>, and <code>MINER</code>. The default is: <code>ETH</code>, <code>NET</code>, <code>WEB3</code>, <code>CLIQUE</code>, <code>IBFT</code>.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> IBFT is not currently supported. Support for IBFT is in active development.
|
|
|
<br>
|
|
|
<dt><code> --ws-listen=<HOST:PORT></code></dt>
|
|
|
<dd>Host and port for WS-RPC (Websocket) to listen on. The default is 127.0.0.1:8546.</dd>
|
|
|
|
|
|
> <strong>Note:</strong> This option is not used when running Pantheon from the <a href="#Run-Docker-Imageexposing-ports">Docker image</a>.
|
|
|
<br>
|
|
|
<dt><code>-h, --help</code></dt>
|
|
|
<dd>Show the help message and exit.</dd>
|
|
|
<br>
|
|
|
<dt><code>-l, --logging=<LEVEL></code></dt>
|
|
|
<dd>Sets the logging verbosity. Log levels are <code>OFF</code>, <code>FATAL</code>, <code>WARN</code>, <code>INFO</code>, <code>DEBUG</code>, <code>TRACE</code>, <code>ALL</code>. Default is <code>INFO</code>.</dd>
|
|
|
<br>
|
|
|
<dt><code>-V, --version</code></dt>
|
|
|
<dd>Print version information and exit.</dd>
|
|
|
</dl>
|
|
|
|
|
|
<hr>
|
|
|
<h2 id="commands">Commands</h2>
|
|
|
<p>Pantheon subcommands are: </p>
|
|
|
<ul>
|
|
|
<li><p><code>import</code></p>
|
|
|
<p> Imports blocks from the specified file into the blockchain database:</p>
|
|
|
<p> <code>pantheon import <block-file></code></p>
|
|
|
</li>
|
|
|
<li><p><code>export-pub-key</code></p>
|
|
|
<p> Exports node public key to the specified file. </p>
|
|
|
<p> <code>pantheon export-pub-key <key-file></code></p>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<p><br></p>
|
|
|
<p>### </p>
|
|
|
<hr>
|
|
|
<p>Pantheon is licensed under Apache License 2.0.</p>
|
|
|
<p class="page" id="JSON-RPC-API"></p><h1>Pantheon JSON-RPC API</h1>
|
|
|
<h2 id="pantheon-json-rpc-api">Pantheon JSON-RPC API</h2>
|
|
|
<p>The Pantheon JSON-RPC API uses the <a href="http://json.org/">JSON</a> (RFC 4627) data format, which can represent objects and data fields as collections of name/value pairs, in a relatively readable, hierarchical form. Values have specific data types such as QUANTITIES (decimal integers, hexadecimal numbers, strings) and UNFORMATTED DATA (byte arrays, account addresses, hashes, and bytecode arrays).</p>
|
|
|
<p>RPC is the remote procedure call protocol (RFC 1831), which is stateless and transport agnostic in that the concepts can be used within the same process, over sockets, over HTTP, or in many various message passing environments.</p>
|
|
|
<ul>
|
|
|
<li><a href="#Using-JSON-RPC-API">Using the Pantheon JSON-RPC API</a></li>
|
|
|
<li><a href="#JSON-RPC-API-Methods">JSON-RPC API Methods</a></li>
|
|
|
<li><a href="#Objects">JSON-RPC API Objects</a></li>
|
|
|
</ul>
|
|
|
<p class="page" id="Using-JSON-RPC-API"></p><h1>Using the JSON-RPC API</h1>
|
|
|
<h2 id="contents">Contents</h2>
|
|
|
<ul>
|
|
|
<li><a href="#postman">Postman</a></li>
|
|
|
<li><a href="#endpoint-address-and-port">Endpoint Address and Port</a></li>
|
|
|
<li><a href="#http-and-websocket-requests">HTTP and WebSocket Requests</a></li>
|
|
|
<li><a href="#block-parameter">Block Parameter</a></li>
|
|
|
<li><a href="#not-supported-by-pantheon">Not Supported by Pantheon</a></li>
|
|
|
</ul>
|
|
|
<h2 id="breaking-change-in-v0-8-3">Breaking Change in v0.8.3</h2>
|
|
|
<p>From v0.8.3, incoming HTTP requests are only accepted from hostnames specified using the <code>--host-whitelist</code> option. If not specified, the default value for <code>--host-whitelist</code> is <code>localhost</code>. </p>
|
|
|
<p>If using the URL <code>http://127.0.0.1</code> to make JSON-RPC calls, use <code>--host-whitelist</code> to specify the hostname <code>127.0.0.1</code> or update the hostname to <code>localhost</code>. </p>
|
|
|
<p>If your application publishes RPC ports, specify the hostnames when starting Pantheon. For example: </p>
|
|
|
<pre class="hljs">pantheon --host-whitelist=foo.com</pre><p>Specify <code>*</code> or <code>all</code> for <code>--host-whitelist</code> to effectively disable host protection and replicate pre-v0.8.3 behavior. This is not recommended for production code. </p>
|
|
|
<h2 id="using-the-pantheon-json-rpc-api">Using the Pantheon JSON-RPC API</h2>
|
|
|
<h3 id="postman">Postman</h3>
|
|
|
<p>Use the button to import our collection of examples to <a href="https://www.getpostman.com/">Postman</a>. </p>
|
|
|
<p><a href="https://app.getpostman.com/run-collection/cffe1bc034b3ab139fa7"><img src="https://run.pstmn.io/button.svg" /></a></p>
|
|
|
<h3 id="endpoint-address-and-port">Endpoint Address and Port</h3>
|
|
|
<p>In this reference, the placeholder
|
|
|
<code><JSON-RPC-http-endpoint:port></code> and <code><JSON-RPC-ws-endpoint:port></code> means an endpoint (IP address and port) of the JSON-RPC service of a Pantheon node respectively for http endpoint and for WebSocket endpoint.
|
|
|
To activate JSON-RPC using http or WebSocket, see <a href="https://github.com/PegaSysEng/pantheon/wiki/Pantheon-CLI-Syntax">--rpc-listen and --ws-listen options in the CLI documentation</a>.</p>
|
|
|
<p>The transport attributes are:</p>
|
|
|
<ul>
|
|
|
<li>HTTP: Listens by default on port 8545</li>
|
|
|
<li>WebSockets: Listens by default on port 8546</li>
|
|
|
</ul>
|
|
|
<h3 id="http-and-websocket-requests">HTTP and WebSocket Requests</h3>
|
|
|
<h4 id="http">HTTP</h4>
|
|
|
<p>To make RPC over HTTP requests, you can use the <code>curl</code> tool, available in many systems using <a href="https://curl.haxx.se/download.html">curl source code or pre-compiled packages</a>.</p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":53}' <JSON-RPC-http-endpoint:port></pre><h4 id="websockets">WebSockets</h4>
|
|
|
<p>To make requests over WebSockets, this reference uses <a href="https://github.com/websockets/wscat">wscat</a>, a Node.js based command-line tool.</p>
|
|
|
<p>First connect to the WebSockets server using <code>wscat</code> (you only need to connect once per session):</p>
|
|
|
<pre class="hljs">wscat -c ws://<JSON-RPC-ws-endpoint:port></pre><p>After the connection is established, the terminal will display a '>' prompt. Send individual requests as a JSON data package at each prompt:</p>
|
|
|
<pre class="hljs">{<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,<span class="hljs-attr">"method"</span>:<span class="hljs-string">"web3_clientVersion"</span>,<span class="hljs-attr">"params"</span>:[],<span class="hljs-attr">"id"</span>:<span class="hljs-number">53</span>}</pre><p>The <a href="#RPC-PubSub">RPC Pub/Sub methods</a> can also be used over WebSockets.</p>
|
|
|
<h3 id="block-parameter">Block Parameter</h3>
|
|
|
<p>When you make requests that might have different results depending on the block accessed, the block parameter specifies the block. Several methods, such as <a href="#JSON-RPC-API-Methodseth_gettransactionbyblocknumberandindex">eth_getTransactionByBlockNumberAndIndex</a>, have a block parameter.</p>
|
|
|
<p>The block parameter can have the following values:</p>
|
|
|
<ul>
|
|
|
<li><code>blockNumber</code> : <code>quantity</code> - Block number. Can be specified in hexadecimal or decimal. 0 represents the genesis block.</li>
|
|
|
<li><code>earliest</code> : <code>tag</code> - Earliest (genesis) block. </li>
|
|
|
<li><code>latest</code> : <code>tag</code> - Last block mined.</li>
|
|
|
<li><code>pending</code> : <code>tag</code> - Last block mined plus pending transactions. Use only with <a href="#JSON-RPC-API-Methodseth_gettransactioncount">eth_getTransactionCount</a>. </li>
|
|
|
</ul>
|
|
|
<h2 id="not-supported-by-pantheon">Not Supported by Pantheon</h2>
|
|
|
<h3 id="account-management">Account Management</h3>
|
|
|
<p>Account management relies on private key management in the client which is not implemented by Pantheon. </p>
|
|
|
<p>Use <a href="#JSON-RPC-API-Methodseth_sendrawtransaction"><code>eth_sendRawTransaction</code></a> to send signed transactions; <code>eth_sendTransaction</code> is not implemented. </p>
|
|
|
<p>Use third-party wallets for <a href="#Account-Management">account management</a>. </p>
|
|
|
<h3 id="protocols">Protocols</h3>
|
|
|
<p>Pantheon does not implement the Whisper and Swarm protocols. </p>
|
|
|
<p class="page" id="JSON-RPC-API-Methods"></p><h1>JSON-RPC API Methods</h1>
|
|
|
<h2 id="breaking-change-in-v0-8-3">Breaking Change in v0.8.3</h2>
|
|
|
<p>From v0.8.3, incoming HTTP requests are only accepted from hostnames specified using the <a href="#Using-JSON-RPC-APIbreaking-change-in-v083"><code>--host-whitelist</code> option</a>. </p>
|
|
|
<h2 id="json-rpc-methods">JSON-RPC Methods</h2>
|
|
|
<p>The following lists the Pantheon JSON-RPC API commands:</p>
|
|
|
<h4 id="admin-methods">admin Methods</h4>
|
|
|
<ul>
|
|
|
<li><a href="#admin_peers">admin_peers</a></li>
|
|
|
</ul>
|
|
|
<h4 id="web3-methods">web3 Methods</h4>
|
|
|
<ul>
|
|
|
<li><a href="#web3_clientversion">web3_clientVersion</a></li>
|
|
|
<li><a href="#web3_sha3">web3_sha3</a></li>
|
|
|
</ul>
|
|
|
<h4 id="net-methods">net Methods</h4>
|
|
|
<ul>
|
|
|
<li><a href="#net_version">net_version</a></li>
|
|
|
<li><a href="#net_listening">net_listening</a></li>
|
|
|
<li><a href="#net_peercount">net_peerCount</a></li>
|
|
|
</ul>
|
|
|
<h4 id="eth-methods">eth Methods</h4>
|
|
|
<ul>
|
|
|
<li><a href="#eth_syncing">eth_syncing</a></li>
|
|
|
<li><a href="#eth_chainId">eth_chainId</a></li>
|
|
|
<li><a href="#eth_coinbase">eth_coinbase</a></li>
|
|
|
<li><a href="#eth_mining">eth_mining</a></li>
|
|
|
<li><a href="#eth_gasprice">eth_gasPrice</a></li>
|
|
|
<li><a href="#eth_accounts">eth_accounts</a></li>
|
|
|
<li><a href="#eth_blocknumber">eth_blockNumber</a></li>
|
|
|
<li><a href="#eth_getbalance">eth_getBalance</a></li>
|
|
|
<li><a href="#eth_getstorageat">eth_getStorageAt</a></li>
|
|
|
<li><a href="#eth_gettransactioncount">eth_getTransactionCount</a></li>
|
|
|
<li><a href="#eth_getblocktransactioncountbyhash">eth_getBlockTransactionCountByHash</a></li>
|
|
|
<li><a href="#eth_getblocktransactioncountbynumber">eth_getBlockTransactionCountByNumber</a></li>
|
|
|
<li><a href="#eth_getunclecountbyblockhash">eth_getUncleCountByBlockHash</a></li>
|
|
|
<li><a href="#eth_getunclecountbyblocknumber">eth_getUncleCountByBlockNumber</a></li>
|
|
|
<li><a href="#eth_getcode">eth_getCode</a></li>
|
|
|
<li><a href="#eth_sendrawtransaction">eth_sendRawTransaction</a></li>
|
|
|
<li><a href="#eth_call">eth_call</a></li>
|
|
|
<li><a href="#eth_estimategas">eth_estimateGas</a></li>
|
|
|
<li><a href="#eth_getblockbyhash">eth_getBlockByHash</a></li>
|
|
|
<li><a href="#eth_getblockbynumber">eth_getBlockByNumber</a></li>
|
|
|
<li><a href="#eth_gettransactionbyhash">eth_getTransactionByHash</a></li>
|
|
|
<li><a href="#eth_gettransactionbyblockhashandindex">eth_getTransactionByBlockHashAndIndex</a></li>
|
|
|
<li><a href="#eth_gettransactionbyblocknumberandindex">eth_getTransactionByBlockNumberAndIndex</a></li>
|
|
|
<li><a href="#eth_gettransactionreceipt">eth_getTransactionReceipt</a></li>
|
|
|
<li><a href="#eth_newfilter">eth_newFilter</a></li>
|
|
|
<li><a href="#eth_newblockfilter">eth_newBlockFilter</a></li>
|
|
|
<li><a href="#eth_newpendingtransactionfilter">eth_newPendingTransactionFilter</a></li>
|
|
|
<li><a href="#eth_uninstallfilter">eth_uninstallFilter</a></li>
|
|
|
<li><a href="#eth_getfilterchanges">eth_getFilterChanges</a></li>
|
|
|
<li><a href="#eth_getfilterlogs">eth_getFilterLogs</a></li>
|
|
|
<li><a href="#eth_getlogs">eth_getLogs</a></li>
|
|
|
<li><a href="#eth_getwork">eth_getWork</a></li>
|
|
|
</ul>
|
|
|
<h3 id="debug-methods">debug Methods</h3>
|
|
|
<ul>
|
|
|
<li><a href="#debug_metrics">debug_metrics</a></li>
|
|
|
<li><a href="#debug_tracetransaction">debug_traceTransaction</a></li>
|
|
|
</ul>
|
|
|
<h3 id="miner-methods">miner Methods</h3>
|
|
|
<ul>
|
|
|
<li><a href="#miner_start">miner_start</a></li>
|
|
|
<li><a href="#miner_stop">miner_stop</a></li>
|
|
|
</ul>
|
|
|
<h3 id="clique-methods">clique Methods</h3>
|
|
|
<ul>
|
|
|
<li><a href="#clique_discard">clique_discard</a></li>
|
|
|
<li><a href="#clique_getsigners">clique_getSigners</a></li>
|
|
|
<li><a href="#clique_getsignersathash">clique_getSignersAtHash</a></li>
|
|
|
<li><a href="#clique_propose">clique_propose</a></li>
|
|
|
<li><a href="#clique_proposals">clique_proposals</a></li>
|
|
|
</ul>
|
|
|
<h4 id="ibft-methods">ibft Methods</h4>
|
|
|
<p>IBFT is not currently supported. Support for IBFT is in active development. </p>
|
|
|
<hr>
|
|
|
<h2 id="json-rpc-api-reference">JSON-RPC API Reference</h2>
|
|
|
<hr>
|
|
|
<h4 id="admin_peers">admin_peers</h4>
|
|
|
<p>Returns networking information about connected nodes. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>array</em> of <em>objects</em> - Object returned for each remote node. </p>
|
|
|
<p>Properties of the remote node object are: </p>
|
|
|
<ul>
|
|
|
<li><code>version</code> - P2P protocol version</li>
|
|
|
<li><code>name</code> - Client name</li>
|
|
|
<li><code>caps</code> - P2P message capabilities </li>
|
|
|
<li><code>network</code> - Addresses of local node and remote node</li>
|
|
|
<li><code>port</code> - Port on remote node on which P2P peer discovery is listening</li>
|
|
|
<li><code>id</code> - Node public key. Excluding the <code>0x</code> prefix, the node public key is the ID in the enode URL <code>enode://<id ex 0x>@<host:port></code>. </li>
|
|
|
</ul>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"admin_peers","params":[],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : [
|
|
|
{
|
|
|
<span class="hljs-attr">"version"</span>: <span class="hljs-string">"0x5"</span>,
|
|
|
<span class="hljs-attr">"name"</span>: <span class="hljs-string">"Parity-Ethereum/v2.3.0-nightly-1c2e121-20181116/x86_64-linux-gnu/rustc1.30.0"</span>,
|
|
|
<span class="hljs-attr">"caps"</span>: [
|
|
|
<span class="hljs-string">"eth/62"</span>,
|
|
|
<span class="hljs-string">"eth/63"</span>,
|
|
|
<span class="hljs-string">"par/1"</span>,
|
|
|
<span class="hljs-string">"par/2"</span>,
|
|
|
<span class="hljs-string">"par/3"</span>,
|
|
|
<span class="hljs-string">"pip/1"</span>
|
|
|
],
|
|
|
<span class="hljs-attr">"network"</span>: {
|
|
|
<span class="hljs-attr">"localAddress"</span>: <span class="hljs-string">"192.168.1.229:50115"</span>,
|
|
|
<span class="hljs-attr">"remoteAddress"</span>: <span class="hljs-string">"168.61.153.255:40303"</span>
|
|
|
},
|
|
|
<span class="hljs-attr">"port"</span>: <span class="hljs-string">"0x9d6f"</span>,
|
|
|
<span class="hljs-attr">"id"</span>: <span class="hljs-string">"0xea26ccaf0867771ba1fec32b3589c0169910cb4917017dba940efbef1d2515ce864f93a9abc846696ebad40c81de7c74d7b2b46794a71de8f95a0d019f494ff3"</span>
|
|
|
}
|
|
|
]
|
|
|
}</pre><hr>
|
|
|
<h4 id="web3_clientversion">web3_clientVersion</h4>
|
|
|
<p>Returns the current client version.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>string</em> - Current client version.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"pantheon/1.0.0"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="web3_sha3">web3_sha3</h4>
|
|
|
<p>Returns a <a href="https://en.wikipedia.org/wiki/SHA-3">SHA3</a> hash of the specified data. The result value is a <a href="https://keccak.team/keccak.html">Keccak-256</a> hash, not the standardized SHA3-256.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - Data to convert to a SHA3 hash.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> (<em>DATA</em>) - SHA3 result of the input data.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c00"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x5e39a0a66544c0668bde22d61c47a8710000ece931f13b84d3b2feb44ec96d3f"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="net_version">net_version</h4>
|
|
|
<p>Returns the current chain ID.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>string</em> - Current chain ID.</p>
|
|
|
<ul>
|
|
|
<li><code>1</code> - Ethereum Mainnet</li>
|
|
|
<li><code>2</code> - Morden Testnet (deprecated)</li>
|
|
|
<li><code>3</code> - Ropsten Testnet</li>
|
|
|
<li><code>4</code> - Rinkeby Testnet</li>
|
|
|
<li><code>42</code> - Kovan Testnet</li>
|
|
|
</ul>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<p>Mainnet:</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">51</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"1"</span>
|
|
|
}</pre><p>Ropsten:</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"3"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="net_listening">net_listening</h4>
|
|
|
<p>Indicates whether the client is actively listening for network connections.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> (<em>BOOLEAN</em>) - <code>true</code> if the client is actively listening for network connections; otherwise <code>false</code>.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-literal">true</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="net_peercount">net_peerCount</h4>
|
|
|
<p>Returns the number of peers currently connected to the client.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>integer</em> - Number of connected peers in hexadecimal.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x5"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_syncing">eth_syncing</h4>
|
|
|
<p>Returns an object with data about the synchronization status, or <code>false</code> if not synchronizing.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>Object|Boolean</em> - Object with synchronization status data or <code>false</code>, when not synchronizing:</p>
|
|
|
<ul>
|
|
|
<li><p><code>startingBlock</code> : <em>quantity</em> - Index of the highest block on the blockchain when the network synchronization starts.</p>
|
|
|
<p>If you start with an empty blockchain, the starting block is the beginning of the blockchain (<code>startingBlock</code> = 0).</p>
|
|
|
<p>If you import a block file using <code>pantheon import <block-file></code>, the synchronization starts at the head of the blockchain, and the starting block is the next block synchronized. For example, if you imported 1000 blocks, the import would include blocks 0 to 999, so in that case <code>startingBlock</code> = 1000.</p>
|
|
|
</li>
|
|
|
<li><p><code>currentBlock</code> : <em>quantity</em> - Index of the latest block (also known as the best block) for the current node. This is the same index that <a href="#eth_blocknumber">eth_blockNumber</a> returns.</p>
|
|
|
</li>
|
|
|
<li><p><code>highestBlock</code>: <em>quantity</em> - Index of the highest known block in the peer network (that is, the highest block so far discovered among peer nodes). This is the same value as <code>currentBlock</code> if the current node has no peers.</p>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":51}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">51</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"startingBlock"</span> : <span class="hljs-string">"0x5a0"</span>,
|
|
|
<span class="hljs-attr">"currentBlock"</span> : <span class="hljs-string">"0xad9"</span>,
|
|
|
<span class="hljs-attr">"highestBlock"</span> : <span class="hljs-string">"0xad9"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_chainid">eth_chainId</h4>
|
|
|
<p>Returns the <a href="#NetworkID-And-ChainID">chain ID</a>.</p>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> This method is only available from v0.8.2. </p>
|
|
|
</blockquote>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>quantity</em> - Chain ID in hexadecimal.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":51}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">51</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x7e2"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_coinbase">eth_coinbase</h4>
|
|
|
<p>Returns the client coinbase address. The coinbase address is the account to which mining rewards are paid. </p>
|
|
|
<p>To set a coinbase address, start Pantheon with the <code>--miner-coinbase</code> option set to a valid Ethereum account address. You can get the Ethereum account address from a client such as MetaMask or Etherscan. For example:</p>
|
|
|
<pre class="hljs">bin/pantheon --miner-coinbase=<span class="hljs-string">"0xDD37f65dB31c107F773E82a4F85C693058fEf7a9"</span> --rpc-enabled</pre><h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>data</em> - Coinbase address.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0xdd37f65db31c107f773e82a4f85c693058fef7a9"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_mining">eth_mining</h4>
|
|
|
<p>Indicates whether the client is actively mining new blocks. Mining is paused while the client synchronizes with the network regardless of command settings or methods called. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> (<em>BOOLEAN</em>) - <code>true</code> if the client is actively mining new blocks; otherwise <code>false</code>.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-literal">true</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_gasprice">eth_gasPrice</h4>
|
|
|
<p>Returns the current gas unit price in wei.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>quantity</em> - Current gas unit price in wei as a hexadecimal value.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x3e8"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_accounts">eth_accounts</h4>
|
|
|
<p>Returns a list of account addresses that the client owns.</p>
|
|
|
<p><strong>NOTE:</strong> This method returns an empty object because Pantheon <a href="#Using-JSON-RPC-APIaccount-management-not-supported-by-pantheon">does not support account management</a>.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>Array of data</code> : List of 20-byte account addresses owned by the client.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : [ ]
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_blocknumber">eth_blockNumber</h4>
|
|
|
<p>Returns the index of the current block the client is processing.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Hexadecimal integer representing the 0-based index of the block that the client is currently processing.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":51}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">51</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x2377"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getbalance">eth_getBalance</h4>
|
|
|
<p>Returns the account balance of the specified address.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 20-byte account address from which to retrieve the balance.</p>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Integer value of the current balance in wei.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xdd37f65db31c107f773e82a4f85c693058fef7a9", "latest"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x0"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getstorageat">eth_getStorageAt</h4>
|
|
|
<p>Returns the value of a storage position at a specified address.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - A 20-byte storage address.</p>
|
|
|
<p><code>QUANTITY</code> - Integer index of the storage position.</p>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Objectsblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>DATA</em> - The value at the specified storage position.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<p>Calculating the correct position depends on the storage you want to retrieve.</p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method": "eth_getStorageAt","params": ["0x3B3F3E","0x0","latest"],"id": 53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x0000000000000000000000000000000000000000000000000000000000000000"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_gettransactioncount">eth_getTransactionCount</h4>
|
|
|
<p>Returns the number of transactions sent from a specified address.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 20-byte account address.</p>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Integer representing the number of transactions sent from the specified address.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0xc94770007dda54cF92009BFF0dE90c06F603a09f","latest"],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x1"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getblocktransactioncountbyhash">eth_getBlockTransactionCountByHash</h4>
|
|
|
<p>Returns the number of transactions in the block matching the given block hash.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 32-byte block hash.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Integer representing the number of transactions in the specified block.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-literal">null</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getblocktransactioncountbynumber">eth_getBlockTransactionCountByNumber</h4>
|
|
|
<p>Returns the number of transactions in a block matching the specified block number.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Integer representing the number of transactions in the specified block.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0xe8"],"id":51}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">51</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x8"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getunclecountbyblockhash">eth_getUncleCountByBlockHash</h4>
|
|
|
<p>Returns the number of uncles in a block from a block matching the given block hash.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 32-byte block hash.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Integer representing the number of uncles in the specified block.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0xb903239f8543d04b5dc1ba6579132b143087c68db1b2168786408fcbce568238"],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-literal">null</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getunclecountbyblocknumber">eth_getUncleCountByBlockNumber</h4>
|
|
|
<p>Returns the number of uncles in a block matching the specified block number.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing either the 0-based index of the block within the blockchain, or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Integer representing the number of uncles in the specified block.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x1"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getcode">eth_getCode</h4>
|
|
|
<p>Returns the code of the smart contract at the specified address. Compiled smart contract code is stored as a hexadecimal value. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 20-byte contract address.</p>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>DATA</em> - Code stored at the specified address.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xa50a51c09a5c451c52bb714527e1974b686d8e77", "latest"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span>: <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span>: <span class="hljs-string">"0x60806040526004361060485763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633fa4f2458114604d57806355241077146071575b600080fd5b348015605857600080fd5b50605f6088565b60408051918252519081900360200190f35b348015607c57600080fd5b506086600435608e565b005b60005481565b60008190556040805182815290517f199cd93e851e4c78c437891155e2112093f8f15394aa89dab09e38d6ca0727879181900360200190a1505600a165627a7a723058209d8929142720a69bde2ab3bfa2da6217674b984899b62753979743c0470a2ea70029"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_sendrawtransaction">eth_sendRawTransaction</h4>
|
|
|
<p>Sends a signed transaction. A transaction can send ether, deploy a contract, or interact with a contract. </p>
|
|
|
<p>You can interact with contracts using <a href="#Transactionseth_call-or-eth_sendrawtransaction">eth_sendRawTransaction or eth_call</a>.</p>
|
|
|
<p>To avoid exposing your private key, create signed transactions offline and send the signed transaction data using this method. For information on creating signed transactions and using <code>eth_sendRawTransaction</code>, refer to <a href="#Transactions">Using Pantheon</a>. </p>
|
|
|
<p><strong>Note: Pantheon does not implement <a href="#Using-JSON-RPC-APIaccount-management-not-supported-by-pantheon">eth_sendTransaction</a>.</strong> </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - Hash of the signed raw transaction in hexadecimal format; for example:</p>
|
|
|
<pre class="hljs">params: ["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"]</pre><h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <code>DATA</code> - 32-byte transaction hash, or zero hash if the transaction is not yet available.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"id"</span>:<span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"result"</span>: <span class="hljs-string">"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_call">eth_call</h4>
|
|
|
<p>Invokes a contract function locally and does not change the state of the blockchain. </p>
|
|
|
<p>You can interact with contracts using <a href="#Transactionseth_call-or-eth_sendrawtransaction">eth_sendRawTransaction or eth_call</a>.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><em>OBJECT</em> - <a href="#Objectstransaction-call-object">Transaction call object</a>.</p>
|
|
|
<p><em>QUANTITY|TAG</em> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Objectsblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> (<em>DATA</em>) - Return value of the executed contract.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x69498dd54bd25aa0c886cf1f8b8ae0856d55ff13","value":"0x1"}, "latest"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span>: <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span>: <span class="hljs-string">"0x"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_estimategas">eth_estimateGas</h4>
|
|
|
<p>Generates and returns an estimate of how much gas is necessary to allow the transaction to complete. (Per Etherscan: gas price * gas used.) The transaction is added to the blockchain. The estimate may be significantly more than the amount of gas actually used by the transaction for reasons including EVM mechanics and node performance.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<blockquote>
|
|
|
<p><strong>NOTE:</strong> Parameters are the same as the eth_call parameters, except that all properties are optional. If you do not specify a <code>gas</code> limit, Pantheon uses the gas limit from the pending block as an upper bound. As a result, the returned estimate might not be enough to execute the call or transaction when the amount of gas is higher than the pending block's gas limit.</p>
|
|
|
</blockquote>
|
|
|
<p><em>OBJECT</em> - <a href="#Objectstransaction-call-object">Transaction call object</a>.</p>
|
|
|
<p><em>QUANTITY|TAG</em> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> (<em>QUANTITY</em>) - Amount of gas used.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{"from":"0x687422eea2cb73b5d3e242ba5456b782919afc85","to":"0xdd37f65db31c107f773e82a4f85c693058fef7a9","value":"0x1"}],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<p>The following result yields a gas amount estimate of 21000 wei (0x5208) for the transaction.</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">54</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x5208"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getblockbyhash">eth_getBlockByHash</h4>
|
|
|
<p>Returns information about the block by hash.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 32-byte hash of a block.</p>
|
|
|
<p><code>Boolean</code> - If <code>true</code>, returns the full <a href="#Objectstransaction-object">transaction objects</a>; if <code>false</code>, returns the transaction hashes.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>OBJECT</em> - <a href="#Objectsblock-object">Block object</a> , or <code>null</code> when no block is found. </p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0x16b69965a5949262642cfb5e86368ddbbe57ab9f17d999174a65fd0e66580d8f", false],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"number"</span> : <span class="hljs-string">"0x7"</span>,
|
|
|
<span class="hljs-attr">"hash"</span> : <span class="hljs-string">"0x16b69965a5949262642cfb5e86368ddbbe57ab9f17d999174a65fd0e66580d8f"</span>,
|
|
|
<span class="hljs-attr">"parentHash"</span> : <span class="hljs-string">"0xe9bd4b277983580ef0eabad6011891f8b6aff9381a78bd1c4faca374a48b3e09"</span>,
|
|
|
<span class="hljs-attr">"nonce"</span> : <span class="hljs-string">"0x46acb59e85b5bb6d"</span>,
|
|
|
<span class="hljs-attr">"sha3Uncles"</span> : <span class="hljs-string">"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"</span>,
|
|
|
<span class="hljs-attr">"logsBloom"</span> : <span class="hljs-string">"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"</span>,
|
|
|
<span class="hljs-attr">"transactionsRoot"</span> : <span class="hljs-string">"0x7aa0913c235f272eb6ed6ab74ba5a057e0a62c1c1d1dbccfd971221e6b6e83a3"</span>,
|
|
|
<span class="hljs-attr">"stateRoot"</span> : <span class="hljs-string">"0xfaf6520d6e3d24107a4309855593341ab87a1744dbb6eea4e709b92e9c9107ca"</span>,
|
|
|
<span class="hljs-attr">"receiptsRoot"</span> : <span class="hljs-string">"0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2"</span>,
|
|
|
<span class="hljs-attr">"miner"</span> : <span class="hljs-string">"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"</span>,
|
|
|
<span class="hljs-attr">"difficulty"</span> : <span class="hljs-string">"0x5"</span>,
|
|
|
<span class="hljs-attr">"totalDifficulty"</span> : <span class="hljs-string">"0x10023"</span>,
|
|
|
<span class="hljs-attr">"extraData"</span> : <span class="hljs-string">"0x"</span>,
|
|
|
<span class="hljs-attr">"size"</span> : <span class="hljs-string">"0x270"</span>,
|
|
|
<span class="hljs-attr">"gasLimit"</span> : <span class="hljs-string">"0x1000000"</span>,
|
|
|
<span class="hljs-attr">"gasUsed"</span> : <span class="hljs-string">"0x5208"</span>,
|
|
|
<span class="hljs-attr">"timestamp"</span> : <span class="hljs-string">"0x5bbbe99f"</span>,
|
|
|
<span class="hljs-attr">"uncles"</span> : [ ],
|
|
|
<span class="hljs-attr">"transactions"</span> : [ <span class="hljs-string">"0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e"</span> ]
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getblockbynumber">eth_getBlockByNumber</h4>
|
|
|
<p>Returns information about a block by block number.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<p><code>Boolean</code> - If <code>true</code>, returns the full <a href="#Objectstransaction-object">transaction objects</a>; if <code>false</code>, returns only the hashes of the transactions.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>OBJECT</em> - <a href="#Objectsblock-object">Block object</a> , or <code>null</code> when no block is found. </p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x64", true],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"number"</span> : <span class="hljs-string">"0x64"</span>,
|
|
|
<span class="hljs-attr">"hash"</span> : <span class="hljs-string">"0xdfe2e70d6c116a541101cecbb256d7402d62125f6ddc9b607d49edc989825c64"</span>,
|
|
|
<span class="hljs-attr">"parentHash"</span> : <span class="hljs-string">"0xdb10afd3efa45327eb284c83cc925bd9bd7966aea53067c1eebe0724d124ec1e"</span>,
|
|
|
<span class="hljs-attr">"nonce"</span> : <span class="hljs-string">"0x37129c7f29a9364b"</span>,
|
|
|
<span class="hljs-attr">"sha3Uncles"</span> : <span class="hljs-string">"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"</span>,
|
|
|
<span class="hljs-attr">"logsBloom"</span> : <span class="hljs-string">"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"</span>,
|
|
|
<span class="hljs-attr">"transactionsRoot"</span> : <span class="hljs-string">"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"</span>,
|
|
|
<span class="hljs-attr">"stateRoot"</span> : <span class="hljs-string">"0x90c25f6d7fddeb31a6cc5668a6bba77adbadec705eb7aa5a51265c2d1e3bb7ac"</span>,
|
|
|
<span class="hljs-attr">"receiptsRoot"</span> : <span class="hljs-string">"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"</span>,
|
|
|
<span class="hljs-attr">"miner"</span> : <span class="hljs-string">"0xbb7b8287f3f0a933474a79eae42cbca977791171"</span>,
|
|
|
<span class="hljs-attr">"difficulty"</span> : <span class="hljs-string">"0x42be722b6"</span>,
|
|
|
<span class="hljs-attr">"totalDifficulty"</span> : <span class="hljs-string">"0x19b5afdc486"</span>,
|
|
|
<span class="hljs-attr">"extraData"</span> : <span class="hljs-string">"0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32"</span>,
|
|
|
<span class="hljs-attr">"size"</span> : <span class="hljs-string">"0x21e"</span>,
|
|
|
<span class="hljs-attr">"gasLimit"</span> : <span class="hljs-string">"0x1388"</span>,
|
|
|
<span class="hljs-attr">"gasUsed"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"timestamp"</span> : <span class="hljs-string">"0x55ba43eb"</span>,
|
|
|
<span class="hljs-attr">"uncles"</span> : [ ],
|
|
|
<span class="hljs-attr">"transactions"</span> : [ ]
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_gettransactionbyhash">eth_getTransactionByHash</h4>
|
|
|
<p>Returns transaction information for the specified transaction hash.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 32-byte transaction hash.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p>Object - <a href="#Objectstransaction-object">Transaction object</a>, or <code>null</code> when no transaction is found.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"blockHash"</span> : <span class="hljs-string">"0x510efccf44a192e6e34bcb439a1947e24b86244280762cbb006858c237093fda"</span>,
|
|
|
<span class="hljs-attr">"blockNumber"</span> : <span class="hljs-string">"0x422"</span>,
|
|
|
<span class="hljs-attr">"from"</span> : <span class="hljs-string">"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"</span>,
|
|
|
<span class="hljs-attr">"gas"</span> : <span class="hljs-string">"0x5208"</span>,
|
|
|
<span class="hljs-attr">"gasPrice"</span> : <span class="hljs-string">"0x3b9aca00"</span>,
|
|
|
<span class="hljs-attr">"hash"</span> : <span class="hljs-string">"0xa52be92809541220ee0aaaede6047d9a6c5d0cd96a517c854d944ee70a0ebb44"</span>,
|
|
|
<span class="hljs-attr">"input"</span> : <span class="hljs-string">"0x"</span>,
|
|
|
<span class="hljs-attr">"nonce"</span> : <span class="hljs-string">"0x1"</span>,
|
|
|
<span class="hljs-attr">"to"</span> : <span class="hljs-string">"0x627306090abab3a6e1400e9345bc60c78a8bef57"</span>,
|
|
|
<span class="hljs-attr">"transactionIndex"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"value"</span> : <span class="hljs-string">"0x4e1003b28d9280000"</span>,
|
|
|
<span class="hljs-attr">"v"</span> : <span class="hljs-string">"0xfe7"</span>,
|
|
|
<span class="hljs-attr">"r"</span> : <span class="hljs-string">"0x84caf09aefbd5e539295acc67217563438a4efb224879b6855f56857fa2037d3"</span>,
|
|
|
<span class="hljs-attr">"s"</span> : <span class="hljs-string">"0x5e863be3829812c81439f0ae9d8ecb832b531d651fb234c848d1bf45e62be8b9"</span>
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_gettransactionbyblockhashandindex">eth_getTransactionByBlockHashAndIndex</h4>
|
|
|
<p>Returns transaction information for the specified block hash and transaction index position.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 32-byte hash of a block.</p>
|
|
|
<p><code>QUANTITY</code> - Integer representing the transaction index position.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p>Object - <a href="#Objectstransaction-object">Transaction object</a>, or <code>null</code> when no transaction is found.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<p>This request returns the third transaction in the 82990 block on the Ropsten testnet. You can also view this <a href="https://ropsten.etherscan.io/txs?block=82990">block</a> and <a href="https://ropsten.etherscan.io/tx/0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6">transaction</a> on Etherscan. </p>
|
|
|
<p><strong>Note:</strong> Your node must be synchronized to at least the block containing the transaction for the request to return it. </p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7", "0x2"], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"blockHash"</span> : <span class="hljs-string">"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7"</span>,
|
|
|
<span class="hljs-attr">"blockNumber"</span> : <span class="hljs-string">"0x1442e"</span>,
|
|
|
<span class="hljs-attr">"from"</span> : <span class="hljs-string">"0x70c9217d814985faef62b124420f8dfbddd96433"</span>,
|
|
|
<span class="hljs-attr">"gas"</span> : <span class="hljs-string">"0x3d090"</span>,
|
|
|
<span class="hljs-attr">"gasPrice"</span> : <span class="hljs-string">"0x57148a6be"</span>,
|
|
|
<span class="hljs-attr">"hash"</span> : <span class="hljs-string">"0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6"</span>,
|
|
|
<span class="hljs-attr">"input"</span> : <span class="hljs-string">"0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000"</span>,
|
|
|
<span class="hljs-attr">"nonce"</span> : <span class="hljs-string">"0x2cb2"</span>,
|
|
|
<span class="hljs-attr">"to"</span> : <span class="hljs-string">"0xcfdc98ec7f01dab1b67b36373524ce0208dc3953"</span>,
|
|
|
<span class="hljs-attr">"transactionIndex"</span> : <span class="hljs-string">"0x2"</span>,
|
|
|
<span class="hljs-attr">"value"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"v"</span> : <span class="hljs-string">"0x2a"</span>,
|
|
|
<span class="hljs-attr">"r"</span> : <span class="hljs-string">"0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a"</span>,
|
|
|
<span class="hljs-attr">"s"</span> : <span class="hljs-string">"0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484"</span>
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_gettransactionbyblocknumberandindex">eth_getTransactionByBlockNumberAndIndex</h4>
|
|
|
<p>Returns transaction information for the specified block number and transaction index position.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>QUANTITY|TAG</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>.</p>
|
|
|
<p><code>QUANTITY</code> - The transaction index position.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p>Object - <a href="#Objectstransaction-object">Transaction object</a>, or <code>null</code> when no transaction is found.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<p>This request returns the third transaction in the 82990 block on the Ropsten testnet. You can also view this <a href="https://ropsten.etherscan.io/txs?block=82990">block</a> and <a href="https://ropsten.etherscan.io/tx/0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6">transaction</a> on Etherscan.</p>
|
|
|
<p><strong>Note:</strong> Your node must be synchronized to at least the block containing the transaction for the request to return it.</p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["82990", "0x2"], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"blockHash"</span> : <span class="hljs-string">"0xbf137c3a7a1ebdfac21252765e5d7f40d115c2757e4a4abee929be88c624fdb7"</span>,
|
|
|
<span class="hljs-attr">"blockNumber"</span> : <span class="hljs-string">"0x1442e"</span>,
|
|
|
<span class="hljs-attr">"from"</span> : <span class="hljs-string">"0x70c9217d814985faef62b124420f8dfbddd96433"</span>,
|
|
|
<span class="hljs-attr">"gas"</span> : <span class="hljs-string">"0x3d090"</span>,
|
|
|
<span class="hljs-attr">"gasPrice"</span> : <span class="hljs-string">"0x57148a6be"</span>,
|
|
|
<span class="hljs-attr">"hash"</span> : <span class="hljs-string">"0xfc766a71c406950d4a4955a340a092626c35083c64c7be907060368a5e6811d6"</span>,
|
|
|
<span class="hljs-attr">"input"</span> : <span class="hljs-string">"0x51a34eb8000000000000000000000000000000000000000000000029b9e659e41b780000"</span>,
|
|
|
<span class="hljs-attr">"nonce"</span> : <span class="hljs-string">"0x2cb2"</span>,
|
|
|
<span class="hljs-attr">"to"</span> : <span class="hljs-string">"0xcfdc98ec7f01dab1b67b36373524ce0208dc3953"</span>,
|
|
|
<span class="hljs-attr">"transactionIndex"</span> : <span class="hljs-string">"0x2"</span>,
|
|
|
<span class="hljs-attr">"value"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"v"</span> : <span class="hljs-string">"0x2a"</span>,
|
|
|
<span class="hljs-attr">"r"</span> : <span class="hljs-string">"0xa2d2b1021e1428740a7c67af3c05fe3160481889b25b921108ac0ac2c3d5d40a"</span>,
|
|
|
<span class="hljs-attr">"s"</span> : <span class="hljs-string">"0x63186d2aaefe188748bfb4b46fb9493cbc2b53cf36169e8501a5bc0ed941b484"</span>
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_gettransactionreceipt">eth_getTransactionReceipt</h4>
|
|
|
<p>Returns the receipt of a transaction by transaction hash. Receipts for pending transactions are not available.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>DATA</code> - 32-byte hash of a transaction.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>Object</code> - <a href="#Objectstransaction-receipt-object">Transaction receipt object</a>, or <code>null</code> when no receipt is found.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x504ce587a65bdbdb6414a0c6c16d86a04dd79bfcc4f2950eec9634b30ce5370f"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span>: {
|
|
|
<span class="hljs-attr">"blockHash"</span>: <span class="hljs-string">"0xe7212a92cfb9b06addc80dec2a0dfae9ea94fd344efeb157c41e12994fcad60a"</span>,
|
|
|
<span class="hljs-attr">"blockNumber"</span>: <span class="hljs-string">"0x50"</span>,
|
|
|
<span class="hljs-attr">"contractAddress"</span>: <span class="hljs-literal">null</span>,
|
|
|
<span class="hljs-attr">"cumulativeGasUsed"</span>: <span class="hljs-string">"0x5208"</span>,
|
|
|
<span class="hljs-attr">"from"</span>: <span class="hljs-string">"0x627306090abab3a6e1400e9345bc60c78a8bef57"</span>,
|
|
|
<span class="hljs-attr">"gasUsed"</span>: <span class="hljs-string">"0x5208"</span>,
|
|
|
<span class="hljs-attr">"logs"</span>: [],
|
|
|
<span class="hljs-attr">"logsBloom"</span>: <span class="hljs-string">"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"</span>,
|
|
|
<span class="hljs-attr">"status"</span>: <span class="hljs-string">"0x1"</span>,
|
|
|
<span class="hljs-attr">"to"</span>: <span class="hljs-string">"0xf17f52151ebef6c7334fad080c5704d77216b732"</span>,
|
|
|
<span class="hljs-attr">"transactionHash"</span>: <span class="hljs-string">"0xc00e97af59c6f88de163306935f7682af1a34c67245e414537d02e422815efc3"</span>,
|
|
|
<span class="hljs-attr">"transactionIndex"</span>: <span class="hljs-string">"0x0"</span>
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_newfilter">eth_newFilter</h4>
|
|
|
<p>Creates a topic filter with the specified options to notify (log) when the state changes. To determine whether the state has changed, call <a href="#eth_getfilterchanges">eth_getFilterChanges</a>.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>Object</code> - <a href="#Objectsfilter-options-object">Filter options object</a>. </p>
|
|
|
<p><strong>Note:</strong> Topics are order-dependent. A transaction with a log containing topics <code>[A, B]</code> would be matched with the following topic filters:</p>
|
|
|
<ul>
|
|
|
<li>[] - Match any topic</li>
|
|
|
<li>[A] - Match A in first position (and any topic thereafter)</li>
|
|
|
<li>[null, B] - Match any topic in first position AND B in second position (and any topic thereafter)</li>
|
|
|
<li>[A, B] - Match A in first position AND B in second position (and any topic thereafter)</li>
|
|
|
<li>[[A, B], [A, B]] - Match (A OR B) in first position AND (A OR B) in second position (and any topic thereafter)</li>
|
|
|
</ul>
|
|
|
<p>For example, params could be specified as follows:</p>
|
|
|
<pre class="hljs">params: [{
|
|
|
"fromBlock": "earliest",
|
|
|
"toBlock": "0x4",
|
|
|
"address": "0xc94770007dda54cF92009BFF0dE90c06F603a09f",
|
|
|
"topics": ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", null, ["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc"]]
|
|
|
}]</pre><h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <em>QUANTITY</em> - Filter ID.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":[]}],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x3"</span>
|
|
|
}</pre><p>Invalid params error:</p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"fromBlock": "earliest","toBlock": "latest","address": "0xDD37f65dB31c107F773E82a4F85C693058fEf7a9","topics": []}],"id":53}' 127.0.0.1:8545
|
|
|
|
|
|
{
|
|
|
"jsonrpc" : "2.0",
|
|
|
"id" : 53,
|
|
|
"error" : {
|
|
|
"code" : -32602,
|
|
|
"message" : "Invalid params"
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_newblockfilter">eth_newBlockFilter</h4>
|
|
|
<p>Creates a filter in the node that notifies when a new block arrives. To determine whether the state has changed, call <a href="#eth_getfilterchanges">eth_getFilterChanges</a>.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>QUANTITY</code> - Hexadecimal integer filter ID. Each time you call this method, it creates a new filter, and the index is incremented by 1.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<p>Assuming you have previously called <code>eth_newBlockFilter</code> two times, it will assign a filter ID of 3:</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x3"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_newpendingtransactionfilter">eth_newPendingTransactionFilter</h4>
|
|
|
<p>Creates a filter in the node that notifies when new pending transactions arrive. To check if the state has changed, call <a href="#eth_getfilterchanges">eth_getFilterChanges</a>.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>QUANTITY</code> - Hexadecimal integer filter ID. Each time you call this method, it creates a new filter, and the index is incremented by 1.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<p>Assuming you have previously called <code>eth_newBlockFilter</code> three times, it will assign a filter ID of 4:</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-string">"0x4"</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_uninstallfilter">eth_uninstallFilter</h4>
|
|
|
<p>Uninstalls a filter with the specified ID. This method should always be called when notification is no longer needed. Note that filters time out when they are not requested with <a href="#eth_getfilterchanges">eth_getFilterChanges</a> for a period of time.</p>
|
|
|
<p>This method deletes filters of any type: block filters, pending transaction filters, and state (topic) filters.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>QUANTITY</code> - Hexadecimal integer filter ID specifying the filter to be deleted.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>Boolean</code> - <code>true</code> if the filter was successfully uninstalled; otherwise <code>false</code>.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<p>The following request deletes the block filter with an ID of 0x4:</p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0x4"],"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-literal">true</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getfilterchanges">eth_getFilterChanges</h4>
|
|
|
<p>Polls the specified filter and returns an array of logs that have occurred since the last poll.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>QUANTITY</code> - Hexadecimal integer filter ID.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <code>Array of Object</code> - List of logs, or an empty array if nothing has changed since the last poll.</p>
|
|
|
<ul>
|
|
|
<li><p>For filters created with <code>eth_newBlockFilter</code>, returns 32-byte <em>DATA</em> block hashes; for example <code>["0x3454645634534..."]</code>.</p>
|
|
|
</li>
|
|
|
<li><p>For filters created with <code>eth_newPendingTransactionFilter</code>, returns transaction hashes (32-byte <em>DATA</em>); for example <code>["0x6345343454645..."]</code>.</p>
|
|
|
</li>
|
|
|
<li><p>For filters created with <code>eth_newFilter</code>, returns <a href="#Objectslog-object">log objects</a>. </p>
|
|
|
</li>
|
|
|
</ul>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0xa"]:"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<p>The following response indicates that nothing has changed since the last poll:</p>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">53</span>,
|
|
|
<span class="hljs-attr">"result"</span> : [ ]
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getfilterlogs">eth_getFilterLogs</h4>
|
|
|
<p>Returns an array of logs matching the filter with the specified ID.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>QUANTITY</code> - Integer representing the filter ID.</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p>Same as <a href="#eth_getfilterchanges">eth_getFilterChanges</a>.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<p>The following example requests logs for filter ID 0x16 (22 decimal):</p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x3"]"id":53}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : [ {
|
|
|
<span class="hljs-attr">"logIndex"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"removed"</span> : <span class="hljs-literal">false</span>,
|
|
|
<span class="hljs-attr">"blockNumber"</span> : <span class="hljs-string">"0x14427"</span>,
|
|
|
<span class="hljs-attr">"blockHash"</span> : <span class="hljs-string">"0x677bf4b962464e6dfd548d6a30b6c703dd78c7cc3602825a7013a6e90a001d2a"</span>,
|
|
|
<span class="hljs-attr">"transactionHash"</span> : <span class="hljs-string">"0x7bf9876a9de3c0add38495e21a17b96c81b3f18e0990a4a3aecdf9f47fea0eed"</span>,
|
|
|
<span class="hljs-attr">"transactionIndex"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"address"</span> : <span class="hljs-string">"0xe8fe77d1576d0972d453b49bfaa84d716173d133"</span>,
|
|
|
<span class="hljs-attr">"data"</span> : <span class="hljs-string">"0x0000000000000000000000001046c9bdec0e634fbd7cf91afebd93cc854432b10000000000000000000000002101416eeaf73acb66d124f79efde9631662a83a0000000000000000000000006f72045702a34c473da863945221965c61528bd3"</span>,
|
|
|
<span class="hljs-attr">"topics"</span> : [ <span class="hljs-string">"0xc36800ebd6079fdafc3a7100d0d1172815751804a6d1b7eb365b85f6c9c80e61"</span>, <span class="hljs-string">"0x000000000000000000000000b344324aa2a82a6fda8459e40923e1fd65bfac36"</span> ]
|
|
|
} ]
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getlogs">eth_getLogs</h4>
|
|
|
<p>Returns an array of all logs matching a specified filter object.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>Object</code> - <a href="#Objectsfilter-options-object">Filter options object</a></p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p>Same as <a href="#eth_getfilterchanges">eth_getFilterChanges</a>.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<p>The request above returns the logs for the 82893 block on the Ropsten testnet. You can also view this <a href="https://ropsten.etherscan.io/block/82983">block</a> on Etherscan. </p>
|
|
|
<p><strong>Note:</strong> You must be synchronized to at least the requested block for the request to return the logs.</p>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"blockhash":"0x677bf4b962464e6dfd548d6a30b6c703dd78c7cc3602825a7013a6e90a001d2a"}], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : [ {
|
|
|
<span class="hljs-attr">"logIndex"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"removed"</span> : <span class="hljs-literal">false</span>,
|
|
|
<span class="hljs-attr">"blockNumber"</span> : <span class="hljs-string">"0x14427"</span>,
|
|
|
<span class="hljs-attr">"blockHash"</span> : <span class="hljs-string">"0x677bf4b962464e6dfd548d6a30b6c703dd78c7cc3602825a7013a6e90a001d2a"</span>,
|
|
|
<span class="hljs-attr">"transactionHash"</span> : <span class="hljs-string">"0x7bf9876a9de3c0add38495e21a17b96c81b3f18e0990a4a3aecdf9f47fea0eed"</span>,
|
|
|
<span class="hljs-attr">"transactionIndex"</span> : <span class="hljs-string">"0x0"</span>,
|
|
|
<span class="hljs-attr">"address"</span> : <span class="hljs-string">"0xe8fe77d1576d0972d453b49bfaa84d716173d133"</span>,
|
|
|
<span class="hljs-attr">"data"</span> : <span class="hljs-string">"0x0000000000000000000000001046c9bdec0e634fbd7cf91afebd93cc854432b10000000000000000000000002101416eeaf73acb66d124f79efde9631662a83a0000000000000000000000006f72045702a34c473da863945221965c61528bd3"</span>,
|
|
|
<span class="hljs-attr">"topics"</span> : [ <span class="hljs-string">"0xc36800ebd6079fdafc3a7100d0d1172815751804a6d1b7eb365b85f6c9c80e61"</span>, <span class="hljs-string">"0x000000000000000000000000b344324aa2a82a6fda8459e40923e1fd65bfac36"</span> ]
|
|
|
} ]
|
|
|
}</pre><hr>
|
|
|
<h4 id="eth_getwork">eth_getWork</h4>
|
|
|
<p>Returns the hash of the current block, the seed hash, and the target boundary condition to be met.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <code>Array of DATA</code> with the following fields:</p>
|
|
|
<ul>
|
|
|
<li>DATA, 32 Bytes - Hash of the current block header (pow-hash).</li>
|
|
|
<li>DATA, 32 Bytes - The seed hash used for the DAG.</li>
|
|
|
<li>DATA, 32 Bytes - The target boundary condition to be met; 2^256 / difficulty.</li>
|
|
|
</ul>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getWork","params":[],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"id"</span>:<span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"result"</span>: [
|
|
|
<span class="hljs-string">"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"</span>,
|
|
|
<span class="hljs-string">"0x5EED00000000000000000000000000005EED0000000000000000000000000000"</span>,
|
|
|
<span class="hljs-string">"0xd1ff1c01710000000000000000000000d1ff1c01710000000000000000000000"</span>
|
|
|
]
|
|
|
}</pre><h4 id="clique_discard">clique_discard</h4>
|
|
|
<p>Discards a proposal to add or remove a signer with the specified address. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>data</code> - 20-byte address of proposed signer. </p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result: boolean</code> - <code>true</code> </p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"clique_discard","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73"], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-literal">true</span>
|
|
|
}</pre><h4 id="clique_getsigners">clique_getSigners</h4>
|
|
|
<p>Lists signers for the specified block. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>quantity|tag</code> - Integer representing a block number or one of the string tags <code>latest</code>, <code>earliest</code>, or <code>pending</code>, as described in <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>. </p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result: array of data</code> - List of 20-byte addresses of signers. </p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSigners","params":["latest"], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : [ <span class="hljs-string">"0x42eb768f2244c8811c63729a21a3569731535f06"</span>, <span class="hljs-string">"0x7ffc57839b00206d1ad20c69a1981b489f772031"</span>, <span class="hljs-string">"0xb279182d99e65703f0076e4812653aab85fca0f0"</span> ]
|
|
|
}</pre><h4 id="clique_getsignersathash">clique_getSignersAtHash</h4>
|
|
|
<p>Lists signers for the specified block.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>data</code> - 32-byte block hash. </p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result: array of data</code> - List of 20-byte addresses of signers.</p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"clique_getSignersAtHash","params":["0x98b2ddb5106b03649d2d337d42154702796438b3c74fd25a5782940e84237a48"], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : [ <span class="hljs-string">"0x42eb768f2244c8811c63729a21a3569731535f06"</span>, <span class="hljs-string">"0x7ffc57839b00206d1ad20c69a1981b489f772031"</span>, <span class="hljs-string">"0xb279182d99e65703f0076e4812653aab85fca0f0"</span> ]
|
|
|
}</pre><h4 id="clique_propose">clique_propose</h4>
|
|
|
<p>Proposes adding or removing a signer with the specified address. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>data</code> - 20-byte address.</p>
|
|
|
<p><code>boolean</code> - <code>true</code> to propose adding signer or <code>false</code> to propose removing signer. </p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result: boolean</code> - <code>true</code> </p>
|
|
|
<h6 id="request">Request</h6>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"clique_propose","params":["0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73", true], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : <span class="hljs-literal">true</span>
|
|
|
}</pre><h4 id="clique_proposals">clique_proposals</h4>
|
|
|
<p>Returns current proposals. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code>:<em>object</em> - Map of account addresses to corresponding boolean values indicating the proposal for each account. </p>
|
|
|
<p>If the boolean value is <code>true</code>, the proposal is to add a signer. If <code>false</code>, the proposal is to remove a signer. </p>
|
|
|
<h6 id="request">Request</h6>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"clique_proposals","params":[], "id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span>: {
|
|
|
<span class="hljs-attr">"0x42eb768f2244c8811c63729a21a3569731535f07"</span>: <span class="hljs-literal">false</span>,
|
|
|
<span class="hljs-attr">"0x12eb759f2222d7711c63729a45c3585731521d01"</span>: <span class="hljs-literal">true</span>
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="debug_metrics">debug_metrics</h4>
|
|
|
<blockquote>
|
|
|
<p><strong>Note</strong> This method is only available only from v0.8.3.</p>
|
|
|
</blockquote>
|
|
|
<p>Returns metrics providing information on the internal operation of Pantheon. </p>
|
|
|
<p>The available metrics may change over time. The JVM metrics may vary based on the JVM implementation being used. </p>
|
|
|
<p>The metric types are: </p>
|
|
|
<ul>
|
|
|
<li>Timer</li>
|
|
|
<li>Counter</li>
|
|
|
<li>Gauge</li>
|
|
|
</ul>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code>:<code>object</code></p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"debug_metrics","params":[],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
"jsonrpc": "2.0",
|
|
|
"id": 1,
|
|
|
"result": {
|
|
|
"jvm": {
|
|
|
"memory_bytes_init": {
|
|
|
"heap": 268435456,
|
|
|
"nonheap": 2555904
|
|
|
},
|
|
|
"threads_current": 41,
|
|
|
"memory_bytes_used": {
|
|
|
"heap": 696923976,
|
|
|
"nonheap": 63633456
|
|
|
},
|
|
|
"memory_pool_bytes_used": {
|
|
|
"PS Eden Space": 669119360,
|
|
|
"Code Cache": 19689024,
|
|
|
"Compressed Class Space": 4871144,
|
|
|
"PS Survivor Space": 2716320,
|
|
|
"PS Old Gen": 25088296,
|
|
|
"Metaspace": 39073288
|
|
|
},
|
|
|
...
|
|
|
},
|
|
|
"process": {
|
|
|
"open_fds": 546,
|
|
|
"cpu_seconds_total": 67.148992,
|
|
|
"start_time_seconds": 1543897699.589,
|
|
|
"max_fds": 10240
|
|
|
},
|
|
|
"rpc": {
|
|
|
"request_time": {
|
|
|
"debug_metrics": {
|
|
|
"bucket": {
|
|
|
"+Inf": 2,
|
|
|
"0.01": 1,
|
|
|
"0.075": 2,
|
|
|
"0.75": 2,
|
|
|
"0.005": 1,
|
|
|
"0.025": 2,
|
|
|
"0.1": 2,
|
|
|
"1.0": 2,
|
|
|
"0.05": 2,
|
|
|
"10.0": 2,
|
|
|
"0.25": 2,
|
|
|
"0.5": 2,
|
|
|
"5.0": 2,
|
|
|
"2.5": 2,
|
|
|
"7.5": 2
|
|
|
},
|
|
|
"count": 2,
|
|
|
"sum": 0.015925392
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
"blockchain": {
|
|
|
"difficulty_total": 3533501,
|
|
|
"announcedBlock_ingest": {
|
|
|
"bucket": {
|
|
|
"+Inf": 0,
|
|
|
"0.01": 0,
|
|
|
"0.075": 0,
|
|
|
"0.75": 0,
|
|
|
"0.005": 0,
|
|
|
"0.025": 0,
|
|
|
"0.1": 0,
|
|
|
"1.0": 0,
|
|
|
"0.05": 0,
|
|
|
"10.0": 0,
|
|
|
"0.25": 0,
|
|
|
"0.5": 0,
|
|
|
"5.0": 0,
|
|
|
"2.5": 0,
|
|
|
"7.5": 0
|
|
|
},
|
|
|
"count": 0,
|
|
|
"sum": 0
|
|
|
},
|
|
|
"height": 1908793
|
|
|
},
|
|
|
"peers": {
|
|
|
"disconnected_total": {
|
|
|
"remote": {
|
|
|
"SUBPROTOCOL_TRIGGERED": 5
|
|
|
},
|
|
|
"local": {
|
|
|
"TCP_SUBSYSTEM_ERROR": 1,
|
|
|
"SUBPROTOCOL_TRIGGERED": 2,
|
|
|
"USELESS_PEER": 3
|
|
|
}
|
|
|
},
|
|
|
"peer_count_current": 2,
|
|
|
"connected_total": 10
|
|
|
}
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="debug_tracetransaction">debug_traceTransaction</h4>
|
|
|
<p><a href="https://remix.ethereum.org/">Remix</a> uses <code>debug_traceTransaction</code> to implement debugging. Use the <em>Debugger</em> tab in Remix rather than calling <code>debug_traceTransaction</code> directly. </p>
|
|
|
<p>Reruns the transaction with the same state as when the transaction was executed. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p><code>transactionHash</code> : <code>data</code> - Transaction hash.</p>
|
|
|
<p><code>Object</code> - request options (all optional and default to <code>false</code>):</p>
|
|
|
<ul>
|
|
|
<li><code>disableStorage</code> : <code>boolean</code> - <code>true</code> disables storage capture. </li>
|
|
|
<li><code>disableMemory</code> : <code>boolean</code> - <code>true</code> disables memory capture. </li>
|
|
|
<li><code>disableStack</code> : <code>boolean</code> - <code>true</code> disables stack capture. </li>
|
|
|
</ul>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code>:<code>object</code> - <a href="#Objectstrace-object">Trace object</a>. </p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["0x2cc6c94c21685b7e0f8ddabf277a5ccf98db157c62619cde8baea696a74ed18e",{"disableStorage":true}],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span> : <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span> : {
|
|
|
<span class="hljs-attr">"gas"</span> : <span class="hljs-number">21000</span>,
|
|
|
<span class="hljs-attr">"failed"</span> : <span class="hljs-literal">false</span>,
|
|
|
<span class="hljs-attr">"returnValue"</span> : <span class="hljs-string">""</span>,
|
|
|
<span class="hljs-attr">"structLogs"</span> : [ {
|
|
|
<span class="hljs-attr">"pc"</span> : <span class="hljs-number">0</span>,
|
|
|
<span class="hljs-attr">"op"</span> : <span class="hljs-string">"STOP"</span>,
|
|
|
<span class="hljs-attr">"gas"</span> : <span class="hljs-number">0</span>,
|
|
|
<span class="hljs-attr">"gasCost"</span> : <span class="hljs-number">0</span>,
|
|
|
<span class="hljs-attr">"depth"</span> : <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"stack"</span> : [ ],
|
|
|
<span class="hljs-attr">"memory"</span> : [ ],
|
|
|
<span class="hljs-attr">"storage"</span> : <span class="hljs-literal">null</span>
|
|
|
} ]
|
|
|
}
|
|
|
}</pre><hr>
|
|
|
<h4 id="miner_start">miner_start</h4>
|
|
|
<p>Starts the CPU mining process. To start mining, a miner coinbase must have been previously specified using the <a href="#Pantheon-CLI-Syntax"><code>--miner-coinbase</code></a> command line option. </p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <code>boolean</code> - <code>true</code> if the mining start request was received successfully; otherwise returns an error. </p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"miner_start","params":[],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span>: <span class="hljs-literal">true</span>
|
|
|
}</pre><hr>
|
|
|
<h4 id="miner_stop">miner_stop</h4>
|
|
|
<p>Stops the CPU mining process on the client.</p>
|
|
|
<h5 id="parameters">Parameters</h5>
|
|
|
<p>None</p>
|
|
|
<h5 id="returns">Returns</h5>
|
|
|
<p><code>result</code> : <code>boolean</code> - <code>true</code> if the mining stop request was received successfully; otherwise returns an error. </p>
|
|
|
<h5 id="request">Request</h5>
|
|
|
<pre class="hljs">curl -X POST --data '{"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1}' <JSON-RPC-endpoint:port></pre><h5 id="result">Result</h5>
|
|
|
<pre class="hljs">{
|
|
|
<span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
|
|
|
<span class="hljs-attr">"id"</span>: <span class="hljs-number">1</span>,
|
|
|
<span class="hljs-attr">"result"</span>: <span class="hljs-literal">true</span>
|
|
|
}</pre><p class="page" id="Objects"></p><h1>JSON-RPC API Objects</h1>
|
|
|
<h2 id="objects">Objects</h2>
|
|
|
<p>The following objects are parameters for or returned by JSON-RPC Methods:</p>
|
|
|
<ul>
|
|
|
<li><a href="#block-object">Block</a></li>
|
|
|
<li><a href="#filter-options-object">Filter Options</a></li>
|
|
|
<li><a href="#log-object">Log</a></li>
|
|
|
<li><a href="#transaction-object">Transaction</a> </li>
|
|
|
<li><a href="#transaction-call-object">Transaction Call</a> </li>
|
|
|
<li><a href="#transaction-receipt-object">Transaction Receipt</a></li>
|
|
|
</ul>
|
|
|
<h4 id="block-object">Block Object</h4>
|
|
|
<p>Returned by <a href="#JSON-RPC-API-Methodseth_getblockbyhash">eth_getBlockByHash</a> and <a href="#JSON-RPC-API-Methodseth_getblockbynumber">eth_getBlockByNumber</a>.</p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>number</code></td>
|
|
|
<td style="text-align:center"><em>Quantity</em>, Integer</td>
|
|
|
<td>Block number. <code>null</code> when block is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>hash</code></td>
|
|
|
<td style="text-align:center"><em>Data</em>, 32 bytes</td>
|
|
|
<td>Hash of the block. <code>null</code> when block is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>parentHash</code></td>
|
|
|
<td style="text-align:center"><em>Data</em>, 32 bytes</td>
|
|
|
<td>Hash of the parent block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>nonce</code></td>
|
|
|
<td style="text-align:center"><em>Data</em>, 8 bytes</td>
|
|
|
<td>Hash of the generated proof of work. <code>null</code> when block is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>sha3Uncles</code></td>
|
|
|
<td style="text-align:center"><em>Data</em>, 32 bytes</td>
|
|
|
<td>SHA3 of the uncle's data in the block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>logsBloom</code></td>
|
|
|
<td style="text-align:center"><em>Data</em>, 256 bytes</td>
|
|
|
<td>Bloom filter for the block logs. <code>null</code> when block is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>transactionsRoot</code></td>
|
|
|
<td style="text-align:center"><em>Data</em>, 32 bytes</td>
|
|
|
<td>Root of the transaction trie for the block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>stateRoot</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Root of the final state trie for the block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>receiptsRoot</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Root of the receipts trie for the block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>miner</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td>Address to which mining rewards were paid.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>difficulty</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td>Difficulty for this block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>totalDifficulty</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td>Total difficulty of the chain until this block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>extraData</code></td>
|
|
|
<td style="text-align:center">Data</td>
|
|
|
<td>Extra data field of this block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>size</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td>Size of block in bytes.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gasLimit</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Maximum gas allowed in this block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gasUsed</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Total gas used by all transactions in this block.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>timestamp</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Unix timestamp when block was collated.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>transactions</code></td>
|
|
|
<td style="text-align:center">Array</td>
|
|
|
<td>Array of <a href="#transaction-object">transaction objects</a>, or 32 byte transaction hashes depending on the specified boolean parameter.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>uncles</code></td>
|
|
|
<td style="text-align:center">Array</td>
|
|
|
<td>Array of uncle hashes.</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<h4 id="filter-options-object">Filter Options Object</h4>
|
|
|
<p>Parameter for <a href="#JSON-RPC-API-Methodseth_newfilter">eth_newFilter</a> and <a href="#JSON-RPC-API-Methodseth_getlogs">eth_getLogs</a>. </p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th style="text-align:center">Required/Optional</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>fromBlock</code></td>
|
|
|
<td style="text-align:center">Quantity |Tag</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Integer block number or <code>latest</code>, <code>pending</code>, <code>earliest</code>. See <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>. Default is <code>latest</code>.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>toBlock</code></td>
|
|
|
<td style="text-align:center">Quantity |Tag</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Integer block number or <code>latest</code>, <code>pending</code>, <code>earliest</code>. See <a href="#Using-JSON-RPC-APIblock-parameter">Block Parameter</a>. Default is <code>latest</code>.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>address</code></td>
|
|
|
<td style="text-align:center">Data | Array</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Contract address or array of addresses from which logs originate.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>topics</code></td>
|
|
|
<td style="text-align:center">Array of Data, 32 bytes each</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Array of 32-byte topics. Topics are order-dependent. Each topic can also be an array of DATA with "or" options.</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<p><a href="#JSON-RPC-API-Methodseth_getlogs">eth_getLogs</a> has an additional key. </p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th style="text-align:center">Required/Optional</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>blockhash</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Hash of block for which to return logs. If <code>blockhash</code> is specified, <code>fromBlock</code> and <code>toBlock</code> cannot be specified.</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<h4 id="log-object">Log Object</h4>
|
|
|
<p>Returned by <a href="#JSON-RPC-API-Methodseth_getfilterchanges">eth_getFilterChanges</a> and <a href="#Objectstransaction-receipt-object">transaction receipt objects</a> can contain an array of log objects. </p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>removed</code></td>
|
|
|
<td style="text-align:center">Tag</td>
|
|
|
<td><code>true</code> when log removed due to chain reorganization. <code>false</code> if valid log.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>logIndex</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td>Log index position in the block. <code>null</code> when log is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>transactionIndex</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td>Index position of transaction from which log was created. <code>null</code> when log is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>transactionHash</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Hash of transaction from which log was created. <code>null</code> when log is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>blockHash</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Hash of block in which log included. <code>null</code> when log is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>blockNumber</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Number of block in which log included. <code>null</code> when log is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>address</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td>Address from which log originated.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>data</code></td>
|
|
|
<td style="text-align:center">Data</td>
|
|
|
<td>Non-indexed arguments of log.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>topics</code></td>
|
|
|
<td style="text-align:center">Array of Data, 32 bytes each</td>
|
|
|
<td>0 to 4 indexed log arguments. In Solidity, the first topic is the hash of the signature of the event (for example, <code>Deposit(address, bytes32, unit256)</code>) except you declare the event with an anonymous specifier.) </td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<h3 id="trace-object">Trace Object</h3>
|
|
|
<p>Returned by <a href="#JSON-RPC-API-Methodsdebug_traceTransaction">debug_traceTransaction</a>.</p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>gas</code></td>
|
|
|
<td style="text-align:center">Integer</td>
|
|
|
<td>Gas used by the transaction</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>failed</code></td>
|
|
|
<td style="text-align:center">Boolean</td>
|
|
|
<td>True if transaction failed; otherwise, false</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>returnValue</code></td>
|
|
|
<td style="text-align:center">String</td>
|
|
|
<td>Bytes returned from transaction execution (without a <code>0x</code> prefix)</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>structLogs</code></td>
|
|
|
<td style="text-align:center">Array</td>
|
|
|
<td>Array of structured log objects</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<h4 id="structured-log-object">Structured Log Object</h4>
|
|
|
<p>Log information returned as part of the <a href="#trace-object">Trace object</a>. </p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>pc</code></td>
|
|
|
<td style="text-align:center">Integer</td>
|
|
|
<td>Current program counter</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>op</code></td>
|
|
|
<td style="text-align:center">String</td>
|
|
|
<td>Current OpCode</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gas</code></td>
|
|
|
<td style="text-align:center">Integer</td>
|
|
|
<td>Gas remaining</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gasCost</code></td>
|
|
|
<td style="text-align:center">Integer</td>
|
|
|
<td>Cost in wei of each gas unit</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>depth</code></td>
|
|
|
<td style="text-align:center">Integer</td>
|
|
|
<td>Execution depth</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>exceptionalHaltReasons</code></td>
|
|
|
<td style="text-align:center">Array</td>
|
|
|
<td>One or more strings representing an error condition that caused the EVM execution to terminate. These indicate that EVM execution terminated for reasons such as running out of gas or attempting to execute an unknown instruction. Generally a single exceptional halt reason is returned but it is possible for more than one to occur at once.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>stack</code></td>
|
|
|
<td style="text-align:center">Array of 32 byte arrays</td>
|
|
|
<td>EVM execution stack before executing current operation</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>memory</code></td>
|
|
|
<td style="text-align:center">Array of 32 byte arrays</td>
|
|
|
<td>Memory space of the contract before executing current operation</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>storage</code></td>
|
|
|
<td style="text-align:center">Object</td>
|
|
|
<td>Storage entries changed by the current transaction</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<h3 id="transaction-object">Transaction Object</h3>
|
|
|
<p>Returned by <a href="#JSON-RPC-API-Methodseth_gettransactionbyhash">eth_getTransactionByHash</a>, <a href="#JSON-RPC-API-Methodseth_gettransactionbyblockhashandindex">eth_getTransactionByBlockHashAndIndex</a>, and <a href="#JSON-RPC-API-Methodseth_gettransactionbyblocknumberandindex">eth_getTransactionsByBlockNumberAndIndex</a>.</p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>blockHash</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Hash of block containing this transaction. <code>null</code> when transaction is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>blockNumber</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Block number of block containing this transaction. <code>null</code> when transaction is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>from</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td>Address of the sender.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gas</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Gas provided by the sender.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gasPrice</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Gas price provided by the sender in Wei.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>hash</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Hash of the transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>input</code></td>
|
|
|
<td style="text-align:center">Data</td>
|
|
|
<td>Data sent with the transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>nonce</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Number of transactions made by the sender before this one.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>to</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td>Address of the receiver. <code>null</code> if a contract creation transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>transactionIndex</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td>Index position of transaction in the block. <code>null</code> when transaction is pending.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>value</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Value transferred in Wei.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>v</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>ECDSA Recovery ID</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>r</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>ECDSA signature r</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>s</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>ECDSA signature s</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<h3 id="transaction-call-object">Transaction Call Object</h3>
|
|
|
<p>Parameter for <a href="#JSON-RPC-API-Methodseth_call">eth_call</a> and <a href="#JSON-RPC-API-Methodseth_estimategas">eth_estimateGas</a>.</p>
|
|
|
<p><strong>Note:</strong> All parameters are optional for <a href="#JSON-RPC-API-Methodseth_estimategas">eth_estimateGas</a></p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th style="text-align:center">Required/Optional</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>from</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Address from which transaction sent.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>to</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td style="text-align:center">Required</td>
|
|
|
<td>Address to which transaction is directed.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gas</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Gas provided for the transaction execution. <code>eth_call</code> consumes zero gas, but this parameter may be needed by some executions.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gasPrice</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>gasPrice used for each paid gas.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>value</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Value sent with this transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>data</code></td>
|
|
|
<td style="text-align:center">Data</td>
|
|
|
<td style="text-align:center">Optional</td>
|
|
|
<td>Hash of the method signature and encoded parameters. For details see Ethereum Contract ABI.</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<h3 id="transaction-receipt-object">Transaction Receipt Object</h3>
|
|
|
<p>Returned by <a href="#JSON-RPC-API-Methodseth_gettransactionreceipt">eth_getTransactionReceipt</a>.</p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>blockHash</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Hash of block containing this transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>blockNumber</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Block number of block containing this transaction. </td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>contractAddress</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td>Contract address created, if contract creation transaction; otherwise, <code>null</code>.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>cumulativeGasUsed</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Total amount of gas used by previous transactions in the block and this transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>from</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td>Address of the sender.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>gasUsed</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Amount of gas used by this specific transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>logs</code></td>
|
|
|
<td style="text-align:center">Array</td>
|
|
|
<td>Array of <a href="#log-object">log objects</a> generated by this transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>logsBloom</code></td>
|
|
|
<td style="text-align:center">Data, 256 bytes</td>
|
|
|
<td>Bloom filter for light clients to quickly retrieve related logs.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>status</code></td>
|
|
|
<td style="text-align:center">Quantity</td>
|
|
|
<td>Either <code>1</code> (success) or <code>0</code> (failure)</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>to</code></td>
|
|
|
<td style="text-align:center">Data, 20 bytes</td>
|
|
|
<td>Address of the receiver, if sending ether; otherwise, null.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>transactionHash</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Hash of the transaction.</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td><code>transactionIndex</code></td>
|
|
|
<td style="text-align:center">Quantity, Integer</td>
|
|
|
<td>Index position of transaction in the block.</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
<p><strong>Note:</strong> For pre-Byzantium transactions, the transaction receipt object includes the following instead of <code>status</code>:</p>
|
|
|
<table>
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th>Key</th>
|
|
|
<th style="text-align:center">Type</th>
|
|
|
<th>Value</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td><code>root</code></td>
|
|
|
<td style="text-align:center">Data, 32 bytes</td>
|
|
|
<td>Post-transaction stateroot</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
|
|
|
|
|
</div> <!-- /div.col-md-9 -->
|
|
|
</div> <!-- /div.row -->
|
|
|
</div> <!-- /div.container -->
|
|
|
</body>
|
|
|
<script>
|
|
|
$('body').scrollspy({ target: '#scroll-spy', offset: 40 })
|
|
|
</script>
|
|
|
</html> |