您现在的位置是: 首页 >  帮助 帮助

比特币闪电网络:通道建立与支付的详细教程

时间:2025-03-01 25人已围观

比特币闪电网络如何进行通道建立与支付详细教程

在加密货币世界中,比特币闪电网络(Lightning Network)作为一种 Layer 2 解决方案,旨在解决比特币交易速度慢、手续费高等问题。通过建立支付通道,闪电网络允许用户进行快速、低成本的链下交易。本教程将详细介绍如何在比特币闪电网络中建立通道并进行支付。

一、准备工作

在深入探索加密货币交易之前,充分的准备工作至关重要。这不仅能确保您的交易过程更加顺畅,还能显著降低潜在风险。以下是您需要提前准备的工具和资源,它们将为您的加密货币之旅奠定坚实的基础:

支持闪电网络的钱包: 选择一个可靠且易于使用的闪电网络钱包。常见的选择包括:
  • LND (Lightning Network Daemon): 一个开源的闪电网络节点软件,适用于技术熟练的用户。
  • c-lightning: 另一个流行的开源闪电网络节点实现,拥有强大的功能和可定制性。
  • Eclair: 一个由 ACINQ 开发的闪电网络钱包,支持桌面和移动平台。
  • Phoenix Wallet: 一款用户友好的移动闪电网络钱包,内置通道管理功能。
  • Muun Wallet: 另一款不错的移动端选择,支持闪电网络和比特币的无缝集成。
  • 比特币(BTC): 建立闪电网络通道需要锁定一定数量的比特币作为通道容量。请确保您的钱包中有足够的比特币。
  • 网络连接: 稳定的网络连接是建立和使用闪电网络的前提。
  • 二、安装和配置闪电网络钱包

    本教程将以 LND (Lightning Network Daemon) 为例,详细介绍如何在Linux环境下安装和配置闪电网络钱包。LND是目前最流行的闪电网络节点软件之一,由Lightning Labs开发。虽然本教程重点介绍LND的安装和配置,但请注意,市面上还有其他多种闪电网络钱包可供选择,例如 c-lightning 和 Eclair。每种钱包都有其独特的优势和适用场景,其安装和配置步骤也会有所不同。如果您选择使用其他闪电网络钱包,请务必仔细阅读并参考其官方文档,以确保正确安装和配置。

    安装 LND:

    • 根据您选择的操作系统(Linux, macOS, Windows)下载对应版本的 LND。请务必访问官方 GitHub 仓库,下载最新稳定版本,以确保兼容性和安全性。
    • 具体的安装步骤因操作系统而异,通常涉及解压下载的压缩包、配置环境变量以及安装必要的依赖项。例如,在 Linux 系统上,您可能需要安装 `build-essential`、`git` 和 `go` 等软件包。在 macOS 系统上,您可以使用 Homebrew 包管理器来安装依赖项。
    • 详细的安装指南和故障排除信息,请务必参考 LND 的官方文档。官方文档提供了针对不同操作系统的详尽说明和常见问题解答,可以帮助您顺利完成安装过程。 https://github.com/lightningnetwork/lnd

    配置 LND:

    • 创建一个 LND 配置文件 lnd.conf 。 该文件通常位于 ~/.lnd/ 目录下。 lnd.conf 文件允许你自定义 LND 节点的行为和连接设置,是启动 LND 节点前的关键步骤。
    • lnd.conf 文件中添加以下配置信息(根据您的实际情况进行修改):

      [Application Options]
      debuglevel=info
      maxpendingchannels=5

      debuglevel=info 设置日志级别为信息级别,这将提供有用的调试信息,同时避免日志文件过于冗长。 可根据需要调整为 debug 获取更详细的日志,或调整为 error warn 来减少日志输出。
      maxpendingchannels=5 限制了节点可以同时尝试打开的通道数量。 默认情况下,LND 允许打开相当多的挂起通道。 限制此数字可以减少资源使用,尤其是在资源受限的环境中。

      [Bitcoin]
      bitcoin.active=1
      bitcoin.node=bitcoind
      bitcoin.bitcoind.rpcuser=
      bitcoin.bitcoind.rpcpass=
      bitcoin.bitcoind.rpchost=localhost:8332 # 或您的比特币节点地址
      bitcoin.bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332
      bitcoin.bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333

      bitcoin.active=1 启用比特币后端。
      bitcoin.node=bitcoind 指定 LND 将使用 Bitcoin Core 作为比特币节点。 其他选项包括 neutrino (LND 内置的轻量级客户端)。
      bitcoin.bitcoind.rpcuser= bitcoin.bitcoind.rpcpass= 指定用于连接到 Bitcoin Core 节点的 RPC 用户名和密码。 你需要在 Bitcoin Core 的配置文件 ( bitcoin.conf ) 中设置这些凭据。
      bitcoin.bitcoind.rpchost=localhost:8332 指定 Bitcoin Core 节点的主机名和端口。 如果 Bitcoin Core 在不同的机器上运行,请将其更改为该机器的 IP 地址和端口。
      bitcoin.bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 bitcoin.bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 指定 Bitcoin Core 用于发布新区块和交易的 ZMQ 地址。 确保 Bitcoin Core 节点配置为使用 ZMQ,并且端口与此处指定的端口匹配。 启用 ZMQ 可以使 LND 节点更快地响应新的链上事件。

      [Lightning]
      autopilot.active=0 # 暂时关闭自动通道管理,以便手动控制

      autopilot.active=0 禁用自动驾驶仪。 自动驾驶仪自动管理通道创建和维护。 禁用自动驾驶仪允许你手动控制通道,这对于测试或需要特定通道配置的场景很有用。 自动通道管理能够方便用户,特别是对于不熟悉闪电网络的用户,但关闭后能更细致地控制节点的行为。

    • 确保 是您的 Bitcoin Core 节点的 RPC 用户名和密码。 这些凭据在 bitcoin.conf 文件中配置,并且 LND 需要它们才能与 Bitcoin Core 节点进行身份验证。

    • 如果您的 Bitcoin Core 节点不在本地运行,请修改 bitcoin.bitcoind.rpchost 为正确的地址。 确保防火墙允许 LND 节点连接到 Bitcoin Core 节点。

    启动 LND:

    • 在命令行界面,通过执行以下命令启动 LND 节点:

      lnd

      这条命令会指示 LND 守护进程开始运行。确保你已配置好 lnd.conf 文件,其中包含了必要的网络参数、钱包设置以及其他自定义选项。配置文件通常位于用户主目录下的 .lnd 文件夹中。你可以使用 --configfile 参数指定自定义的配置文件路径,例如: lnd --configfile=/path/to/your/lnd.conf

    • LND 启动后,将尝试与比特币网络建立连接,并开始同步区块链数据。这是一个资源密集型操作,涉及到下载和验证大量的区块数据。根据你的网络速度和硬件性能,初始同步过程可能需要数小时甚至数天才能完成。可以使用 lncli getinfo 命令来监控同步进度,其中 synced_to_chain 字段会显示当前节点已经同步到的区块高度。为了加速同步,可以考虑使用来自可信来源的区块链快照,并配置 LND 使用该快照进行初始引导。

    创建闪电网络钱包:

    • 首次启动 LND(Lightning Network Daemon)后,如果系统检测到未存在钱包数据,则需要初始化一个新的闪电网络钱包。此步骤是后续使用闪电网络功能的先决条件。

    • 通过命令行界面(CLI)执行以下命令来创建新的钱包实例:

      lncli create

      lncli 是 LND 的命令行客户端, create 命令用于触发钱包创建流程。请确保您已正确安装并配置 LND 环境。

    • LND 将提示您设置钱包密码,并生成一个由多个单词组成的助记词(也称为恢复短语或种子短语)。

      • 钱包密码: 用于加密您的钱包文件,每次启动 LND 或执行敏感操作时都需要输入。请选择一个强度足够高的密码,并牢记于心。
      • 助记词: 是恢复钱包的唯一方式。如果您的钱包文件丢失、损坏或密码遗忘,助记词可以用来重建您的钱包及其中的资金。务必将助记词以安全的方式备份,例如抄写在纸上并保存在安全的地方。切勿将助记词以电子方式存储或分享给任何人,以防泄露。

      请务必理解,任何拥有您的密码和助记词的人都可以完全控制您的钱包和资金。

    • 成功创建钱包后,LND 会生成您的钱包地址和公钥。

      • 钱包地址: 用于接收闪电网络通道中的资金。您可以将此地址分享给他人,以便他们向您发送比特币。
      • 公钥: 用于验证您的身份和交易。公钥不需要保密,可以公开分享。

      请妥善保管您的钱包文件,通常存储在 LND 的数据目录下。定期备份您的钱包文件也是一个好习惯,以防止数据丢失。

    三、连接到闪电网络

    1. 要开始使用闪电网络,您需要一个支持闪电网络的钱包。这些钱包分为几种类型,包括移动钱包、桌面钱包和硬件钱包集成。选择时,请考虑易用性、安全性、以及与您现有比特币设置的兼容性。一些流行的选项包括Phoenix Wallet、Eclair Wallet和Zeus Wallet,它们提供了不同的功能和用户体验。您需要在钱包中存入少量比特币,以便开启支付通道,这些比特币将锁定在通道中,用于进行快速和低成本的交易。

    获取 LND 节点信息:

    • 运行以下命令获取您的 LND 节点信息,该信息对于连接到您的节点至关重要。通过使用 Lightning Network 命令行界面 ( lncli ),您可以访问节点的关键参数,包括公钥和网络地址:

      lncli getinfo

    • 复制 identity_pubkey uris 的值。 identity_pubkey 代表您节点的唯一公钥,其他节点使用此密钥来验证您的身份并安全地与您建立连接。 uris 包含节点的可访问网络地址,其他节点使用此地址找到并连接到您的节点。 uris 通常包含 IP 地址和端口号,也可能包含域名,具体取决于节点的配置方式。

    连接到其他节点:

    • 要参与闪电网络并与其他节点建立通道,您需要获取目标节点的信息。这包括其公钥,该公钥唯一标识该节点,以及网络地址,以便您的节点可以找到并连接到它。这些信息通常可以从专门的闪电网络资源站点、社区论坛、以及闪电网络节点列表服务中获取。务必验证信息的准确性,确保连接到可信的节点。
    • 使用 lncli connect 命令可以建立与指定节点的连接。此命令告知您的闪电网络节点尝试与提供的公钥和地址对应的节点建立连接。此命令的语法如下:

      lncli connect @

      以下是一个示例,展示了如何使用 lncli connect 命令连接到一个节点:

      lncli connect 026f8e00b16c8ef25928b46b1f1256c5d15d73234c5e1b150bd6f49121f4092b28@192.168.1.100:9735

    • 请务必将命令中的 替换为您希望连接的节点的完整公钥,该公钥通常是一长串十六进制字符。同样,将 替换为节点的网络地址,它由IP地址或域名以及端口号组成。常见的闪电网络端口是9735。确保公钥和地址准确无误,否则连接尝试将失败。连接成功后,您就可以进一步建立支付通道,并开始在闪电网络中进行交易。请注意,建立连接只是第一步,要实际使用闪电网络,还需要建立通道并存入资金。

    四、建立闪电网络通道

    1. 建立闪电网络通道是参与闪电网络交易的关键步骤,它允许用户在链下进行快速、低成本的比特币交易。通道的建立需要在比特币主链上进行一笔交易,这笔交易会将一定数量的比特币锁定在通道中,为通道的后续运作提供资金基础。锁定资金的多少,取决于用户希望在通道内进行交易的规模和频率。

    打开通道:

    • 运行以下命令打开一个新的闪电网络通道:

      lncli openchannel --node_pubkey= --local_amt=

    • 替换 为您希望与之建立闪电网络通道的节点的公钥。 节点的公钥是其在闪电网络中的唯一标识符,通常可以在节点信息页面或通过其他渠道获得。 务必仔细核对公钥的准确性,错误的公钥将导致无法成功建立通道。

    • 替换 为您希望锁定在该通道中的比特币数量,单位为聪 (satoshi)。 每个比特币等于 1 亿聪 (1 BTC = 100,000,000 satoshis)。 您锁定的比特币将构成通道的初始容量,决定了您可以通过该通道进行交易的最大金额。

      通道容量越大,您可以进行的单笔交易金额上限就越高。 然而,更大的通道也意味着更多的资金锁定在通道中,可能会降低资金的流动性。 因此,建议根据您的实际交易需求和风险承受能力选择一个合理的通道容量。 例如, 0.01 BTC (即 1,000,000 satoshis) 是一个常见的起始选择。

      例如:

      lncli openchannel --node_pubkey=026f8e00b16c8ef25928b46b1f1256c5d15d73234c5e1b150bd6f49121f4092b28 --local_amt=1000000

    • 打开通道需要将一笔比特币交易广播到比特币网络,这会产生一定的交易手续费。 LND (Lightning Network Daemon) 会自动估算当前比特币网络的拥堵情况,并设置一个合理的交易手续费,以确保您的通道开启交易能够尽快被矿工打包并确认。

    确认通道:

    • 打开闪电网络通道后,您需要等待比特币网络对该通道的Funding交易进行确认。这个过程并非即时完成,而是依赖于比特币网络的拥堵程度和交易费用设置。通常情况下,确认时间可能从几分钟到数小时不等。耐心等待是成功建立通道的关键。比特币区块浏览器可以用于查询Funding交易的确认状态,输入交易ID即可。
    • 您可以使用命令行工具 lncli 查看通道状态。这是一个常用的工具,可以帮助您管理闪电网络节点和通道。

      运行以下命令查看通道状态:

      lncli listchannels

      该命令会列出所有您参与的通道,包括通道ID、对方节点信息、通道容量、以及最重要的状态信息。您可以仔细检查输出结果,确认通道是否处于活动状态。 lncli 命令提供了丰富的参数和选项,可以根据需要进行定制,例如过滤特定状态的通道。

    • lncli listchannels 命令的输出结果中,对应通道的状态字段显示为 "active" 时,这意味着通道已成功建立并可以使用。 “active”状态表明通道Funding交易已在比特币网络中获得足够的确认,并且通道双方都已确认该通道可用。 您现在可以开始通过该通道进行闪电网络支付,享受快速和低费用的交易体验。 在通道处于活动状态之前,请勿尝试通过该通道发送付款。

    五、进行闪电网络支付

    1. 使用支持闪电网络的钱包发起支付。闪电网络钱包通常集成了支付功能,用户只需输入收款方的闪电网络发票或扫描其二维码即可。闪电网络发票包含了支付金额、收款节点信息以及支付请求的签名等关键数据,确保支付的安全性和准确性。

    获取支付请求(Invoice):

    • 接收方需要生成一个支付请求(Invoice),其中包含支付金额、接收方节点信息(例如公钥哈希或节点ID),以及可选的支付说明。支付请求本质上是一个编码后的字符串,包含了所有必要的信息,以便付款方可以安全地发起支付。
    • 接收方可以使用 lncli 命令行工具或者相关的 Lightning 网络客户端库生成支付请求。 lncli 是 LND (Lightning Network Daemon) 的命令行界面。

      使用 lncli 命令生成支付请求的典型命令如下:

      lncli addinvoice --memo= --value= --expiry=

    • 替换 为支付说明,这可以是一段描述支付内容的文本,方便付款人识别。替换 为支付金额,单位是 satoshi(聪,比特币的最小单位,1 比特币等于 1 亿聪)。 指定invoice的过期时间,如果不指定,则使用默认值。

      重要提示:为了提高安全性,还可以指定一个 preimage (付款密钥哈希) 使用 --preimage 参数,该 preimage 将会在付款时提供,用于验证付款的正确性,防止重放攻击。

    • 例如:

      lncli addinvoice --memo="Payment for coffee" --value=5000 --expiry=3600

      上述命令创建了一个支付请求,说明是 "Payment for coffee", 金额为 5000 satoshis,过期时间为3600秒(1小时)。

    • 该命令将返回一个 JSON 格式的响应,其中包含多个字段。 其中,最重要的字段是 `payment_request`,这是一个 BOLT-11 编码的字符串,包含了支付请求的所有信息,可以分享给付款人。响应可能还包含 payment_hash (支付哈希), 用于后续查询支付状态。

      例如:

      { "payment_request": "lnbc1u1pdz90unpp5m8734q448c0354w9640d88h70406m409h6m6s906t708x2qdzf0vq6m7n50f9x8y6m2q6s4m7d6y3s7d6j0g0z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z0m0d6z