mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-12 06:41:31 +00:00
1 line
16 KiB
JavaScript
1 line
16 KiB
JavaScript
(window.webpackJsonp=window.webpackJsonp||[]).push([[149],{723:function(g,e,I){"use strict";I.r(e);var C=I(1),t=Object(C.a)({},(function(){var g=this,e=g.$createElement,I=g._self._c||e;return I("ContentSlotsDistributor",{attrs:{"slot-key":g.$parent.slotKey}},[I("h2",{attrs:{id:"logging"}},[I("a",{staticClass:"header-anchor",attrs:{href:"#logging"}},[g._v("#")]),g._v(" Logging")]),g._v(" "),I("p",[g._v("Logging adds detail and allows the node operator to better identify what they are looking for. Tendermint supports log levels on a global and per-module basis. This allows the node operator to see only the information they need and the developer to hone in on specific changes they are working on.")]),g._v(" "),I("h2",{attrs:{id:"configuring-log-levels"}},[I("a",{staticClass:"header-anchor",attrs:{href:"#configuring-log-levels"}},[g._v("#")]),g._v(" Configuring Log Levels")]),g._v(" "),I("p",[g._v("There are three log levels, "),I("code",[g._v("info")]),g._v(", "),I("code",[g._v("debug")]),g._v(" and "),I("code",[g._v("error")]),g._v(". These can be configured either through the command line via "),I("code",[g._v('tendermint start --log-level ""')]),g._v(" or within the "),I("code",[g._v("config.toml")]),g._v(" file.")]),g._v(" "),I("ul",[I("li",[I("code",[g._v("info")]),g._v(" Info represents an informational message. It is used to show that modules have started, stopped and how they are functioning.")]),g._v(" "),I("li",[I("code",[g._v("debug")]),g._v(" Debug is used to trace various calls or problems. Debug is used widely throughout a codebase and can lead to overly verbose logging.")]),g._v(" "),I("li",[I("code",[g._v("error")]),g._v(" Error represents something that has gone wrong. An error log can represent a potential problem that can lead to a node halt.")])]),g._v(" "),I("p",[g._v("Within the "),I("code",[g._v("config.toml")]),g._v(":")]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"toml",base64:"IyBPdXRwdXQgbGV2ZWwgZm9yIGxvZ2dpbmcsIGluY2x1ZGluZyBwYWNrYWdlIGxldmVsIG9wdGlvbnMKbG9nLWxldmVsID0gJnF1b3Q7aW5mbyZxdW90Owo="}}),g._v(" "),I("p",[g._v("Via the command line:")]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"sh",base64:"dGVuZGVybWludCBzdGFydCAtLWxvZy1sZXZlbCAmcXVvdDtpbmZvJnF1b3Q7Cg=="}}),g._v(" "),I("h2",{attrs:{id:"list-of-modules"}},[I("a",{staticClass:"header-anchor",attrs:{href:"#list-of-modules"}},[g._v("#")]),g._v(" List of modules")]),g._v(" "),I("p",[g._v("Here is the list of modules you may encounter in Tendermint's log and a\nlittle overview what they do.")]),g._v(" "),I("ul",[I("li",[I("code",[g._v("abci-client")]),g._v(" As mentioned in "),I("RouterLink",{attrs:{to:"/app-dev/app-architecture.html"}},[g._v("Application Architecture Guide")]),g._v(", Tendermint acts as an ABCI\nclient with respect to the application and maintains 3 connections:\nmempool, consensus and query. The code used by Tendermint Core can\nbe found "),I("a",{attrs:{href:"https://github.com/tendermint/tendermint/tree/master/abci/client",target:"_blank",rel:"noopener noreferrer"}},[g._v("here"),I("OutboundLink")],1),g._v(".")],1),g._v(" "),I("li",[I("code",[g._v("blockchain")]),g._v(" Provides storage, pool (a group of peers), and reactor\nfor both storing and exchanging blocks between peers.")]),g._v(" "),I("li",[I("code",[g._v("consensus")]),g._v(' The heart of Tendermint core, which is the\nimplementation of the consensus algorithm. Includes two\n"submodules": '),I("code",[g._v("wal")]),g._v(" (write-ahead logging) for ensuring data\nintegrity and "),I("code",[g._v("replay")]),g._v(" to replay blocks and messages on recovery\nfrom a crash.\n"),I("a",{attrs:{href:"https://github.com/tendermint/tendermint/blob/master/types/events.go",target:"_blank",rel:"noopener noreferrer"}},[g._v("here"),I("OutboundLink")],1),g._v(".\nYou can subscribe to them by calling "),I("code",[g._v("subscribe")]),g._v(" RPC method. Refer\nto "),I("RouterLink",{attrs:{to:"/tendermint-core/rpc.html"}},[g._v("RPC docs")]),g._v(" for additional information.")],1),g._v(" "),I("li",[I("code",[g._v("mempool")]),g._v(" Mempool module handles all incoming transactions, whenever\nthey are coming from peers or the application.")]),g._v(" "),I("li",[I("code",[g._v("p2p")]),g._v(" Provides an abstraction around peer-to-peer communication. For\nmore details, please check out the\n"),I("a",{attrs:{href:"https://github.com/tendermint/tendermint/tree/master/spec/p2p",target:"_blank",rel:"noopener noreferrer"}},[g._v("README"),I("OutboundLink")],1),g._v(".")]),g._v(" "),I("li",[I("code",[g._v("rpc-server")]),g._v(" RPC server. For implementation details, please read the\n"),I("a",{attrs:{href:"https://github.com/tendermint/tendermint/blob/master/rpc/jsonrpc/doc.go",target:"_blank",rel:"noopener noreferrer"}},[g._v("doc.go"),I("OutboundLink")],1),g._v(".")]),g._v(" "),I("li",[I("code",[g._v("state")]),g._v(" Represents the latest state and execution submodule, which\nexecutes blocks against the application.")]),g._v(" "),I("li",[I("code",[g._v("statesync")]),g._v(" Provides a way to quickly sync a node with pruned history.")])]),g._v(" "),I("h3",{attrs:{id:"walkabout-example"}},[I("a",{staticClass:"header-anchor",attrs:{href:"#walkabout-example"}},[g._v("#")]),g._v(" Walkabout example")]),g._v(" "),I("p",[g._v("We first create three connections (mempool, consensus and query) to the\napplication (running "),I("code",[g._v("kvstore")]),g._v(" locally in this case).")]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"sh",base64:"SVsxMC0wNHwxMzo1NDoyNy4zNjRdIFN0YXJ0aW5nIG11bHRpQXBwQ29ubiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1wcm94eSBpbXBsPW11bHRpQXBwQ29ubgpJWzEwLTA0fDEzOjU0OjI3LjM2Nl0gU3RhcnRpbmcgbG9jYWxDbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPWFiY2ktY2xpZW50IGNvbm5lY3Rpb249cXVlcnkgaW1wbD1sb2NhbENsaWVudApJWzEwLTA0fDEzOjU0OjI3LjM2Nl0gU3RhcnRpbmcgbG9jYWxDbGllbnQgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPWFiY2ktY2xpZW50IGNvbm5lY3Rpb249bWVtcG9vbCBpbXBsPWxvY2FsQ2xpZW50CklbMTAtMDR8MTM6NTQ6MjcuMzY3XSBTdGFydGluZyBsb2NhbENsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9YWJjaS1jbGllbnQgY29ubmVjdGlvbj1jb25zZW5zdXMgaW1wbD1sb2NhbENsaWVudAo="}}),g._v(" "),I("p",[g._v("Then Tendermint Core and the application perform a handshake.")]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"sh",base64:"SVsxMC0wNHwxMzo1NDoyNy4zNjddIEFCQ0kgSGFuZHNoYWtlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1jb25zZW5zdXMgYXBwSGVpZ2h0PTkwIGFwcEhhc2g9RTBGQkFGQkY2RkNFRDhCOTc4NkRERkVCMUEwRDRGQTI1MDFCQURBRApJWzEwLTA0fDEzOjU0OjI3LjM2OF0gQUJDSSBSZXBsYXkgQmxvY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPWNvbnNlbnN1cyBhcHBIZWlnaHQ9OTAgc3RvcmVIZWlnaHQ9OTAgc3RhdGVIZWlnaHQ9OTAKSVsxMC0wNHwxMzo1NDoyNy4zNjhdIENvbXBsZXRlZCBBQkNJIEhhbmRzaGFrZSAtIFRlbmRlcm1pbnQgYW5kIEFwcCBhcmUgc3luY2VkIG1vZHVsZT1jb25zZW5zdXMgYXBwSGVpZ2h0PTkwIGFwcEhhc2g9RTBGQkFGQkY2RkNFRDhCOTc4NkRERkVCMUEwRDRGQTI1MDFCQURBRAo="}}),g._v(" "),I("p",[g._v("After that, we start a few more things like the event switch, reactors,\nand perform UPNP discover in order to detect the IP address.")]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"sh",base64:"SVsxMC0wNHwxMzo1NDoyNy4zNzRdIFN0YXJ0aW5nIEV2ZW50U3dpdGNoICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT10eXBlcyBpbXBsPUV2ZW50U3dpdGNoCklbMTAtMDR8MTM6NTQ6MjcuMzc1XSBUaGlzIG5vZGUgaXMgYSB2YWxpZGF0b3IgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzCklbMTAtMDR8MTM6NTQ6MjcuMzc5XSBTdGFydGluZyBOb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9bWFpbiBpbXBsPU5vZGUKSVsxMC0wNHwxMzo1NDoyNy4zODFdIExvY2FsIGxpc3RlbmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1wMnAgaXA9OjogcG9ydD0yNjY1NgpJWzEwLTA0fDEzOjU0OjI3LjM4Ml0gR2V0dGluZyBVUE5QIGV4dGVybmFsIGFkZHJlc3MgICAgICAgICAgICAgICAgbW9kdWxlPXAycApJWzEwLTA0fDEzOjU0OjMwLjM4Nl0gQ291bGQgbm90IHBlcmZvcm0gVVBOUCBkaXNjb3ZlciAgICAgICAgICAgICAgbW9kdWxlPXAycCBlcnI9JnF1b3Q7d3JpdGUgdWRwNCAwLjAuMC4wOjM4MjM4LSZndDsyMzkuMjU1LjI1NS4yNTA6MTkwMDogaS9vIHRpbWVvdXQmcXVvdDsKSVsxMC0wNHwxMzo1NDozMC4zODZdIFN0YXJ0aW5nIERlZmF1bHRMaXN0ZW5lciAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1wMnAgaW1wbD1MaXN0ZW5lcihAMTAuMC4yLjE1OjI2NjU2KQpJWzEwLTA0fDEzOjU0OjMwLjM4N10gU3RhcnRpbmcgUDJQIFN3aXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPXAycCBpbXBsPSZxdW90O1AyUCBTd2l0Y2gmcXVvdDsKSVsxMC0wNHwxMzo1NDozMC4zODddIFN0YXJ0aW5nIE1lbXBvb2xSZWFjdG9yICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1tZW1wb29sIGltcGw9TWVtcG9vbFJlYWN0b3IKSVsxMC0wNHwxMzo1NDozMC4zODddIFN0YXJ0aW5nIEJsb2NrY2hhaW5SZWFjdG9yICAgICAgICAgICAgICAgICAgIG1vZHVsZT1ibG9ja2NoYWluIGltcGw9QmxvY2tjaGFpblJlYWN0b3IKSVsxMC0wNHwxMzo1NDozMC4zODddIFN0YXJ0aW5nIENvbnNlbnN1c1JlYWN0b3IgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1jb25zZW5zdXMgaW1wbD1Db25zZW5zdXNSZWFjdG9yCklbMTAtMDR8MTM6NTQ6MzAuMzg3XSBDb25zZW5zdXNSZWFjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzIGZhc3RTeW5jPWZhbHNlCklbMTAtMDR8MTM6NTQ6MzAuMzg3XSBTdGFydGluZyBDb25zZW5zdXNTdGF0ZSAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzIGltcGw9Q29uc2Vuc3VzU3RhdGUKSVsxMC0wNHwxMzo1NDozMC4zODddIFN0YXJ0aW5nIFdBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1jb25zZW5zdXMgd2FsPS9ob21lL3ZhZ3JhbnQvLnRlbmRlcm1pbnQvZGF0YS9jcy53YWwvd2FsIGltcGw9V0FMCklbMTAtMDR8MTM6NTQ6MzAuMzg4XSBTdGFydGluZyBUaW1lb3V0VGlja2VyICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzIGltcGw9VGltZW91dFRpY2tlcgo="}}),g._v(" "),I("p",[g._v('Notice the second row where Tendermint Core reports that "This node is a\nvalidator". It also could be just an observer (regular node).')]),g._v(" "),I("p",[g._v("Next we replay all the messages from the WAL.")]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"sh",base64:"SVsxMC0wNHwxMzo1NDozMC4zOTBdIENhdGNodXAgYnkgcmVwbGF5aW5nIGNvbnNlbnN1cyBtZXNzYWdlcyAgICAgIG1vZHVsZT1jb25zZW5zdXMgaGVpZ2h0PTkxCklbMTAtMDR8MTM6NTQ6MzAuMzkwXSBSZXBsYXk6IE5ldyBTdGVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzIGhlaWdodD05MSByb3VuZD0wIHN0ZXA9Um91bmRTdGVwTmV3SGVpZ2h0CklbMTAtMDR8MTM6NTQ6MzAuMzkwXSBSZXBsYXk6IERvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzCg=="}}),g._v(" "),I("p",[g._v('"Started node" message signals that everything is ready for work.')]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"sh",base64:"SVsxMC0wNHwxMzo1NDozMC4zOTFdIFN0YXJ0aW5nIFJQQyBIVFRQIHNlcnZlciBvbiB0Y3Agc29ja2V0IDAuMC4wLjA6MjY2NTcgbW9kdWxlPXJwYy1zZXJ2ZXIKSVsxMC0wNHwxMzo1NDozMC4zOTJdIFN0YXJ0ZWQgbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1tYWluIG5vZGVJbmZvPSZxdW90O05vZGVJbmZve2lkOiBERjIyRDdDOTJDOTEwODIzMjRBMTMxMkYwOTJBQTFEQTE5N0ZBNTk4REJCRkI2NTI2RSwgbW9uaWtlcjogYW5vbnltb3VzLCBuZXR3b3JrOiB0ZXN0LWNoYWluLTNNTncyTiBbcmVtb3RlICwgbGlzdGVuIDEwLjAuMi4xNToyNjY1Nl0sIHZlcnNpb246IDAuMTEuMC0xMGYzNjFmYyAoW3dpcmVfdmVyc2lvbj0wLjYuMiBwMnBfdmVyc2lvbj0wLjUuMCBjb25zZW5zdXNfdmVyc2lvbj12MS8wLjIuMiBycGNfdmVyc2lvbj0wLjcuMC8zIHR4X2luZGV4PW9uIHJwY19hZGRyPXRjcDovLzAuMC4wLjA6MjY2NTddKX0mcXVvdDsK"}}),g._v(" "),I("p",[g._v("Next follows a standard block creation cycle, where we enter a new\nround, propose a block, receive more than 2/3 of prevotes, then\nprecommits and finally have a chance to commit a block. For details,\nplease refer to "),I("a",{attrs:{href:"https://github.com/tendermint/tendermint/blob/master/spec/consensus/consensus.md",target:"_blank",rel:"noopener noreferrer"}},[g._v("Byzantine Consensus\nAlgorithm"),I("OutboundLink")],1),g._v(".")]),g._v(" "),I("tm-code-block",{staticClass:"codeblock",attrs:{language:"sh",base64:"SVsxMC0wNHwxMzo1NDozMC4zOTNdIGVudGVyTmV3Um91bmQoOTEvMCkuIEN1cnJlbnQ6IDkxLzAvUm91bmRTdGVwTmV3SGVpZ2h0IG1vZHVsZT1jb25zZW5zdXMKSVsxMC0wNHwxMzo1NDozMC4zOTNdIGVudGVyUHJvcG9zZSg5MS8wKS4gQ3VycmVudDogOTEvMC9Sb3VuZFN0ZXBOZXdSb3VuZCBtb2R1bGU9Y29uc2Vuc3VzCklbMTAtMDR8MTM6NTQ6MzAuMzkzXSBlbnRlclByb3Bvc2U6IE91ciB0dXJuIHRvIHByb3Bvc2UgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzIHByb3Bvc2VyPTEyNUIwRTNDNTUxMkY1QzJCMEUxMTA5RTMxODg1QzQ1MTE1NzBDNDIgcHJpdlZhbGlkYXRvcj0mcXVvdDtQcml2VmFsaWRhdG9yezEyNUIwRTNDNTUxMkY1QzJCMEUxMTA5RTMxODg1QzQ1MTE1NzBDNDIgTEg6OTAsIExSOjAsIExTOjN9JnF1b3Q7CklbMTAtMDR8MTM6NTQ6MzAuMzk0XSBTaWduZWQgcHJvcG9zYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9Y29uc2Vuc3VzIGhlaWdodD05MSByb3VuZD0wIHByb3Bvc2FsPSZxdW90O1Byb3Bvc2FsezkxLzAgMToyMUI3OTg3MjUxNEYgKC0xLDowOjAwMDAwMDAwMDAwMCkgey8xMEVERUREN0M4NEUuLi4vfX0mcXVvdDsKSVsxMC0wNHwxMzo1NDozMC4zOTddIFJlY2VpdmVkIGNvbXBsZXRlIHByb3Bvc2FsIGJsb2NrICAgICAgICAgICAgIG1vZHVsZT1jb25zZW5zdXMgaGVpZ2h0PTkxIGhhc2g9RjY3MUQ1NjJDN0I5MjQyOTAwQTI4NkUxODgyRUU2NEU1NTU2RkU5RQpJWzEwLTA0fDEzOjU0OjMwLjM5N10gZW50ZXJQcmV2b3RlKDkxLzApLiBDdXJyZW50OiA5MS8wL1JvdW5kU3RlcFByb3Bvc2UgbW9kdWxlPWNvbnNlbnN1cwpJWzEwLTA0fDEzOjU0OjMwLjM5N10gZW50ZXJQcmV2b3RlOiBQcm9wb3NhbEJsb2NrIGlzIHZhbGlkICAgICAgICAgbW9kdWxlPWNvbnNlbnN1cyBoZWlnaHQ9OTEgcm91bmQ9MApJWzEwLTA0fDEzOjU0OjMwLjM5OF0gU2lnbmVkIGFuZCBwdXNoZWQgdm90ZSAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPWNvbnNlbnN1cyBoZWlnaHQ9OTEgcm91bmQ9MCB2b3RlPSZxdW90O1ZvdGV7MDoxMjVCMEUzQzU1MTIgOTEvMDAvMShQcmV2b3RlKSBGNjcxRDU2MkM3Qjkgey84OTA0N0ZGQzIxRDguLi4vfX0mcXVvdDsgZXJyPW51bGwKSVsxMC0wNHwxMzo1NDozMC40MDFdIEFkZGVkIHRvIHByZXZvdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1jb25zZW5zdXMgdm90ZT0mcXVvdDtWb3RlezA6MTI1QjBFM0M1NTEyIDkxLzAwLzEoUHJldm90ZSkgRjY3MUQ1NjJDN0I5IHsvODkwNDdGRkMyMUQ4Li4uL319JnF1b3Q7IHByZXZvdGVzPSZxdW90O1ZvdGVTZXR7SDo5MSBSOjAgVDoxICsyLzM6RjY3MUQ1NjJDN0I5MjQyOTAwQTI4NkUxODgyRUU2NEU1NTU2RkU5RToxOjIxQjc5ODcyNTE0RiBCQXsxOlh9IG1hcFtdfSZxdW90OwpJWzEwLTA0fDEzOjU0OjMwLjQwMV0gZW50ZXJQcmVjb21taXQoOTEvMCkuIEN1cnJlbnQ6IDkxLzAvUm91bmRTdGVwUHJldm90ZSBtb2R1bGU9Y29uc2Vuc3VzCklbMTAtMDR8MTM6NTQ6MzAuNDAxXSBlbnRlclByZWNvbW1pdDogKzIvMyBwcmV2b3RlZCBwcm9wb3NhbCBibG9jay4gTG9ja2luZyBtb2R1bGU9Y29uc2Vuc3VzIGhhc2g9RjY3MUQ1NjJDN0I5MjQyOTAwQTI4NkUxODgyRUU2NEU1NTU2RkU5RQpJWzEwLTA0fDEzOjU0OjMwLjQwMl0gU2lnbmVkIGFuZCBwdXNoZWQgdm90ZSAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPWNvbnNlbnN1cyBoZWlnaHQ9OTEgcm91bmQ9MCB2b3RlPSZxdW90O1ZvdGV7MDoxMjVCMEUzQzU1MTIgOTEvMDAvMihQcmVjb21taXQpIEY2NzFENTYyQzdCOSB7LzgwNTMzNDc4RTQxQS4uLi99fSZxdW90OyBlcnI9bnVsbApJWzEwLTA0fDEzOjU0OjMwLjQwNF0gQWRkZWQgdG8gcHJlY29tbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlPWNvbnNlbnN1cyB2b3RlPSZxdW90O1ZvdGV7MDoxMjVCMEUzQzU1MTIgOTEvMDAvMihQcmVjb21taXQpIEY2NzFENTYyQzdCOSB7LzgwNTMzNDc4RTQxQS4uLi99fSZxdW90OyBwcmVjb21taXRzPSZxdW90O1ZvdGVTZXR7SDo5MSBSOjAgVDoyICsyLzM6RjY3MUQ1NjJDN0I5MjQyOTAwQTI4NkUxODgyRUU2NEU1NTU2RkU5RToxOjIxQjc5ODcyNTE0RiBCQXsxOlh9IG1hcFtdfSZxdW90OwpJWzEwLTA0fDEzOjU0OjMwLjQwNF0gZW50ZXJDb21taXQoOTEvMCkuIEN1cnJlbnQ6IDkxLzAvUm91bmRTdGVwUHJlY29tbWl0IG1vZHVsZT1jb25zZW5zdXMKSVsxMC0wNHwxMzo1NDozMC40MDVdIEZpbmFsaXppbmcgY29tbWl0IG9mIGJsb2NrIHdpdGggMCB0eHMgICAgICAgIG1vZHVsZT1jb25zZW5zdXMgaGVpZ2h0PTkxIGhhc2g9RjY3MUQ1NjJDN0I5MjQyOTAwQTI4NkUxODgyRUU2NEU1NTU2RkU5RSByb290PUUwRkJBRkJGNkZDRUQ4Qjk3ODZEREZFQjFBMEQ0RkEyNTAxQkFEQUQKSVsxMC0wNHwxMzo1NDozMC40MDVdIEJsb2NrewogIEhlYWRlcnsKICAgIENoYWluSUQ6ICAgICAgICB0ZXN0LWNoYWluLTNNTncyTgogICAgSGVpZ2h0OiAgICAgICAgIDkxCiAgICBUaW1lOiAgICAgICAgICAgMjAxNy0xMC0wNCAxMzo1NDozMC4zOTMgKzAwMDAgVVRDCiAgICBOdW1UeHM6ICAgICAgICAgMAogICAgTGFzdEJsb2NrSUQ6ICAgIEYxNUFCOEJFRjlBNkFBQjA3RTQ1N0E2RTE2QkM0MTA1NDZBQTREQzY6MTpENTA1REEyNzM1NDQKICAgIExhc3RDb21taXQ6ICAgICA1NkZFRjJFRkRCOEIzN0U5QzZFNkQ2MzU3NDlERjMxNjlENUYwMDVECiAgICBEYXRhOgogICAgVmFsaWRhdG9yczogICAgIENFMjVGQkZGMkUxMEMwRDUxQUExQTA3QzA2NEE5NjkzMUJDOEIyOTcKICAgIEFwcDogICAgICAgICAgICBFMEZCQUZCRjZGQ0VEOEI5Nzg2RERGRUIxQTBENEZBMjUwMUJBREFECiAgfSNGNjcxRDU2MkM3QjkyNDI5MDBBMjg2RTE4ODJFRTY0RTU1NTZGRTlFCiAgRGF0YXsKCiAgfSMKICBDb21taXR7CiAgICBCbG9ja0lEOiAgICBGMTVBQjhCRUY5QTZBQUIwN0U0NTdBNkUxNkJDNDEwNTQ2QUE0REM2OjE6RDUwNURBMjczNTQ0CiAgICBQcmVjb21taXRzOiBWb3RlezA6MTI1QjBFM0M1NTEyIDkwLzAwLzIoUHJlY29tbWl0KSBGMTVBQjhCRUY5QTYgey9GRTk4RTJCOTU2RjAuLi4vfX0KICB9IzU2RkVGMkVGREI4QjM3RTlDNkU2RDYzNTc0OURGMzE2OUQ1RjAwNUQKfSNGNjcxRDU2MkM3QjkyNDI5MDBBMjg2RTE4ODJFRTY0RTU1NTZGRTlFIG1vZHVsZT1jb25zZW5zdXMKSVsxMC0wNHwxMzo1NDozMC40MDhdIEV4ZWN1dGVkIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zdGF0ZSBoZWlnaHQ9OTEgdmFsaWRUeHM9MCBpbnZhbGlkVHhzPTAKSVsxMC0wNHwxMzo1NDozMC40MTBdIENvbW1pdHRlZCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT1zdGF0ZSBoZWlnaHQ9OTEgdHhzPTAgaGFzaD1FMEZCQUZCRjZGQ0VEOEI5Nzg2RERGRUIxQTBENEZBMjUwMUJBREFECklbMTAtMDR8MTM6NTQ6MzAuNDEwXSBSZWNoZWNrIHR4cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9bWVtcG9vbCBudW10eHM9MCBoZWlnaHQ9OTEK"}})],1)}),[],!1,null,null,null);e.default=t.exports}}]); |