[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\nbitcoin: bitcoin:bc1qnx8julmud2vqdqngxw9rmuv3js67kq9rzvtmm5\nlnurl: lnurl:cmd@stacker.news\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# nyc\ncoverage\n.nyc_output\n\n# Dependency directories\nnode_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n.yarn*\n\n# NPM config\n.npmrc\n\n# Env config\n.env*\n\n# Distributions\ndist\n\ntest/data\n"
  },
  {
    "path": "LICENSE",
    "content": "Creative Commons Legal Code\n\nCC0 1.0 Universal\n\n    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE\n    LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN\n    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS\n    INFORMATION ON AN \"AS-IS\" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES\n    REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS\n    PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM\n    THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED\n    HEREUNDER.\n\nStatement of Purpose\n\nThe laws of most jurisdictions throughout the world automatically confer\nexclusive Copyright and Related Rights (defined below) upon the creator\nand subsequent owner(s) (each and all, an \"owner\") of an original work of\nauthorship and/or a database (each, a \"Work\").\n\nCertain owners wish to permanently relinquish those rights to a Work for\nthe purpose of contributing to a commons of creative, cultural and\nscientific works (\"Commons\") that the public can reliably and without fear\nof later claims of infringement build upon, modify, incorporate in other\nworks, reuse and redistribute as freely as possible in any form whatsoever\nand for any purposes, including without limitation commercial purposes.\nThese owners may contribute to the Commons to promote the ideal of a free\nculture and the further production of creative, cultural and scientific\nworks, or to gain reputation or greater distribution for their Work in\npart through the use and efforts of others.\n\nFor these and/or other purposes and motivations, and without any\nexpectation of additional consideration or compensation, the person\nassociating CC0 with a Work (the \"Affirmer\"), to the extent that he or she\nis an owner of Copyright and Related Rights in the Work, voluntarily\nelects to apply CC0 to the Work and publicly distribute the Work under its\nterms, with knowledge of his or her Copyright and Related Rights in the\nWork and the meaning and intended legal effect of CC0 on those rights.\n\n1. Copyright and Related Rights. A Work made available under CC0 may be\nprotected by copyright and related or neighboring rights (\"Copyright and\nRelated Rights\"). Copyright and Related Rights include, but are not\nlimited to, the following:\n\n  i. the right to reproduce, adapt, distribute, perform, display,\n     communicate, and translate a Work;\n ii. moral rights retained by the original author(s) and/or performer(s);\niii. publicity and privacy rights pertaining to a person's image or\n     likeness depicted in a Work;\n iv. rights protecting against unfair competition in regards to a Work,\n     subject to the limitations in paragraph 4(a), below;\n  v. rights protecting the extraction, dissemination, use and reuse of data\n     in a Work;\n vi. database rights (such as those arising under Directive 96/9/EC of the\n     European Parliament and of the Council of 11 March 1996 on the legal\n     protection of databases, and under any national implementation\n     thereof, including any amended or successor version of such\n     directive); and\nvii. other similar, equivalent or corresponding rights throughout the\n     world based on applicable law or treaty, and any national\n     implementations thereof.\n\n2. Waiver. To the greatest extent permitted by, but not in contravention\nof, applicable law, Affirmer hereby overtly, fully, permanently,\nirrevocably and unconditionally waives, abandons, and surrenders all of\nAffirmer's Copyright and Related Rights and associated claims and causes\nof action, whether now known or unknown (including existing as well as\nfuture claims and causes of action), in the Work (i) in all territories\nworldwide, (ii) for the maximum duration provided by applicable law or\ntreaty (including future time extensions), (iii) in any current or future\nmedium and for any number of copies, and (iv) for any purpose whatsoever,\nincluding without limitation commercial, advertising or promotional\npurposes (the \"Waiver\"). Affirmer makes the Waiver for the benefit of each\nmember of the public at large and to the detriment of Affirmer's heirs and\nsuccessors, fully intending that such Waiver shall not be subject to\nrevocation, rescission, cancellation, termination, or any other legal or\nequitable action to disrupt the quiet enjoyment of the Work by the public\nas contemplated by Affirmer's express Statement of Purpose.\n\n3. Public License Fallback. Should any part of the Waiver for any reason\nbe judged legally invalid or ineffective under applicable law, then the\nWaiver shall be preserved to the maximum extent permitted taking into\naccount Affirmer's express Statement of Purpose. In addition, to the\nextent the Waiver is so judged Affirmer hereby grants to each affected\nperson a royalty-free, non transferable, non sublicensable, non exclusive,\nirrevocable and unconditional license to exercise Affirmer's Copyright and\nRelated Rights in the Work (i) in all territories worldwide, (ii) for the\nmaximum duration provided by applicable law or treaty (including future\ntime extensions), (iii) in any current or future medium and for any number\nof copies, and (iv) for any purpose whatsoever, including without\nlimitation commercial, advertising or promotional purposes (the\n\"License\"). The License shall be deemed effective as of the date CC0 was\napplied by Affirmer to the Work. Should any part of the License for any\nreason be judged legally invalid or ineffective under applicable law, such\npartial invalidity or ineffectiveness shall not invalidate the remainder\nof the License, and in such case Affirmer hereby affirms that he or she\nwill not (i) exercise any of his or her remaining Copyright and Related\nRights in the Work or (ii) assert any associated claims and causes of\naction with respect to the Work, in either case contrary to Affirmer's\nexpress Statement of Purpose.\n\n4. Limitations and Disclaimers.\n\n a. No trademark or patent rights held by Affirmer are waived, abandoned,\n    surrendered, licensed or otherwise affected by this document.\n b. Affirmer offers the Work as-is and makes no representations or\n    warranties of any kind concerning the Work, express, implied,\n    statutory or otherwise, including without limitation warranties of\n    title, merchantability, fitness for a particular purpose, non\n    infringement, or the absence of latent or other defects, accuracy, or\n    the present or absence of errors, whether or not discoverable, all to\n    the greatest extent permissible under applicable law.\n c. Affirmer disclaims responsibility for clearing rights of other persons\n    that may apply to the Work or any use thereof, including without\n    limitation any person's Copyright and Related Rights in the Work.\n    Further, Affirmer disclaims responsibility for obtaining any necessary\n    consents, permissions or other rights required for any use of the\n    Work.\n d. Affirmer understands and acknowledges that Creative Commons is not a\n    party to this document and has no duty or obligation with respect to\n    this CC0 or use of the Work.\n"
  },
  {
    "path": "README.md",
    "content": "# Tapscript\n\nA basic library for working with Taproot, Schnorr Signatures, and Bitcoin transactions.\n\n> Note: For nodejs users, please upgrade to version 19+ for globalThis support.\n\n## Introduction\n\nTapscript uses the latest feature upgrade to Bitcoin called Taproot. If you are new to Bitcoin or the Taproot upgrade, please continue reading for a brief overview of how it works. This library will be easier to follow if you know what taproot is doing under the hood.\n\nIf you already have a good understanding of Bitcoin and Taproot, feel free to skip ahead by clicking [here](#tool-index).\n\n## What is Taproot?\n\nBitcoin uses a simple scripting language (called Bitcoin Script) that allows you to lock up coins into a contract. These contracts are published to the blockchain and enforced by all nodes in the network.\n\nIn order to settle a contract (and claim its coins), you are required to publish the *entire* contract, including parts that are not relevant to the settlement. This is expensive and wasteful, plus it leaks information that could have otherwise been kept private.\n\nTaproot is a new way to publish these contracts to the blockchain that fixes the above concerns. It allows you to settle contracts by publishing only the portion of the contract that is relevant. This means smaller transactions, cheaper fees, and better privacy guarantees for the contract as a whole.\n\nTaproot also comes with many other benefits, including:\n\n * It drastically simplifies the flow and logic of writing a contract.\n * You can create large, complex contracts that only need a small transaction to settle.\n * Commitments to data and other arbitrary things can be thrown into your contract for free.\n * The new schnorr-based signature format lets you do some crazy cool stuff (BIP340).\n\nRead more about the Taproot upgrade in 2019 [here](https://cointelegraph.com/bitcoin-for-beginners/a-beginners-guide-to-the-bitcoin-taproot-upgrade).\n\n## How does Taproot work?\n\nTaproot uses a simple trick involving something called a \"merkle tree\".\n\n```\n                hash(ab, cd)                  <- Final hash    (the root)\n              /             \\                \n      hash(a, b)             hash(c, d)       <- Combined hash (the branches)\n     /          \\           /          \\    \n    hash(a) hash(b)        hash(c) hash(d)    <- Initial hash  (the leaves)\n[ script(a), script(b), script(c), script(d) ]  \n```\n\nA merkle tree is simply a list of data that is reduced down into a single hash value. We do this by hashing values together in pairs of two, repeatedly, until we are naturally left with one value (the root).\n\nThe great thing about merkle trees is that you can use the root hash to prove that a piece of data (such as a script) was included somewhere in the tree, without having to reveal the entire tree.\n\nFor example, to prove that script(a) exists in the tree, we simply provide hash(b) and hash(c, d). This is all the information we need to recreate the root hash(ab, cd). We do not reveal any of the other scripts.\n\nThis allows us to break up a contract into many scripts, then lock coins to the root hash of our combined scripts. To redeem coins, we simply need to provide one of the scripts, plus a 'path' of hashes that lead us to the root hash of the tree.\n\n## About Key Tweaking\n\nAnother clever trick that Taproot uses, is something called \"key tweaking\".\n\nIn order to create a pair of keys used for signatures, we start with a secret number, or \"key\". We then multiply this key by a very large prime number, called a \"generator\" (G). This process is done in a way that is computationally impossible to reverse without knowing the secret. The resulting number then becomes our public key.\n\n```\nseckey * G => pubkey\n```\n\nWe use a special set of numbers when making key-pairs, so that some arithmetic still works between the keys, without breaking their secret relationship with G. This is how we produce signatures and proofs.\n\n```\nseckey +    randomkey    +    msg    = signature      <= Does not reveal seckey.\npubkey + (randomkey * G) + (msg * G) = signature * G  <= Proves that seckey was used.\n```\n\nKey tweaking is just an extention of this. We use a piece of data to \"tweak\" both keys in our key-pair, then use the modified keys to sign and verify transactions.\n\n```\nseckey +    tweak    = tweaked_seckey\npubkey + (tweak * G) = tweaked_pubkey\n```\n\nLater, we can choose to reveal the original public key and tweak, as proof that both were used to construct the modified key. Or we can simply choose to sign using the modified key, and not reveal anything!\n\nTaproot uses key tweaking in order to lock coins to our pubkey + root of our tree. This provides us with two paths for spending coins:\n\n * Using the tweaked pubkey (without revealing anything).\n * Using the interal pubkey + script + proof.\n\n> Note: the \"proof\" is the path of hashes we described earlier, which is needed to recompute the root hash.\n\nIf you want to eliminate the key-spending path (so that a script *must* be used to redeem funds), you can replace the pubkey with a random number. However, it is best to use a number that everyone can verify has an unknown secret key. One example of such a number is the following:\n\n```js\n// BIP0341 specifies using the following pubkey value for script-only contracts.\n// It is created by hashing the DER encoded coordinates of secp256k1 base point G:\n'0250929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0'\n// Since this pubkey was generated using a hash function, there is no feasible way \n// to compute what the matching private key would be.\n```\n\n## Tool Index\n\nThis library provides a suite of tools for working with scripts, taproot, key tweaking, signatures and transactions. Use the links below to jump to the documentation for a certain tool.\n\n[**Address Tool**](#address-tool)  \nEncode, decode, check, and convert various address types.  \n[**Script Tool**](#script-tool)  \nEncode scripts into hex, or decode into a script array.  \n[**Signer Tool**](#signer-tool)  \nProduce signatures and validate signed transactions.  \n[**Tap Tool**](#tap-tool)  \nBuild, tweak, and validate trees of data / scripts.  \n[**Tx Tool**](#tx-tool)  \nEncode transactions into hex, or decode into a JSON object.\n\n### About Buff\n\nThis library makes heavy use of the [Buff](https://github.com/cmdruid/buff-utils) tool for converting between data types. Buff is an extention of the Uint8Array type, so all Buff objects can naturally be treated as Uint8Array objects. Buff objects however incude an extensive API for converting into different types (*for ex: buff.hex for hex strings*). Please check the above link for more information on how to use Buff.\n\n### Import\n\nExample import into a browser-based project:\n```html\n<script src=\"https://unpkg.com/@cmdcode/tapscript\"></script>\n<script> const { Address, Script, Signer, Tap, Tx } = window.tapscript </script>\n```\nExample import into a commonjs project:\n```ts\nconst { Address, Script, Signer, Tap, Tx } = require('@cmdcode/tapscript')\n```\nExample import into an ES module project:\n```ts\nimport { Address, Script, Signer, Tap, Tx } from '@cmdcode/tapscript'\n```\n\n### Address Tool\n\nThis tool allows you to encode, decode, check, an convert various address types.\n\n```ts\nAddress = {\n  // Work with Pay-to-Pubkey-Hash addresses (Base58 encoded).\n  p2pkh  : => AddressTool,\n  // Work with Pay-to-Script-Hash addresses (Base58 encoded).\n  p2sh   : => AddressTool,\n  // Work with Pay-to-Witness PubKey-Hash addresses (Bech32 encoded).\n  p2wpkh : => AddressTool,\n  // Work with Pay-to-Witness Script-Hash addresses (Bech32 encoded).\n  p2wsh  : => AddressTool,\n  // Work with Pay-to-Taproot addresses (Bech32m encoded).\n  p2tr   : => AddressTool,\n  // Decode any address format into a detailed object.\n  decode   : (address : string) => AddressData,\n  // Convert any address into its scriptPubKey format.\n  toScriptPubKey : (address : string) => Buff\n}\n\ninterface AddressTool {\n  // Check if an address is valid.\n  check  : (address : string, network ?: Networks) => boolean\n  // Decode an address into a pubkey hash or script hash.\n  decode : (address : string, network ?: Networks) => Buff\n  // Convert a key or script into the proper hash.\n  hash   : (input : Bytes | ScriptData) => Buff\n  // Encode a pubkey hash or script hash into an address.\n  encode : (input : Bytes,  network ?: Networks) => string\n  // Return the scriptPubKey script for an address type.\n  scriptPubKey : (input : string) => string[]\n  // Return an address based on a public key (PKH type addresses only).\n  fromPubKey : (pubkey : Bytes, network ?: Networks) => string\n  // Return an address based on a script key (SH type addresses only).\n  fromScript : (script : ScriptData, network ?: Networks) => string\n}\n\ninterface AddressData {\n  data    : Buff\n  network : Networks\n  prefix  : string\n  script  : string[]\n  type    : keyof AddressTools\n}\n\ntype Networks = 'main' | 'testnet' | 'signet' | 'regtest'\n```\n\n#### Examples\n\nExample of using the main `Address` API.\n\n```ts\nconst address = 'bcrt1q738hdjlatdx9xmg3679kwq9cwd7fa2c84my9zk'\n// You can decode any address, extract data, or convert to a scriptPubKey format.\nconst decoded = Address.decode(address)\n// Example of the decoded data object.\n{ \n  prefix  : 'bcrt1q', \n  type    : 'p2w', \n  network : 'regtest', \n  data    : 'f44f76cbfd5b4c536d11d78b6700b8737c9eab07',\n  script  : [ 'OP_0', 'f44f76cbfd5b4c536d11d78b6700b8737c9eab07' ]\n}\n// You can also quickly convert between address and scriptPubKey formats.\nconst bytes = Address.toScriptPubKey(address)\n// Bytes: 0014f44f76cbfd5b4c536d11d78b6700b8737c9eab07\nconst address = Address.fromScriptPubKey(scriptPubKey)\n// Address : bcrt1q738hdjlatdx9xmg3679kwq9cwd7fa2c84my9zk\n```\n\nExample of using the AddressTool API for a given address type.\n\n```ts\n// Example 33-byte public key.\nconst pubkey  = '03d5af2a3e89cb72ff9ca1b36091ca46e4d4399abc5574b13d3e56bca6c0784679'\n// You can encode / decode / convert keys and script hashes.\nconst address = Address.p2wpkh.fromPubKey(pubkey, 'regtest')\n// Address: bcrt1q738hdjlatdx9xmg3679kwq9cwd7fa2c84my9zk\nconst address = Address.p2wpkh.encode(keyhash, 'regtest')\n// Address: bcrt1q738hdjlatdx9xmg3679kwq9cwd7fa2c84my9zk\nconst bytes   = Address.p2wpkh.decode(address)\n// KeyHash: f44f76cbfd5b4c536d11d78b6700b8737c9eab07\nconst script  = Address.p2wpkh.scriptPubKey(bytes)\n// script: script: [ 'OP_0', 'f44f76cbfd5b4c536d11d78b6700b8737c9eab07' ]\n```\n\n### Script Tool\n\nThis tool helps with parsing / serializing scripts.\n\n```ts\nScript = {\n  // Encode a JSON formatted script into hex.\n  encode : (script : ScriptData, varint = true) => string,\n  // Decode a hex formatted script into JSON.\n  decode : (script : string, varint = false)    => ScriptData\n  // Normalize script / data to a particular format:\n  fmt : {\n    // Convert script to opcodes / hex data (asm format).\n    toAsm()   => string[]  (asm format).\n    // Convert script to bytes (script hex).\n    toBytes() => Buff\n     // Convert non-script witness data to bytes.\n    toParam() => Buff  \n  }\n}\n```\n\n### Signer Tool.\n\nThis tool helps with signatures and validation.\n\n```ts\nSigner.taproot = {\n  // Calculate the signature hash for a transaction.\n  hash : (\n    txdata  : TxData | Bytes,\n    index   : number,\n    config  : HashConfig = {}\n  ) => Uint8Array,\n  // Sign a transaction using your *tweaked* private key.\n  sign : (\n    seckey  : Bytes,\n    txdata  : TxData | Bytes,\n    index   : number,\n    config  : HashConfig = {}\n  ) => Uint8Array,\n  // Verify a transaction using the included tapkey (or specify a pubkey).\n  verify : (\n    txdata  : TxData | Bytes,\n    index   : number,\n    config  : HashConfig = {}\n  ) => boolean\n}\n\ninterface HashConfig {\n  extension     ?: Bytes    // Hash and sign using this tapleaf.\n  pubkey        ?: Bytes    // Verify using this pubkey instead of the tapkey.\n  script        ?: Bytes    // Hash and sign using this script (for segwit spends).\n  sigflag       ?: number   // Set the signature type flag.\n  separator_pos ?: number   // If using OP_CODESEPARATOR, specify the latest opcode position.\n  extflag       ?: number   // Set the extention version flag (future use).\n  key_version   ?: number   // Set the key version flag (future use).\n  throws        ?: boolean  // Should throw an exception on failure.\n}\n```\n\n#### Example\n\nExample of a basic pay-to-taproot key spend (similar to pay-to-pubkey):\n\n```ts\n// Sample secret / public key pair.\nconst seckey  = '730fff80e1413068a05b57d6a58261f07551163369787f349438ea38ca80fac6'\nconst pubkey  = '0307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba3'\n\n// For key-spends, we need to tweak both the secret key and public key.\nconst [ tseckey ] = Tap.getSecKey(seckey)\nconst [ tpubkey ] = Tap.getPubKey(pubkey)\n\n// Our taproot address is the encoded version of our public tapkey.\nconst address = Address.p2tr.encode(tpubkey, 'regtest')\n\n// NOTE: For the next step, you need to send 100_000 sats to the above address.\n// Make note of the txid of this transaction, plus the index of the output that\n// you are spending.\n\nconst txdata = Tx.create({\n  vin  : [{\n    // The txid of your funding transaction.\n    txid: 'fbde7872cc1aca4bc93ac9a923f14c3355b4216cac3f43b91663ede7a929471b',\n    // The index of the output you are spending.\n    vout: 0,\n    // For Taproot, we need to specify this data when signing.\n    prevout: {\n      // The value of the output we are spending.\n      value: 100000,\n      // This is the script that our taproot address decodes into.\n      scriptPubKey: [ 'OP_1', tpubkey ]\n    },\n  }],\n  vout : [{\n    // We are locking up 99_000 sats (minus 1000 sats for fees.)\n    value: 99000,\n    // We are locking up funds to this address.\n    scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n  }]\n})\n\n// For this example, we are signing for input 0.\n\n// Provide your tweaked secret key with the transaction, \n// plus the index # of the input you are signing for.\nconst sig = Signer.taproot.sign(tseckey, txdata, 0)\n\n// Add your signature to the witness data for that input.\ntxdata.vin[0].witness = [ sig ]\n\n// For verification, provided your \nawait Signer.taproot.verify(txdata, 0, { throws: true })\n\nconsole.log('Your address:', address)\nconsole.log('Your txhex:', Tx.encode(txdata).hex)\n```\n\nYou can find more examples in the main **Examples** section further down.\n\n> Note: There is also an identical `Signer.segwit` tool for signing and validating segwit (BIP0143) transactions. The segwit signer currently does not support the use of OP_CODESEAPRATOR. Any scripts containing this opcode will throw an exception by default.\n\n### Tap Tool\n\n```ts\nTap = {\n  // Returns the tweaked public key (and cblock) for a given tree (and target).\n  getPubKey    : (pubkey : Bytes, config ?: TapConfig)  => TapKey,\n  // Returns the tweaked secret key (and cblock) for a given tree (and target).\n  getSecKey    : (seckey : Bytes, config ?: TapConfig)  => TapKey,\n  // Converts a script into a tapleaf (for script-based spending).\n  encodeScript : (script: ScriptData, version?: number) => string,\n  // Checks the validity of a given leaf target and control block.\n  checkPath    : (  \n    tapkey : Bytes, \n    target : Bytes, \n    cblock : Bytes, \n    config ?: TapConfig  \n  ) => boolean,  \n  // Gives access to the various sub-tools (described below).\n  tree  : TreeTool,\n  tweak : TweakTool,\n  util  : UtilTool\n}\n\ninterface TapConfig {\n  isPrivate ?: boolean\n  target    ?: Bytes\n  tree      ?: TapTree\n  throws    ?: boolean\n  version   ?: number\n}\n\ntype TapKey = [\n  tapkey : string,  // The tweaked public key.\n  cblock : string   // The control block needed for spending the tapleaf target.\n]\n```\n\n#### Examples\n\nExample of tapping a key with no scripts (key-spend).\n\n```ts\nconst [ tapkey ] = Tap.getPubKey(pubkey)\n```\n\nExample of tapping a key with a single script and returning a proof.\n\n```ts\n// Encode the script as bytes.\nconst bytes = Script.encode([ 'script' ])\n// Convert the bytes into a tapleaf.\nconst target = Tap.tree.getLeaf(bytes)\n// Provide the tapleaf as a target for generating the proof.\nconst [ tapkey, cblock ] = Tap.getPubKey(pubkey, { target })\n```\n\nExample of tapping a key with many scripts.\n\n```ts\nconst scripts = [\n  [ 'scripta' ],\n  [ 'scriptb' ],\n  [ 'scriptc' ]\n]\n\n// Convert the scripts into an array of tap leaves.\nconst tree = scripts\n  .map(e => Script.encode(e))\n  .map(e => Tap.tree.getLeaf(e))\n\n// Optional: You can also add data to the tree.\nconst bytes = encodeData('some data')\nconst leaf  = Tap.tree.getLeaf(bytes)\ntree.push(leaf)\n\n// Select a target leaf for generating the proof.\nconst target = tree[0]\n\n// Provide the tree and target leaf as arguments.\nconst [ tapkey, cblock ] = Tap.getPubKey(pubkey, { tree, target })\n```\n\n### Tree Tool\n\nThis tool helps with creating a tree of scripts / data, plus the proofs to validate items in the tree.\n\n```ts\nTap.tree = {\n  // Returns a 'hashtag' used for padding. Mainly for internal use.\n  getTag    : (tag : string) => Buff,\n  // Returns a 'tapleaf' used for building a tree. \n  getLeaf   : (data : Bytes, version ?: number) => string,\n  // Returns a 'branch' which combines two leaves (or branches).\n  getBranch : (leafA : string, leafB : string) => string,\n  // Returns the root hash of a tree.\n  getRoot   : (leaves : TapTree) => Buff,\n}\n\n// A tree is an array of leaves, formatted as strings.\n// These arrays can also be nested in multiple layers.\ntype TapTree = Array<string | string[]>\n```\n\n### Tweak Tool\n\nThis tool helps with tweaking public / secret (private) keys.\n\n```ts\nTap.tweak = {\n  // Return a tweaked private key using the provided raw data.\n  getSeckey   : (seckey: Bytes, data ?: Bytes | undefined) => Buff,\n  // Return a tweaked public key using the provided raw data.\n  getPubkey   : (pubkey: Bytes, data ?: Bytes | undefined) => Buff,\n  // Return a 'taptweak' which is used for key tweaking.\n  getTweak    : (key : Bytes, data ?: Bytes, isPrivate ?: boolean) => Buff,\n  // Return a tweaked secret key using the provided tweak.\n  tweakSeckey : (seckey: Bytes, tweak: Bytes) => Buff,\n  // Return a tweaked public key using the provided tweak.\n  tweakPubkey : (seckey: Bytes, tweak: Bytes) => Buff\n}\n```\n\n### Util Tool\n\nThis tool provides helper methods for reading and parsing data related to taproot.\n\n```ts\nTap.util = {\n  readCtrlBlock : (cblock : Bytes) => CtrlBlock,\n  readParityBit : (parity ?: string | number) => number\n}\n\ninterface CtrlBlock {\n  version : number\n  parity  : number\n  intkey  : Buff\n  paths   : string[]\n}\n```\n\n#### Example\n\n```ts\nconst cblock = 'c1187791b6f712a8ea41c8ecdd0ee77fab3e85263b37e1ec18a3651926b3a6cf27'\nconst { intkey, parity, paths, version } = Tap.util.readCtrlBlock(cblock)\n// Expected output, with key formatted as hex instead of bytes (for readability).\n{\n  intkey: '187791b6f712a8ea41c8ecdd0ee77fab3e85263b37e1ec18a3651926b3a6cf27',\n  parity: 3,\n  paths: [],\n  version: 192\n}\n```\n\n### Tx Tool\n\nThis tool helps with parsing / serializing transaction data.\n\n```ts\nTx = {\n  // Create a transaction object from partial JSON. \n  // Any missing fields will be repalced with default values.\n  create : (data : Partial<TxData>) => TxData,\n  // Serialize a JSON transaction into a hex-encoded string.\n  encode : (\n    txdata       : TxData,  // The transaction JSON.\n    omitWitness ?: boolean  // If you wish to omit the witness data.\n  ) => string,\n  // Parse a hex-encoded transaction into a JSON object.\n  decode : (bytes : string | Uint8Array) => TxData,\n  // Normalize transaction data to a particular format.\n  fmt : {\n    // Convert transaction data into JSON format.\n    toJson  : (txdata ?: TxData | Bytes) => TxData,\n    // Convert transaction data into a byte format.\n    toBytes : (txdata ?: TxData | Bytes) => Buff\n  },\n  util : {\n    // Get the transaction Id of a transaction.\n    getTxid : (txdata : TxData | Bytes) => Buff,\n    // Get the size data of a transaction.\n    getTxSize : (txdata : TxData | Bytes) => TxSizeData,\n    // Parse a scriptPubKey and get the type plus hash data.\n    readScriptPubKey : (script : ScriptData) => ScriptPubKeyData,\n    // Parse an array of witness data into named values.\n    readWitness : (witness : ScriptData[])  => WitnessData\n  }\n}\n\ninterface TxData {\n  version  ?: number           // The transaction verion. Defaults to version 2.\n  vin       : InputData[]      // An array of transaction inputs.\n  vout      : OutputData[]     // An array of transaction outputs.\n  locktime ?: LockData         // The locktime of the transaction. Defautls to 0.\n}\n\ninterface InputData {\n  txid : string               // The txid of the UTXO being spent.\n  vout : number               // The output index of the UTXO being spent.\n  prevout   ?: OutputData     // The output data of the UTXO being spent.\n  scriptSig ?: ScriptData     // The ScriptSig field (mostly deprecated).\n  sequence  ?: SequenceData   // The sequence field for the input.\n  witness   ?: ScriptData[]   // An array of witness data for the input.\n}\n\ninterface OutputData {\n  value : number | bigint     // The satoshi value of the output.\n  scriptPubKey : ScriptData   // The locking script data.\n}\n\nexport interface ScriptPubKeyData {\n  type : OutputType\n  data : Buff\n}\n\ninterface WitnessData {\n  annex  : Buff | null  // The annex data (if present) or null.\n  cblock : Buff | null  // The control block (if present) or null.\n  script : Buff | null  // The redeem script (if present) or null.\n  params : Bytes[]      // Any remaining witness arguments.\n}\n\ninterface TxSizeData {\n  size   : number       // Size of the transaction in bytes.\n  bsize  : number       // Base size of the tx (without witness data).\n  vsize  : number       // Size of the tx with witness discount applied.\n  weight : number       // Used to calculate the vsize of the tx.\n}\n\ntype SequenceData = string | number\ntype LockData     = number\ntype ScriptData   = Bytes  | Word[]\ntype Word         = string | number | Uint8Array\ntype Bytes        = string | Uint8Array\n```\n\n#### Transaction Object\n\nThis is an example transaction in JSON format.\n\n```ts\nconst txdata = {\n  version: 2\n  vin: [\n    {\n      txid: '1351f611fa0ae6124d0f55c625ae5c929ca09ae93f9e88656a4a82d160d99052',\n      vout: 0,\n      prevout: { \n        value: 10000,\n        scriptPubkey: '512005a18fccd1909f3317e4dd7f11257e4428884902b1c7466c34e7f490e0e627da'\n        \n      },\n      sequence: 0xfffffffd,\n      witness: []\n    }\n  ],\n  vout: [\n    { \n      value: 9000, \n      address: 'bcrt1pqksclnx3jz0nx9lym4l3zft7gs5gsjgzk8r5vmp5ul6fpc8xyldqaxu8ys'\n    }\n  ],\n  locktime: 0\n}\n```\n\n## Example Transactions\n\nHere are a few partial examples to help demonstrate using the library. Check out the [`test/example/taproot`](test/example/taproot/) directory to see a full implementation of each example.\n\nPlease feel free to contribute more!\n\n### Basic Pay-to-Pubkey Spending\n\nFull example: [keyspend.test.ts](test/example/taproot/keyspend.test.ts)\n\n```ts\n// Create a keypair to use for testing.\nconst secret = 'ccd54b99acec77d0537b01431579baef998efac6b08e9564bc3047b20ec1bb4c'\nconst seckey = new SecretKey(secret, { type: 'taproot' })\nconst pubkey = seckey.pub\n\n// For key spends, we need to get the tweaked versions\n// of the secret key and public key.\nconst [ tseckey ] = Tap.getSecKey(seckey)\nconst [ tpubkey ] = Tap.getPubKey(pubkey)\n\n// Optional: You could also derive the public key from the tweaked secret key.\nconst _tpubkey_example = new SecretKey(tseckey).pub.x.hex\n\n// A taproot address is simply the tweaked public key, encoded in bech32 format.\nconst address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n\n/* NOTE: To continue with this example, send 100_000 sats to the above address.\n  You will also need to make a note of the txid and vout of that transaction,\n  so that you can include that information below in the redeem tx.\n*/ \n\nconst txdata = Tx.create({\n  vin  : [{\n    // Use the txid of the funding transaction used to send the sats.\n    txid: '1ec5b5403bbc7f26a5d3a3ee30d69166a19fa81b49928f010af38fa96986d472',\n    // Specify the index value of the output that you are going to spend from.\n    vout: 1,\n    // Also include the value and script of that ouput.\n    prevout: {\n      // Feel free to change this if you sent a different amount.\n      value: 100_000,\n      // This is what our address looks like in script form.\n      scriptPubKey: [ 'OP_1', tpubkey ]\n    },\n  }],\n  vout : [{\n    // We are leaving behind 1000 sats as a fee to the miners.\n    value: 99_000,\n    // This is the new script that we are locking our funds to.\n    scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n  }]\n})\n\n// For this example, we are signing for input 0 of our transaction,\n// using the tweaked secret key.\nconst sig = Signer.taproot.sign(tseckey, txdata, 0)\n\n// Let's add this signature to our witness data for input 0.\ntxdata.vin[0].witness = [ sig ]\n\n// Check if the signature and transaction are valid.\nconst isValid = await Signer.taproot.verify(txdata, 0)\n```\n### Basic Pay-to-TapScript\n\nFull example: [tapscript.test.ts](test/example/taproot/tapscript.test.ts)\n\n```ts\nconst secret = '0a7d01d1c2e1592a02ea7671bb79ecd31d8d5e660b008f4b10e67787f4f24712'\nconst seckey = new SecretKey(secret, { type: 'taproot' })\nconst pubkey = seckey.pub\n\n// Specify a basic script to use for testing.\nconst script = [ pubkey, 'OP_CHECKSIG' ]\nconst sbytes = Script.encode(script)\n\n// For tapscript spends, we need to convert this script into a 'tapleaf'.\nconst tapleaf = Tap.tree.getLeaf(sbytes)\n\n// Optional: There is a convenience method that converts scripts directly.\nconst _tapleaf = Tap.encodeScript(script)\n\n// Generate a tapkey that includes our leaf script. Also, create a merlke proof \n// (cblock) that targets our leaf and proves its inclusion in the tapkey.\nconst [ tpubkey, cblock ] = Tap.getPubKey(pubkey, { target: tapleaf })\n\n// A taproot address is simply the tweaked public key, encoded in bech32 format.\nconst address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n\n/* NOTE: To continue with this example, send 100_000 sats to the above address.\n  You will also need to make a note of the txid and vout of that transaction,\n  so that you can include that information below in the redeem tx.\n*/ \n\nconst txdata = Tx.create({\n  vin  : [{\n    // Use the txid of the funding transaction used to send the sats.\n    txid: '181508e3be1107372f1ffcbd52de87b2c3e7c8b2495f1bc25f8cf42c0ae167c2',\n    // Specify the index value of the output that you are going to spend from.\n    vout: 0,\n    // Also include the value and script of that ouput.\n    prevout: {\n      // Feel free to change this if you sent a different amount.\n      value: 100_000,\n      // This is what our address looks like in script form.\n      scriptPubKey: [ 'OP_1', tpubkey ]\n    },\n  }],\n  vout : [{\n    // We are leaving behind 1000 sats as a fee to the miners.\n    value: 99_000,\n    // This is the new script that we are locking our funds to.\n    scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n  }]\n})\n\n// For this example, we are signing for input 0 of our transaction,\n// using the untweaked secret key. We are also extending the signature \n// to include a commitment to the tapleaf script that we wish to use.\nconst sig = Signer.taproot.sign(seckey, txdata, 0, { extension: tapleaf })\n\n// Add the signature to our witness data for input 0, along with the script\n// and merkle proof (cblock) for the script.\ntxdata.vin[0].witness = [ sig.hex, script, cblock ]\n\n// Check if the signature is valid for the provided public key, and that the\n// transaction is also valid (the merkle proof will be validated as well).\nconst isValid = await Signer.taproot.verify(txdata, 0, { pubkey })\n```\n\n### Create / Spend from a Tree of Scripts\n\nFull example: [taptree.test.ts](test/example/taproot/taptree.test.ts)\n\n```ts\n// Create a keypair to use for testing.\nconst secret = '0a7d01d1c2e1592a02ea7671bb79ecd31d8d5e660b008f4b10e67787f4f24712'\nconst seckey = new SecretKey(secret, { type: 'taproot' })\nconst pubkey = seckey.pub\n\n// Specify an array of scripts to use for testing.\nconst scripts = [\n  [ 1, 7, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n  [ 2, 6, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n  [ 3, 5, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n  [ 4, 4, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n  [ 5, 3, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n  [ 6, 2, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n  [ 7, 1, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ]\n]\n\n// Convert our array of scripts into tapleaves.\nconst tree = scripts.map(s => Tap.encodeScript(s))\n\n// Pick one of our scripts as a target for spending.\nconst index  = Math.floor(Math.random() * 10) % 7\nconst script = scripts[index]\nconst target = Tap.encodeScript(script)\n\n// Generate a tapkey that includes our tree. Also, create a merlke proof \n// (cblock) that targets our leaf and proves its inclusion in the tapkey.\nconst [ tpubkey, cblock ] = Tap.getPubKey(pubkey, { tree, target })\n\n// A taproot address is simply the tweaked public key, encoded in bech32 format.\nconst address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n\n/* NOTE: To continue with this example, send 100_000 sats to the above address.\n * You will also need to make a note of the txid and vout of that transaction,\n * so that you can include that information below in the redeem tx.\n */ \n\nconst txdata = Tx.create({\n  vin  : [{\n    // Use the txid of the funding transaction used to send the sats.\n    txid: 'e0b1b0aea95095bf7e113c37562a51cb8c3f50f5145c17952e766f7a84fcc5d7',\n    // Specify the index value of the output that you are going to spend from.\n    vout: 0,\n    // Also include the value and script of that ouput.\n    prevout: {\n      // Feel free to change this if you sent a different amount.\n      value: 100_000,\n      // This is what our address looks like in script form.\n      scriptPubKey: [ 'OP_1', tpubkey ]\n    },\n  }],\n  vout : [{\n    // We are leaving behind 1000 sats as a fee to the miners.\n    value: 99_000,\n    // This is the new script that we are locking our funds to.\n    scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n  }]\n})\n\n// For this example, we are signing for input 0 of our transaction,\n// using the untweaked secret key. We are also extending the signature \n// to include a commitment to the tapleaf script that we wish to use.\nconst sig = Signer.taproot.sign(seckey, txdata, 0, { extension: target })\n\n// Add the signature to our witness data for input 0, along with the script\n// and merkle proof (cblock) for the script.\ntxdata.vin[0].witness = [ sig.hex, script, cblock ]\n\n// Check if the signature is valid for the provided public key, and that the\n// transaction is also valid (the merkle proof will be validated as well).\nconst isValid = await Signer.taproot.verify(txdata, 0, { pubkey })\n```\n\n### Create / Publish an Inscription\n\nCreating an inscription is a three-step process:\n 1. We create a script for publishing the inscription, and convert it into a bitcoin address.\n 2. Send funds to the bitcoin address.\n 3. Create a redeem transaction, which claims the previous funds (and publishes the data).\n\nFull example: [inscribe.test.ts](test/example/taproot/inscribe.test.ts)\n\n```ts\n// The 'marker' bytes. Part of the ordinal inscription format.\nconst marker   = Buff.encode('ord')\n/* Specify the media type of the file. Applications use this when rendering \n  * content. See: https://developer.mozilla.org/en-US/docs/Glossary/MIME_type \n  */\nconst mimetype = Buff.encode('image/png')\n// Create a keypair to use for testing.\nconst secret = '0a7d01d1c2e1592a02ea7671bb79ecd31d8d5e660b008f4b10e67787f4f24712'\nconst seckey = new SecretKey(secret, { type: 'taproot' })\nconst pubkey = seckey.pub\n// Basic format of an 'inscription' script.\nconst script  = [ pubkey, 'OP_CHECKSIG', 'OP_0', 'OP_IF', marker, '01', mimetype, 'OP_0', imgdata, 'OP_ENDIF' ]\n// For tapscript spends, we need to convert this script into a 'tapleaf'.\nconst tapleaf = Tap.encodeScript(script)\n// Generate a tapkey that includes our leaf script. Also, create a merlke proof \n// (cblock) that targets our leaf and proves its inclusion in the tapkey.\nconst [ tpubkey, cblock ] = Tap.getPubKey(pubkey, { target: tapleaf })\n// A taproot address is simply the tweaked public key, encoded in bech32 format.\nconst address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n\n/* NOTE: To continue with this example, send 100_000 sats to the above address.\n * You will also need to make a note of the txid and vout of that transaction,\n * so that you can include that information below in the redeem tx.\n */ \n\nconst txdata = Tx.create({\n  vin  : [{\n    // Use the txid of the funding transaction used to send the sats.\n    txid: 'b8ed81aca92cd85458966de90bc0ab03409a321758c09e46090988b783459a4d',\n    // Specify the index value of the output that you are going to spend from.\n    vout: 0,\n    // Also include the value and script of that ouput.\n    prevout: {\n      // Feel free to change this if you sent a different amount.\n      value: 100_000,\n      // This is what our address looks like in script form.\n      scriptPubKey: [ 'OP_1', tpubkey ]\n    },\n  }],\n  vout : [{\n    // We are leaving behind 1000 sats as a fee to the miners.\n    value: 99_000,\n    // This is the new script that we are locking our funds to.\n    scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n  }]\n})\n\n// For this example, we are signing for input 0 of our transaction,\n// using the untweaked secret key. We are also extending the signature \n// to include a commitment to the tapleaf script that we wish to use.\nconst sig = Signer.taproot.sign(seckey, txdata, 0, { extension: tapleaf })\n\n// Add the signature to our witness data for input 0, along with the script\n// and merkle proof (cblock) for the script.\ntxdata.vin[0].witness = [ sig, script, cblock ]\n\n// Check if the signature is valid for the provided public key, and that the\n// transaction is also valid (the merkle proof will be validated as well).\nconst isValid = await Signer.taproot.verify(txdata, 0, { pubkey, throws: true })\n\n// You can publish your transaction data using 'sendrawtransaction' in Bitcoin Core, or you \n// can use an external API (such as https://mempool.space/docs/api/rest#post-transaction).\n```\n\nMore examples to come!\n\n## Development / Testing\n\nThis library uses yarn for package management, tape for writing tests, and rollup for bundling cross-platform compatible code. Here are a few scripts that are useful for development.\n\n```bash\n## Compiles types and builds release candidates in /dist folder.\nyarn build\n## Run any typescript file using real-time compilation.\nyarn start contrib/example.ts\n## Runs all tests listed in test/tape.ts \nyarn test\n## Full macro script for generating a new release candidate.\nyarn release\n```\n\n## Bugs / Issues\n\nIf you run into any bugs or have any questions, please submit an issue ticket.\n\n## Contribution\n\nFeel free to fork and make contributions. Suggestions are welcome!\n\n## Future Roadmap\n\n - Add signature and validation for ecdsa (segwit and earlier).\n - Refactor and stress-test tree compilation with many (many) leaves.\n - Allow arbitrary ordering of tree elements.\n - Write more unit and vector tests (cover all the things).\n\n## Dependencies\n\nThis library contains minimal dependencies.  \n\n**Buff-Utils**  \nThe swiss-army-knife of byte manipulation.  \nhttps://github.com/cmdruid/buff-utils\n\n**Crypto-Utils**  \nUser-friendly cryptography tools.  \nhttps://github.com/cmdruid/crypto-utils\n\n## Resources  \n\n**BIP340 Wiki Page**  \nThis BIP covers schnorr signatures and verification.  \nhttps://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n\n**BIP341 Wiki Page**  \nThis BIP covers the construction of trees, signature hashes, and proofs.  \nhttps://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki\n\n**BIP342 Wiki Page**  \nThis BIP covers changes to opcodes and signature verification.  \nhttps://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki\n\n**Tapscript example using Tap**  \nThis is a guide on how to use a command-line tool called btcdeb and Tap.  \nThis tool will help you create a taproot transaction from scratch, which  \nis great for learning (and to debug any issues with this library :-)).  \nhttps://github.com/bitcoin-core/btcdeb/blob/master/doc/tapscript-example-with-tap.md\n\n## License\n\nUse this library however you want!\n\n## Contact\n\nYou can find me on twitter at `@btctechsupport` or on nostr at `npub1gg5uy8cpqx4u8wj9yvlpwm5ht757vudmrzn8y27lwunt5f2ytlusklulq3`"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@cmdcode/tapscript\",\n  \"version\": \"1.5.3\",\n  \"description\": \"A basic library for working with Tapscript, signatures and Bitcoin transactions.\",\n  \"type\": \"module\",\n  \"main\": \"./dist/main.cjs\",\n  \"unpkg\": \"./dist/bundle.min.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"import\": {\n        \"types\": \"./dist/index.d.ts\",\n        \"default\": \"./dist/module.mjs\"\n      },\n      \"require\": {\n        \"types\": \"./dist/index.d.ts\",\n        \"default\": \"./dist/main.cjs\"\n      }\n    }\n  },\n  \"scripts\": {\n    \"build\": \"rollup -c rollup.config.ts --configPlugin typescript\",\n    \"clean\": \"rm -rf dist/* coverage .nyc_output\",\n    \"types\": \"tsc\",\n    \"load\": \"NODE_OPTIONS='--no-warnings' tsx --tsconfig ./test/tsconfig.json\",\n    \"release\": \"yarn test && yarn clean && yarn types && yarn build\",\n    \"scratch\": \"yarn load test/scratch.ts\",\n    \"test\": \"tsx --tsconfig ./test/tsconfig.json ./test/tape.ts | tap-spec\"\n  },\n  \"keywords\": [\n    \"bitcoin\",\n    \"transaction\",\n    \"psbt\",\n    \"serialize\",\n    \"encode\",\n    \"decode\",\n    \"validate\"\n  ],\n  \"author\": \"Christopher Scott\",\n  \"license\": \"CC-BY-1.0\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/cmdruid/tapscript.git\"\n  },\n  \"publishConfig\": {\n    \"registry\": \"https://registry.npmjs.org\",\n    \"access\": \"public\"\n  },\n  \"files\": [\n    \"README.md\",\n    \"LICENSE\",\n    \"dist\"\n  ],\n  \"devDependencies\": {\n    \"@cmdcode/buff-utils\": \"^1.9.7\",\n    \"@cmdcode/core-cmd\": \"^1.5.37\",\n    \"@cmdcode/crypto-utils\": \"^2.0.2\",\n    \"@cmdcode/keylink\": \"^1.4.3\",\n    \"@noble/curves\": \"^0.9.1\",\n    \"@rollup/plugin-commonjs\": \"^23.0.2\",\n    \"@rollup/plugin-node-resolve\": \"^15.0.1\",\n    \"@rollup/plugin-terser\": \"^0.4.0\",\n    \"@rollup/plugin-typescript\": \"^9.0.2\",\n    \"@types/node\": \"^18.14.0\",\n    \"@types/tape\": \"^4.13.2\",\n    \"rollup\": \"^3.2.3\",\n    \"tap-spec\": \"^5.0.0\",\n    \"tape\": \"^5.6.1\",\n    \"tslib\": \"^2.6.2\",\n    \"tsx\": \"^4.19.2\",\n    \"typescript\": \"^5.1.6\",\n    \"zod\": \"^3.20.6\"\n  }\n}\n"
  },
  {
    "path": "rollup.config.ts",
    "content": "// rollup.config.ts\nimport typescript  from '@rollup/plugin-typescript'\nimport nodeResolve from '@rollup/plugin-node-resolve'\nimport commonjs    from '@rollup/plugin-commonjs'\nimport terser      from '@rollup/plugin-terser'\n\nconst libraryName = 'tapscript'\n\nconst treeshake = {\n\tmoduleSideEffects: false,\n\tpropertyReadSideEffects: false,\n\ttryCatchDeoptimization: false\n}\n\nconst onwarn = warning => {\n\t// eslint-disable-next-line no-console\n\tconsole.error(\n\t\t'Building Rollup produced warnings that need to be resolved. ' +\n\t\t\t'Please keep in mind that the browser build may never have external dependencies!'\n\t);\n\t// eslint-disable-next-line unicorn/error-message\n\tthrow Object.assign(new Error(), warning);\n}\n\nconst tsConfig = { \n  compilerOptions: {\n    declaration: false,\n    declarationDir: null,\n    declarationMap: false\n  }\n}\n\nconst nodeConfig = {\n  input: 'src/index.ts',\n  onwarn,\n  output: [\n    {\n      file      : 'dist/main.cjs',\n      format    : 'cjs',\n      sourcemap : true,\n    },\n    {\n      file      : 'dist/module.mjs',\n      format    : 'es',\n      sourcemap : true,\n      minifyInternalExports: false\n    },\n  ],\n  plugins: [ typescript(tsConfig), nodeResolve(), commonjs() ],\n  strictDeprecations: true,\n  treeshake\n}\n\nconst browserConfig = {\n  input: 'src/index.ts',\n  onwarn,\n  output: [\n    {\n      file      : 'dist/bundle.min.js',\n      format    : 'iife',\n      name      : libraryName,\n      plugins   : [terser()],\n      sourcemap : true\n    },\n  ],\n  plugins: [ \n    typescript(tsConfig), \n    nodeResolve({ browser: true }), \n    commonjs() \n  ],\n  strictDeprecations: true,\n  treeshake\n}\n\nexport default [ nodeConfig, browserConfig ]\n"
  },
  {
    "path": "src/class/Signature/index.ts",
    "content": "export {}"
  },
  {
    "path": "src/class/Transaction/Transaction.ts",
    "content": "import { Buff }     from '@cmdcode/buff-utils'\nimport { hash256 }  from '@cmdcode/crypto-utils'\nimport TxInput      from './TxInput.js'\nimport TxOutput     from './TxOutput.js'\nimport TxLocktime   from './TxLocktime.js'\nimport { Tx }       from '../../lib/tx/index.js'\nimport { Schema }   from '../../schema/check.js'\n\nimport {\n  TxData,\n  TxTemplate\n} from '../../schema/types.js'\n\nexport default class Transaction {\n  readonly _data : TxData\n\n  constructor (\n    txdata : string | Uint8Array | TxTemplate\n  ) {\n    if (typeof txdata === 'string') {\n      txdata = Buff.hex(txdata)\n    }\n\n    if (txdata instanceof Uint8Array) {\n      txdata = Tx.decode(txdata)\n    }\n\n    const schema = Schema.TxData\n    this._data   = schema.parse(Tx.create(txdata))\n  }\n\n  get data () : TxData {\n    return this._data\n  }\n\n  get version () : number {\n    return this.data.version\n  }\n\n  get vin () : TxInput[] {\n    return this.data.vin.map((_e, i) => new TxInput(this.data, i))\n  }\n\n  get vout () : TxOutput[] {\n    return this.data.vout.map((e) => new TxOutput(e))\n  }\n\n  get locktime () : TxLocktime {\n    return new TxLocktime(this.data.locktime)\n  }\n\n  get base () : Buff {\n    return Tx.encode(this.data, true)\n  }\n\n  get buff () : Buff {\n    return Tx.encode(this.data)\n  }\n\n  get raw () : Uint8Array {\n    return this.buff.raw\n  }\n\n  get hex () : string {\n    return this.buff.hex\n  }\n\n  get size () : number {\n    return this.raw.length\n  }\n\n  get bsize () : number {\n    return this.base.length\n  }\n\n  get weight () : number {\n    return this.bsize * 3 + this.size\n  }\n\n  get vsize () : number {\n    const remainder = (this.weight % 4 > 0) ? 1 : 0\n    return Math.floor(this.weight / 4) + remainder\n  }\n\n  get hash () : string {\n    const hash = hash256(this.buff)\n    return hash.reverse().hex\n  }\n\n  get txid () : string {\n    const hash = hash256(this.base)\n    return hash.reverse().hex\n  }\n\n  async export () : Promise<object> {\n    const { size, weight, vsize, hex } = this\n    const txid = this.txid\n    const hash = this.hash\n    return { txid, hash, ...this.data, size, weight, vsize, hex }\n  }\n}\n"
  },
  {
    "path": "src/class/Transaction/TxInput.ts",
    "content": "// import getSigHash from \"../../sighash.js\"\nimport TxScript       from './TxScript.js'\nimport TxSequence     from './TxSequence.js'\nimport TxOutput       from './TxOutput.js'\nimport TxWitness      from './TxWitness.js'\nimport { Signer }     from '../../lib/sig/index.js'\nimport { HashConfig } from '../../lib/sig/types.js'\nimport { readScriptPubKey } from '../../lib/tx/parse.js'\nimport { Bytes, InputData, InputType, TxData } from '../../schema/types.js'\n\nexport default class TxInput {\n  readonly _tx : TxData\n  readonly idx : number\n\n  constructor (txdata : TxData, index : number) {\n    this._tx = txdata\n    this.idx = index\n  }\n\n  get data () : InputData {\n    return this._tx.vin[this.idx]\n  }\n\n  get txid () : string {\n    return this.data.txid\n  }\n\n  get vout () : number {\n    return this.data.vout\n  }\n\n  get prevout () : TxOutput | undefined {\n    return (this.data.prevout !== undefined)\n      ? new TxOutput(this.data.prevout)\n      : undefined\n  }\n\n  get scriptSig () : TxScript {\n    return new TxScript(this.data.scriptSig)\n  }\n\n  get sequence () : TxSequence {\n    return new TxSequence(this.data.sequence)\n  }\n\n  get witness () : TxWitness {\n    return new TxWitness(this.data.witness)\n  }\n\n  get type () : InputType {\n    if (this.prevout !== undefined) {\n      const script = this.prevout.scriptPubKey.raw\n      const { type } = readScriptPubKey(script)\n      if (type === 'p2sh') {\n        const asm = this.scriptSig.asm\n        if (asm[0] === 'OP_0') {\n          if (asm[1].length === 20) {\n            return 'p2w-p2pkh'\n          }\n          if (asm[1].length === 32) {\n            return 'p2w-p2sh'\n          }\n        }\n        return 'p2sh'\n      }\n      return type\n    }\n    return 'raw'\n  }\n\n  sign (seckey : Bytes, config : HashConfig) {\n    if (this.type.startsWith('p2w')) {\n      return Signer.segwit.sign(seckey, this._tx, this.idx, config)\n    }\n    if (this.type.startsWith('p2tr')) {\n      return Signer.taproot.sign(seckey, this._tx, this.idx, config)\n    }\n    if (\n      this.type.startsWith('p2pkh') ||\n      this.type.startsWith('p2sh')\n    ) {\n      throw new Error('This library does not support signing legacy transactions.')\n    }\n    throw new Error('Unable to sign this input type:' + String(this.type))\n  }\n}\n"
  },
  {
    "path": "src/class/Transaction/TxLocktime.ts",
    "content": "import { Buff } from '@cmdcode/buff-utils'\nimport { LockData }  from '../../schema/types.js'\n\nconst LOCKTIME_THRESHOLD = 500000000\n\nexport default class TxLocktime {\n  public value : number\n\n  constructor (value : LockData = 0) {\n    this.value = Buff.bytes(value).num\n  }\n\n  get isTimelock () : boolean {\n    return this.value > LOCKTIME_THRESHOLD\n  }\n\n  get timestamp () : number {\n    return this.isTimelock\n      ? this.value\n      : this.value * 600\n  }\n\n  set timestamp (value : number) {\n    this.value = value\n  }\n\n  get blockheight () : number {\n    return !this.isTimelock\n      ? this.value\n      : Math.floor(this.value / 600)\n  }\n\n  set blockheight (value : number) {\n    this.value = value\n  }\n\n  get estDate () : Date {\n    return this.isTimelock\n      ? new Date(Date.now() + (this.value * 1000))\n      : new Date(Date.now() + (this.value * 600 * 1000))\n  }\n\n  set estDate (date : Date) {\n    this.value = Math.floor((date.getTime() - Date.now()) / 1000)\n  }\n\n  toJSON () : number {\n    return this.value\n  }\n}\n"
  },
  {
    "path": "src/class/Transaction/TxOutput.ts",
    "content": "import TxScript from './TxScript.js'\nimport { readScriptPubKey } from '../../lib/tx/parse.js'\nimport { OutputData, OutputType } from '../../schema/types.js'\n\nexport default class TxOutput {\n  value : bigint\n  scriptPubKey : TxScript\n\n  constructor (txout : OutputData) {\n    this.value = BigInt(txout.value)\n    this.scriptPubKey = new TxScript(txout.scriptPubKey)\n  }\n\n  get type () : OutputType {\n    const { type } = readScriptPubKey(this.scriptPubKey.raw)\n    return type\n  }\n}\n"
  },
  {
    "path": "src/class/Transaction/TxScript.ts",
    "content": "import { Buff }         from '@cmdcode/buff-utils'\nimport { encodeScript } from '../../lib/script/encode.js'\nimport { decodeScript } from '../../lib/script/decode.js'\nimport { ScriptData }   from '../../schema/types.js'\nimport { TapTree }      from '../../lib/tap/index.js'\nimport { hash160, hash256 } from '@cmdcode/crypto-utils'\n\ntype ScriptFormat = 'p2sh' | 'p2w' | 'p2tr'\n\nexport default class TxScript {\n  readonly _buff : Buff\n\n  constructor(\n    script : ScriptData,\n  ) {\n    this._buff = Buff.raw(encodeScript(script))\n  }\n\n  get raw () : Uint8Array {\n    return this._buff.raw\n  }\n\n  get hex () : string {\n    return this._buff.hex\n  }\n\n  get asm () : string[] {\n    return decodeScript(this._buff)\n  }\n\n  getHash (format : ScriptFormat, version ?: number) : string {\n    switch (format) {\n      case 'p2w':\n        return hash256(this._buff).hex\n      case 'p2sh':\n        return hash160(this._buff).hex\n      case 'p2tr':\n        return TapTree.getLeaf(this._buff, version)\n      default:\n        throw new Error('Unrecognized format: ' + format)\n    }\n  }\n\n  toJSON() : string[] {\n    return this.asm ?? []\n  }\n}\n"
  },
  {
    "path": "src/class/Transaction/TxSequence.ts",
    "content": "import { SequenceData } from '../../schema/types.js'\n\nconst MAX_VAL     = 0xFFFFFFFF\nconst NO_LOCK     = (1 << 31)\nconst TIME_MOD    = 512\nconst LOCK_TYPE   = (1 << 22)\n// const LOCK_MASK   = 0x0000FFFF\n// const BIT_SHIFT   = 9\n// const MAX_BLOCKS  = LOCK_MASK\n// const MAX_SECONDS = LOCK_MASK << BIT_SHIFT\n\nexport default class TxSequence {\n  public value : number\n\n  constructor (value : SequenceData) {\n    if (typeof value === 'string') {\n      this.value = parseInt(value, 16)\n    } else {\n      this.value = value\n    }\n  }\n\n  get isReplaceable () : boolean {\n    return this.value < MAX_VAL\n  }\n\n  get isLocked () : boolean {\n    return !(this.value !== MAX_VAL || (this.value & NO_LOCK) !== 0)\n  }\n\n  get isTimelock () : boolean {\n    return (this.value & LOCK_TYPE) !== 0\n  }\n\n  get timestamp () : number {\n    return this.isLocked\n      ? this.isTimelock\n        ? this.value * TIME_MOD\n        : this.value * TIME_MOD * 600\n      : 0\n  }\n\n  set timestamp (value : number) {\n    // Check if valid timestamp range.\n    // Check if within modulo 512.\n    this.value = Math.ceil(value / TIME_MOD)\n  }\n\n  get blockheight () : number {\n    return this.isLocked\n      ? !this.isTimelock\n        ? this.value\n        : Math.ceil((this.value * TIME_MOD) / 600)\n      : 0\n  }\n\n  set blockheight (value : number) {\n    // Check if valid blockheight range.\n    this.value = value\n  }\n\n  get estDate () : Date {\n    return this.isTimelock\n      ? new Date(Date.now() + (this.value * TIME_MOD * 1000))\n      : new Date(Date.now() + (this.value * 600 * 1000))\n  }\n\n  set estDate (date : Date) {\n    const delta = date.getTime() - Date.now()\n    // Validate delta is above 512,000ms\n    this.value = (delta > (TIME_MOD * 1000))\n      ? Math.ceil(delta / 1000 / TIME_MOD)\n      : 1\n  }\n\n  toJSON () : number {\n    return this.value\n  }\n}\n\n// function validateSequence(seq : TxSequence) {\n//   const { hex, inSeconds, inBlocks, replaceByFee } = seq\n\n//   switch (true) {\n//     case (inSeconds && inBlocks):\n//       throw new TypeError('Both timelock and blocklock are specified!')\n//     case (inSeconds && typeof inSeconds !== 'number'):\n//       throw new TypeError('Invalid timelock value: ' + inSeconds)\n//     case (inSeconds && (inSeconds < 0 || inSeconds > MAX_SECONDS)):\n//       throw new TypeError('Timelock out of range: ' + inSeconds)\n//     case (inSeconds && inSeconds % TIME_MOD !== 0):\n//       throw new TypeError('Timelock value must be multiple of 512')\n//     case (inSeconds && inSeconds > 0):\n//       return LOCK_TYPE | (inSeconds >> BIT_SHIFT) // plus bitfield\n//     case (inBlocks && typeof inBlocks !== 'number'):\n//       throw new TypeError('Invalid blocklock value: ' + inBlocks)\n//     case (inBlocks && (inBlocks < 0 || inBlocks > MAX_BLOCKS)):\n//       throw new TypeError('Blocklock out of range: ' + inBlocks)\n//     case (inBlocks && inBlocks > 0):\n//       return inBlocks // plus bitfield\n//     case (replaceByFee === true):\n//       return MAX_VAL - 1 // or use bitfield\n//     default:\n//       return MAX_VAL // ignore bitfield\n//   }\n// }\n"
  },
  {
    "path": "src/class/Transaction/TxWitness.ts",
    "content": "import { Buff }        from '@cmdcode/buff-utils'\nimport { readWitness } from '../../lib/tx/parse.js'\nimport { Script }      from '../../lib/script/index.js'\nimport { Bytes, InputType, ScriptData, WitnessData } from '../../schema/types.js'\n\nexport default class TxWitness {\n  readonly format ?: InputType\n  readonly _data   : ScriptData[]\n  readonly _meta   : WitnessData\n\n  constructor (\n    data    : ScriptData[],\n    format ?: InputType\n  ) {\n    this._data  = data\n    this._meta  = readWitness(data)\n    this.format = format\n  }\n\n  get length () : number {\n    return this._data.length\n  }\n\n  get annex () : string | undefined {\n    const annex = this._meta.annex\n    return (annex !== null)\n      ? Buff.raw(annex).hex\n      : undefined\n  }\n\n  get cblock () : string | undefined {\n    const cblock = this._meta.cblock\n    return (cblock !== null)\n      ? Buff.raw(cblock).hex\n      : undefined\n  }\n\n  get script () : ScriptData | undefined {\n    const script = this._meta.script\n    return (script !== null)\n      ? Script.decode(script)\n      : undefined\n  }\n\n  get params () : Bytes[] {\n    return this._meta.params\n  }\n\n  toJSON () : ScriptData[] {\n    return this._data\n  }\n}\n"
  },
  {
    "path": "src/class/Transaction/index.ts",
    "content": "import Transaction from './Transaction.js'\nimport Input     from './TxInput.js'\nimport Output    from './TxOutput.js'\nimport Script    from './TxScript.js'\nimport Sequence  from './TxSequence.js'\nimport Witness   from './TxWitness.js'\n\nexport {\n  Transaction,\n  Input,\n  Output,\n  Script,\n  Sequence,\n  Witness\n}\n"
  },
  {
    "path": "src/index.ts",
    "content": "export { Address } from './lib/addr/index.js'\nexport { Script }  from './lib/script/index.js'\nexport { Signer }  from './lib/sig/index.js'\nexport { Tap }     from './lib/tap/index.js'\nexport { Tx }      from './lib/tx/index.js'\n\nexport * from './class/Transaction/index.js'\nexport * from './schema/types.js'\n"
  },
  {
    "path": "src/lib/addr/hash.ts",
    "content": "import { Buff, Bytes } from '@cmdcode/buff-utils'\nimport { Script }      from '../script/index.js'\nimport { checkSize }   from '../utils.js'\nimport { ScriptData }  from '../../schema/types.js'\nimport { hash160, sha256 } from '@cmdcode/crypto-utils'\n\nexport function hash160pkh (pubkey : Bytes) : Buff {\n  const bytes = Buff.bytes(pubkey)\n  checkSize(bytes, 33)\n  return hash160(bytes)\n}\n\nexport function hash160sh (script : ScriptData) : Buff {\n  const bytes = Script.fmt.toBytes(script, false)\n  return hash160(bytes)\n}\n\nexport function sha256sh (script : ScriptData) : Buff {\n  const bytes = Script.fmt.toBytes(script, false)\n  return sha256(bytes)\n}\n"
  },
  {
    "path": "src/lib/addr/index.ts",
    "content": "// https://en.bitcoin.it/wiki/Invoice_address\n\nimport { P2PKH }  from './p2pkh.js'\nimport { P2SH }   from './p2sh.js'\nimport { P2WPKH } from './p2w-pkh.js'\nimport { P2WSH }  from './p2w-sh.js'\nimport { P2TR }   from './p2tr.js'\n\nimport {\n  decodeAddress,\n  fromScriptPubKey,\n  toScriptPubKey\n} from './utils.js'\n\nexport const Address = {\n  p2pkh  : P2PKH,\n  p2sh   : P2SH,\n  p2wpkh : P2WPKH,\n  p2wsh  : P2WSH,\n  p2tr   : P2TR,\n  decode : decodeAddress,\n  fromScriptPubKey,\n  toScriptPubKey\n}\n"
  },
  {
    "path": "src/lib/addr/p2pkh.ts",
    "content": "import { Buff }            from '@cmdcode/buff-utils'\nimport { Bytes, Networks } from '../../schema/types.js'\nimport { checkSize }       from '../utils.js'\nimport { hash160pkh }      from './hash.js'\n\nexport function check (\n  address : string,\n  network : Networks = 'main'\n) : boolean {\n  const prefixes = (network === 'main') ? [ '1' ] : [ 'm', 'n' ]\n  for (const prefix of prefixes) {\n    if (address.startsWith(prefix)) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function encode (\n  input   : Bytes,\n  network : Networks = 'main'\n) : string {\n  const bytes  = Buff.bytes(input)\n  const prefix = (network === 'main') ? Buff.num(0x00) : Buff.num(0x6F)\n  checkSize(input, 20)\n  return bytes.prepend(prefix).tob58chk()\n}\n\nexport function decode (\n  address : string,\n  network : Networks = 'main'\n) : Buff {\n  if (!check(address, network)) {\n    throw new TypeError('Invalid p2pkh address!')\n  }\n  return Buff.b58chk(address).slice(1)\n}\n\nexport function scriptPubKey (input : Bytes) : string[] {\n  const bytes = Buff.bytes(input)\n  checkSize(bytes, 20)\n  return [ 'OP_DUP', 'OP_HASH160', bytes.hex, 'OP_EQUALVERIFY', 'OP_CHECKSIG' ]\n}\n\nexport function fromPubKey (\n  pubkey   : Bytes,\n  network ?: Networks\n) : string {\n  const pkh = hash160pkh(pubkey)\n  return encode(pkh, network)\n}\n\nexport const P2PKH = { check, encode, decode, hash: hash160pkh, scriptPubKey, fromPubKey }\n"
  },
  {
    "path": "src/lib/addr/p2sh.ts",
    "content": "import { Buff }      from '@cmdcode/buff-utils'\nimport { checkSize } from '../utils.js'\nimport { hash160sh } from './hash.js'\nimport { Bytes, Networks, ScriptData } from '../../schema/types.js'\n\nexport function check (\n  address : string,\n  network : Networks = 'main'\n) : boolean {\n  const prefixes = (network === 'main') ? [ '3' ] : [ '2' ]\n\n  for (const prefix of prefixes) {\n    if (address.startsWith(prefix)) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function encode (\n  input   : Bytes,\n  network : Networks = 'main'\n) : string {\n  const prefix = (network === 'main') ? Buff.num(0x05) : Buff.num(0xC4)\n  const bytes  = Buff.bytes(input)\n  checkSize(bytes, 20)\n  return bytes.prepend(prefix).tob58chk()\n}\n\nexport function decode (\n  address : string,\n  network : Networks = 'main'\n) : Buff {\n  if (!check(address, network)) {\n    throw new TypeError(`Invalid p2sh address for network ${network}:` + address)\n  }\n  return Buff.b58chk(address).slice(1)\n}\n\nexport function scriptPubKey (input : Bytes) : string[] {\n  const bytes = Buff.bytes(input)\n  return [ 'OP_HASH160', bytes.hex, 'OP_EQUAL' ]\n}\n\nexport function fromScript (\n  script   : ScriptData,\n  network ?: Networks\n) : string {\n  const scriptHash = hash160sh(script)\n  return encode(scriptHash, network)\n}\n\nexport const P2SH = { check, encode, decode, hash: hash160sh, scriptPubKey, fromScript }\n"
  },
  {
    "path": "src/lib/addr/p2tr.ts",
    "content": "import { Buff } from '@cmdcode/buff-utils'\nimport { Bytes, Networks } from '../../schema/types.js'\nimport { xOnlyPub } from '../tap/utils.js'\nimport { checkSize } from '../utils.js'\nimport { BECH32_PREFIXES } from './schema.js'\n\nconst VALID_PREFIXES = [ 'bc1p', 'tb1p', 'bcrt1p' ]\n\nexport function check (address : string) : boolean {\n  for (const prefix of VALID_PREFIXES) {\n    if (address.startsWith(prefix)) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function encode (\n  input   : Bytes,\n  network : Networks = 'main'\n) : string {\n  const prefix = BECH32_PREFIXES[network]\n  const bytes  = Buff.bytes(input)\n  checkSize(bytes, 32)\n  return bytes.toBech32(prefix, 1)\n}\n\nexport function decode (address : string) : Buff {\n  if (!check(address)) {\n    throw new TypeError('Invalid taproot address!')\n  }\n  return Buff.bech32(address)\n}\n\nexport function scriptPubKey (input : Bytes) : string[] {\n  const bytes = Buff.bytes(input)\n  checkSize(bytes, 32)\n  return [ 'OP_1', bytes.hex ]\n}\n\nexport function fromPubKey (\n  pubkey   : Bytes,\n  network ?: Networks\n) : string {\n  const bytes = xOnlyPub(pubkey)\n  return encode(bytes, network)\n}\n\nexport const P2TR = { check, encode, decode, scriptPubKey, fromPubKey }\n"
  },
  {
    "path": "src/lib/addr/p2w-pkh.ts",
    "content": "import { Buff }            from '@cmdcode/buff-utils'\nimport { Bytes, Networks } from '../../schema/types.js'\nimport { checkSize }       from '../utils.js'\nimport { BECH32_PREFIXES } from './schema.js'\nimport { hash160pkh }      from './hash.js'\n\nconst VALID_PREFIXES = [ 'bc1q', 'tb1q', 'bcrt1q' ]\n\nexport function check (address : string) : boolean {\n  for (const prefix of VALID_PREFIXES) {\n    if (address.startsWith(prefix)) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function encode (\n  input   : Bytes,\n  network : Networks = 'main'\n) : string {\n  const prefix = BECH32_PREFIXES[network]\n  const bytes = Buff.bytes(input)\n  checkSize(bytes, 20)\n  return bytes.toBech32(prefix, 0)\n}\n\nexport function decode (address : string) : Buff {\n  if (!check(address)) {\n    throw new TypeError('Invalid segwit address!')\n  }\n  return Buff.bech32(address)\n}\n\nexport function scriptPubKey (input : Bytes) : string[] {\n  const bytes = Buff.bytes(input)\n  checkSize(bytes, 20)\n  return [ 'OP_0', bytes.hex ]\n}\n\nexport function fromPubKey (\n  pubkey   : Bytes,\n  network ?: Networks\n) : string {\n  const pkh = hash160pkh(pubkey)\n  return encode(pkh, network)\n}\n\nexport const P2WPKH = { check, encode, decode, hash: hash160pkh, scriptPubKey, fromPubKey }\n"
  },
  {
    "path": "src/lib/addr/p2w-sh.ts",
    "content": "import { Buff }            from '@cmdcode/buff-utils'\nimport { checkSize }       from '../utils.js'\nimport { BECH32_PREFIXES } from './schema.js'\nimport { sha256sh }        from './hash.js'\nimport { Bytes, Networks, ScriptData } from '../../schema/types.js'\n\nconst VALID_PREFIXES = [ 'bc1q', 'tb1q', 'bcrt1q' ]\n\nexport function check (address : string) : boolean {\n  for (const prefix of VALID_PREFIXES) {\n    if (address.startsWith(prefix)) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function encode (\n  input   : Bytes,\n  network : Networks = 'main'\n) : string {\n  const prefix = BECH32_PREFIXES[network]\n  const bytes = Buff.bytes(input)\n  checkSize(bytes, 32)\n  return bytes.toBech32(prefix, 0)\n}\n\nexport function decode (address : string) : Buff {\n  if (!check(address)) {\n    throw new TypeError('Invalid segwit address!')\n  }\n  return Buff.bech32(address)\n}\n\nexport function scriptPubKey (input : Bytes) : string[] {\n  const bytes = Buff.bytes(input)\n  checkSize(bytes, 32)\n  return [ 'OP_0', bytes.hex ]\n}\n\nexport function fromScript (\n  script   : ScriptData,\n  network ?: Networks\n) : string {\n  const sh = sha256sh(script)\n  return encode(sh, network)\n}\n\nexport const P2WSH = { check, encode, decode, hash: sha256sh, scriptPubKey, fromScript }\n"
  },
  {
    "path": "src/lib/addr/schema.ts",
    "content": "/* eslint-disable quote-props */\n\nimport { Buff } from '@cmdcode/buff-utils'\nimport { Bytes, Networks, OutputType, ScriptData } from '../../schema/types.js'\n\nexport type AddressType = [\n  prefix  : string,\n  type    : OutputType,\n  network : Networks,\n  size    : number,\n  format  : 'base58' | 'bech32' | 'bech32m'\n]\n\nexport interface AddressData {\n  data    : Buff\n  network : Networks\n  prefix  : string\n  script  : string[]\n  type    : OutputType\n}\n\nexport interface AddressTool {\n  check  : (address : string, network ?: Networks) => boolean\n  encode : (input   : Bytes, network ?: Networks) => string\n  decode : (address : string, network ?: Networks) => Buff\n  scriptPubKey : (keyhash : Bytes) => string[]\n}\n\nexport interface AddrKeyTool extends AddressTool {\n  fromPubKey : (pubkey : Bytes, network ?: Networks) => string\n}\n\nexport interface AddrScriptTool extends AddressTool {\n  fromScript : (script : ScriptData, network ?: Networks) => string\n}\n\nexport const BECH32_PREFIXES : Record<Networks, string> = {\n  main    : 'bc',\n  testnet : 'tb',\n  signet  : 'tb',\n  regtest : 'bcrt'\n}\n"
  },
  {
    "path": "src/lib/addr/utils.ts",
    "content": "\nimport { Buff }      from '@cmdcode/buff-utils'\nimport { Script }    from '../script/index.js'\nimport { P2PKH }     from './p2pkh.js'\nimport { P2SH }      from './p2sh.js'\nimport { P2WPKH }    from './p2w-pkh.js'\nimport { P2WSH }     from './p2w-sh.js'\nimport { P2TR }      from './p2tr.js'\nimport { Tx }        from '../tx/index.js'\n\nimport { Networks, OutputType, ScriptData } from '../../schema/types.js'\n\nimport {\n  AddressData,\n  AddressTool,\n  AddressType,\n  AddrScriptTool\n} from './schema.js'\n\nexport const ADDRESS_TYPES : AddressType[] = [\n  [ '1',      'p2pkh',   'main',    20, 'base58'  ],\n  [ '3',      'p2sh',    'main',    20, 'base58'  ],\n  [ 'm',      'p2pkh',   'testnet', 20, 'base58'  ],\n  [ 'n',      'p2pkh',   'testnet', 20, 'base58'  ],\n  [ '2',      'p2sh',    'testnet', 20, 'base58'  ],\n  [ 'bc1q',   'p2w-pkh', 'main',    20, 'bech32'  ],\n  [ 'tb1q',   'p2w-pkh', 'testnet', 20, 'bech32'  ],\n  [ 'bcrt1q', 'p2w-pkh', 'regtest', 20, 'bech32'  ],\n  [ 'bc1q',   'p2w-sh',  'main',    32, 'bech32'  ],\n  [ 'tb1q',   'p2w-sh',  'testnet', 32, 'bech32'  ],\n  [ 'bcrt1q', 'p2w-sh',  'regtest', 32, 'bech32'  ],\n  [ 'bc1p',   'p2tr',    'main',    32, 'bech32m' ],\n  [ 'tb1p',   'p2tr',    'testnet', 32, 'bech32m' ],\n  [ 'bcrt1p', 'p2tr',    'regtest', 32, 'bech32m' ]\n]\n\nfunction decodeFormat (address : string, format : string) : Buff {\n  switch (format) {\n    case 'base58'  : return Buff.b58chk(address).slice(1)\n    case 'bech32'  : return Buff.bech32(address)\n    case 'bech32m' : return Buff.bech32(address)\n    default: throw new Error('Invalid address format: ' + format)\n  }\n}\n\nfunction getData (address : string) : AddressType {\n  for (const row of ADDRESS_TYPES) {\n    const [ prefix, _type, _network, size, format ] = row\n    if (\n      address.startsWith(prefix)\n    ) {\n      const bytes = decodeFormat(address, format)\n      if (bytes.length === size) return row\n    }\n  }\n  throw new Error('Invalid address: ' + address)\n}\n\nfunction getTool (type : OutputType) : AddressTool | AddrScriptTool {\n  switch (type) {\n    case 'p2pkh'   : return P2PKH\n    case 'p2sh'    : return P2SH\n    case 'p2w-pkh' : return P2WPKH\n    case 'p2w-sh'  : return P2WSH\n    case 'p2tr'    : return P2TR\n    default        : throw new Error('Invalid address type: ' + type)\n  }\n}\n\nexport function decodeAddress (\n  address : string\n) : AddressData {\n  const [ prefix, type, network ] = getData(address)\n  const tool   = getTool(type)\n  const data   = tool.decode(address, network)\n  const script = tool.scriptPubKey(data)\n  return { prefix, type, network, data, script }\n}\n\nexport function fromScriptPubKey (\n  script   : ScriptData,\n  network ?: Networks\n) : string {\n  const { type, data } = Tx.util.readScriptPubKey(script)\n  const tool = getTool(type)\n  return tool.encode(data, network)\n}\n\nexport function toScriptPubKey (address : string) : ScriptData {\n  const { script } = decodeAddress(address)\n  return Script.fmt.toAsm(script, false)\n}\n"
  },
  {
    "path": "src/lib/check.ts",
    "content": "import { Bytes } from '../schema/types'\n\nexport function isHex<T> (value : T) : value is Extract<T, string> {\n  return (\n    typeof value === 'string' &&\n    value.length % 2 === 0    &&\n    /[0-9a-fA-F]/.test(value)\n  )\n}\n\nexport function isBytes<T> (value : T) : value is Extract<T, Bytes> {\n  return (isHex(value) || value instanceof Uint8Array)\n}\n\nexport function isValidAnnex (annex : any) : boolean {\n  return (\n    typeof annex === 'string' &&\n    annex.startsWith('50')\n  )\n}\n"
  },
  {
    "path": "src/lib/script/decode.ts",
    "content": "import { Buff, Stream } from '@cmdcode/buff-utils'\n\nimport {\n  getOpLabel,\n  getWordType,\n  isValidWord\n} from './words.js'\n\nexport function decodeScript (\n  script : string | Uint8Array,\n  varint = false\n) : string[] {\n  let buff = Buff.bytes(script)\n  if (varint) {\n    const stream = buff.stream\n    const len = stream.readSize('le')\n    buff = buff.slice(1)\n    if (buff.length !== len) {\n      throw new Error(`Varint does not match stream size: ${len} !== ${buff.length}`)\n    }\n  }\n  return decodeWords(buff)\n}\n\nexport function decodeWords (\n  words : Uint8Array\n) : string[] {\n  const stream = new Stream(words)\n\n  const stack : string[] = []\n  const stackSize = stream.size\n\n  let word     : number\n  let wordType : string\n  let wordSize : number\n\n  let count = 0\n\n  while (count < stackSize) {\n    word = stream.read(1).num\n    wordType = getWordType(word)\n    count++\n    switch (wordType) {\n      case 'varint':\n        stack.push(stream.read(word).hex)\n        count += word\n        break\n      case 'pushdata1':\n        wordSize = stream.read(1).reverse().num\n        stack.push(stream.read(wordSize).hex)\n        count += wordSize + 1\n        break\n      case 'pushdata2':\n        wordSize = stream.read(2).reverse().num\n        stack.push(stream.read(wordSize).hex)\n        count += wordSize + 2\n        break\n      case 'pushdata4':\n        wordSize = stream.read(4).reverse().num\n        stack.push(stream.read(wordSize).hex)\n        count += wordSize + 4\n        break\n      case 'opcode':\n        if (!isValidWord(word)) {\n          throw new Error(`Invalid OPCODE: ${word}`)\n        }\n        stack.push(getOpLabel(word))\n        break\n      default:\n        throw new Error(`Word type undefined: ${word}`)\n    }\n  }\n  return stack\n}\n"
  },
  {
    "path": "src/lib/script/encode.ts",
    "content": "import { Buff, Stream } from '@cmdcode/buff-utils'\nimport { getOpCode }    from './words.js'\nimport { isHex }        from '../check.js'\nimport { ScriptData, Word } from '../../schema/types.js'\n\nconst MAX_WORD_SIZE = 0x208\n\nexport function encodeScript (\n  script : ScriptData = [],\n  varint = true\n) : Buff {\n  let buff = Buff.num(0)\n\n  if (Array.isArray(script)) {\n    buff = Buff.raw(encodeWords(script))\n  }\n\n  if (isHex(script)) {\n    buff = Buff.hex(script)\n  }\n\n  if (script instanceof Uint8Array) {\n    buff = Buff.raw(script)\n  }\n\n  if (varint) {\n    buff = buff.prefixSize('le')\n  }\n\n  return buff\n}\n\nexport function encodeWords (\n  wordArray : Word[]\n) : Uint8Array {\n  const words = []\n  for (const word of wordArray) {\n    words.push(encodeWord(word))\n  }\n  return (words.length > 0)\n    ? Buff.join(words)\n    : new Uint8Array()\n}\n\nexport function encodeWord (\n  word : Word\n) : Uint8Array {\n  /** Check if the word is a valid opcode,\n   *  and return its integer value.\n   */\n  // Initialize buff variable.\n  let buff = new Uint8Array()\n\n  if (typeof (word) === 'string') {\n    if (word.startsWith('OP_')) {\n      // If word is an opcode, return a\n      // number value without size prefix.\n      return Buff.num(getOpCode(word), 1)\n    } else if (isHex(word)) {\n      // If word is valid hex, encode as hex.\n      buff = Buff.hex(word)\n    } else {\n      // Else, encode word as UTF8 string.\n      buff = Buff.str(word)\n    }\n  } else {\n    // If not a string, encode as bytes.\n    buff = Buff.bytes(word)\n  }\n\n  // If the buffer contains a single value:\n  if (buff.length === 1) {\n    // If value is between 1-16:\n    if (buff[0] !== 0 && buff[0] <= 16) {\n      // Convert values 1-16 into opcode values.\n      buff[0] += 0x50\n      // Return buffered code without varint.\n      return buff\n    // If the value is between 129-255:\n    } else if (buff[0] > 128 && buff[0] <= 255) {\n      // Value must be padded with a zero byte.\n      buff = new Uint8Array([ buff[0], 0 ])\n    }\n    return Buff.join([ encodeSize(buff.length), buff ])\n  // If the buffer is greater than the max size:\n  } else if (buff.length > MAX_WORD_SIZE) {\n    // Split the buffer into chunks.\n    const words = splitWord(buff)\n    // Run data chunks through the encoder.\n    return encodeWords(words)\n  // Else:\n  } else {\n    // Return the current buffer with a prefixed varint.\n    return Buff.join([ encodeSize(buff.length), buff ])\n  }\n}\n\nfunction encodeSize (size : number) : Uint8Array {\n  const OP_DATAPUSH1 = Buff.num(0x4c, 1)\n  const OP_DATAPUSH2 = Buff.num(0x4d, 1)\n\n  switch (true) {\n    case (size <= 0x4b):\n      return Buff.num(size)\n    case (size > 0x4b && size < 0x100):\n      return Buff.join([ OP_DATAPUSH1, Buff.num(size, 1, 'le') ])\n    case (size >= 0x100 && size <= MAX_WORD_SIZE):\n      return Buff.join([ OP_DATAPUSH2, Buff.num(size, 2, 'le') ])\n    default:\n      throw new Error('Invalid word size:' + size.toString())\n  }\n}\n\nfunction splitWord (word : Uint8Array) : Word[] {\n  const words = []\n  const buff  = new Stream(word)\n  while (buff.size > MAX_WORD_SIZE) {\n    // Push a word chunk to the array.\n    words.push(buff.read(MAX_WORD_SIZE))\n  }\n  // Push the remainder to the array.\n  words.push(buff.read(buff.size))\n  return words\n}\n"
  },
  {
    "path": "src/lib/script/format.ts",
    "content": "import { Buff }         from '@cmdcode/buff-utils'\nimport { isHex }        from '../check.js'\nimport { decodeScript } from './decode.js'\nimport { encodeScript } from './encode.js'\nimport { ScriptData }   from '../../schema/types.js'\n\nfunction toAsm (\n  script ?: ScriptData,\n  varint ?: boolean\n) : string[] {\n  if (Array.isArray(script)) {\n    script = encodeScript(script, varint)\n  }\n  if (\n    script instanceof Uint8Array ||\n    isHex(script)\n  ) {\n    return decodeScript(script, varint)\n  }\n  throw new Error('Invalid format: ' + String(typeof script))\n}\n\nfunction toBytes (\n  script ?: ScriptData,\n  varint ?: boolean\n) : Buff {\n  if (\n    script instanceof Uint8Array ||\n    isHex(script)\n  ) { script = decodeScript(script, varint) }\n  if (Array.isArray(script)) {\n    return encodeScript(script, varint)\n  }\n  throw new Error('Invalid format: ' + String(typeof script))\n}\n\nfunction toParam (\n  script : ScriptData\n) : Buff {\n  if (!Array.isArray(script)) {\n    return Buff.bytes(script)\n  }\n  throw new Error('Invalid format: ' + String(typeof script))\n}\n\nexport const FmtScript = {\n  toAsm,\n  toBytes,\n  toParam\n}\n"
  },
  {
    "path": "src/lib/script/index.ts",
    "content": "import { encodeScript } from './encode.js'\nimport { decodeScript } from './decode.js'\nimport { FmtScript }    from './format.js'\n\nexport const Script = {\n  encode : encodeScript,\n  decode : decodeScript,\n  fmt    : FmtScript\n}\n"
  },
  {
    "path": "src/lib/script/words.ts",
    "content": "export const OPCODE_MAP = {\n  OP_0                   : 0,\n  OP_PUSHDATA1           : 76,\n  OP_PUSHDATA2           : 77,\n  OP_PUSHDATA4           : 78,\n  OP_1NEGATE             : 79,\n  OP_SUCCESS80           : 80,\n  OP_1                   : 81,\n  OP_2                   : 82,\n  OP_3                   : 83,\n  OP_4                   : 84,\n  OP_5                   : 85,\n  OP_6                   : 86,\n  OP_7                   : 87,\n  OP_8                   : 88,\n  OP_9                   : 89,\n  OP_10                  : 90,\n  OP_11                  : 91,\n  OP_12                  : 92,\n  OP_13                  : 93,\n  OP_14                  : 94,\n  OP_15                  : 95,\n  OP_16                  : 96,\n  OP_NOP                 : 97,\n  OP_SUCCESS98           : 98,\n  OP_IF                  : 99,\n  OP_NOTIF               : 100,\n  OP_ELSE                : 103,\n  OP_ENDIF               : 104,\n  OP_VERIFY              : 105,\n  OP_RETURN              : 106,\n  OP_TOALTSTACK          : 107,\n  OP_FROMALTSTACK        : 108,\n  OP_2DROP               : 109,\n  OP_2DUP                : 110,\n  OP_3DUP                : 111,\n  OP_2OVER               : 112,\n  OP_2ROT                : 113,\n  OP_2SWAP               : 114,\n  OP_IFDUP               : 115,\n  OP_DEPTH               : 116,\n  OP_DROP                : 117,\n  OP_DUP                 : 118,\n  OP_NIP                 : 119,\n  OP_OVER                : 120,\n  OP_PICK                : 121,\n  OP_ROLL                : 122,\n  OP_ROT                 : 123,\n  OP_SWAP                : 124,\n  OP_TUCK                : 125,\n  OP_SUCCESS126          : 126,\n  OP_SUCCESS127          : 127,\n  OP_SUCCESS128          : 128,\n  OP_SUCCESS129          : 129,\n  OP_SIZE                : 130,\n  OP_SUCCESS131          : 131,\n  OP_SUCCESS132          : 132,\n  OP_SUCCESS133          : 133,\n  OP_SUCCESS134          : 134,\n  OP_EQUAL               : 135,\n  OP_EQUALVERIFY         : 136,\n  OP_SUCCESS137          : 137,\n  OP_SUCCESS138          : 138,\n  OP_1ADD                : 139,\n  OP_1SUB                : 140,\n  OP_SUCCESS141          : 141,\n  OP_SUCCESS142          : 142,\n  OP_NEGATE              : 143,\n  OP_ABS                 : 144,\n  OP_NOT                 : 145,\n  OP_0NOTEQUAL           : 146,\n  OP_ADD                 : 147,\n  OP_SUB                 : 148,\n  OP_SUCCESS149          : 149,\n  OP_SUCCESS150          : 150,\n  OP_SUCCESS151          : 151,\n  OP_SUCCESS152          : 152,\n  OP_SUCCESS153          : 153,\n  OP_BOOLAND             : 154,\n  OP_BOOLOR              : 155,\n  OP_NUMEQUAL            : 156,\n  OP_NUMEQUALVERIFY      : 157,\n  OP_NUMNOTEQUAL         : 158,\n  OP_LESSTHAN            : 159,\n  OP_GREATERTHAN         : 160,\n  OP_LESSTHANOREQUAL     : 161,\n  OP_GREATERTHANOREQUAL  : 162,\n  OP_MIN                 : 163,\n  OP_MAX                 : 164,\n  OP_WITHIN              : 165,\n  OP_RIPEMD160           : 166,\n  OP_SHA1                : 167,\n  OP_SHA256              : 168,\n  OP_HASH160             : 169,\n  OP_HASH256             : 170,\n  OP_CODESEPARATOR       : 171,\n  OP_CHECKSIG            : 172,\n  OP_CHECKSIGVERIFY      : 173,\n  OP_CHECKMULTISIG       : 174,\n  OP_CHECKMULTISIGVERIFY : 175,\n  OP_NOP1                : 176,\n  OP_CHECKLOCKTIMEVERIFY : 177,\n  OP_CHECKSEQUENCEVERIFY : 178,\n  OP_NOP4                : 179,\n  OP_NOP5                : 180,\n  OP_NOP6                : 181,\n  OP_NOP7                : 182,\n  OP_NOP8                : 183,\n  OP_NOP9                : 184,\n  OP_NOP10               : 185,\n  OP_CHECKSIGADD         : 186,\n  OP_SUCCESS187          : 187,\n  OP_SUCCESS188          : 188,\n  OP_SUCCESS189          : 189,\n  OP_SUCCESS190          : 190,\n  OP_SUCCESS191          : 191,\n  OP_SUCCESS192          : 192,\n  OP_SUCCESS193          : 193,\n  OP_SUCCESS194          : 194,\n  OP_SUCCESS195          : 195,\n  OP_SUCCESS196          : 196,\n  OP_SUCCESS197          : 197,\n  OP_SUCCESS198          : 198,\n  OP_SUCCESS199          : 199,\n  OP_SUCCESS200          : 200,\n  OP_SUCCESS201          : 201,\n  OP_SUCCESS202          : 202,\n  OP_SUCCESS203          : 203,\n  OP_SUCCESS204          : 204,\n  OP_SUCCESS205          : 205,\n  OP_SUCCESS206          : 206,\n  OP_SUCCESS207          : 207,\n  OP_SUCCESS208          : 208,\n  OP_SUCCESS209          : 209,\n  OP_SUCCESS210          : 210,\n  OP_SUCCESS211          : 211,\n  OP_SUCCESS212          : 212,\n  OP_SUCCESS213          : 213,\n  OP_SUCCESS214          : 214,\n  OP_SUCCESS215          : 215,\n  OP_SUCCESS216          : 216,\n  OP_SUCCESS217          : 217,\n  OP_SUCCESS218          : 218,\n  OP_SUCCESS219          : 219,\n  OP_SUCCESS220          : 220,\n  OP_SUCCESS221          : 221,\n  OP_SUCCESS222          : 222,\n  OP_SUCCESS223          : 223,\n  OP_SUCCESS224          : 224,\n  OP_SUCCESS225          : 225,\n  OP_SUCCESS226          : 226,\n  OP_SUCCESS227          : 227,\n  OP_SUCCESS228          : 228,\n  OP_SUCCESS229          : 229,\n  OP_SUCCESS230          : 230,\n  OP_SUCCESS231          : 231,\n  OP_SUCCESS232          : 232,\n  OP_SUCCESS233          : 233,\n  OP_SUCCESS234          : 234,\n  OP_SUCCESS235          : 235,\n  OP_SUCCESS236          : 236,\n  OP_SUCCESS237          : 237,\n  OP_SUCCESS238          : 238,\n  OP_SUCCESS239          : 239,\n  OP_SUCCESS240          : 240,\n  OP_SUCCESS241          : 241,\n  OP_SUCCESS242          : 242,\n  OP_SUCCESS243          : 243,\n  OP_SUCCESS244          : 244,\n  OP_SUCCESS245          : 245,\n  OP_SUCCESS246          : 246,\n  OP_SUCCESS247          : 247,\n  OP_SUCCESS248          : 248,\n  OP_SUCCESS249          : 249,\n  OP_SUCCESS250          : 250,\n  OP_SUCCESS251          : 251,\n  OP_SUCCESS252          : 252,\n  OP_SUCCESS253          : 253,\n  OP_SUCCESS254          : 254\n}\n\nexport function getOpLabel (num : number) : string {\n  if (num > 186 && num < 255) {\n    return 'OP_SUCCESS' + String(num)\n  }\n  for (const [ k, v ] of Object.entries(OPCODE_MAP)) {\n    if (v === num) return k\n  }\n  throw new Error('OPCODE not found:' + String(num))\n}\n\nexport function getOpCode (string : string) : number {\n  for (const [ k, v ] of Object.entries(OPCODE_MAP)) {\n    if (k === string) return Number(v)\n  }\n  throw new Error('OPCODE not found:' + string)\n}\n\nexport function getWordType (word : number) : string {\n  switch (true) {\n    case (word === 0):\n      return 'opcode'\n    case (word >= 1 && word <= 75):\n      return 'varint'\n    case (word === 76):\n      return 'pushdata1'\n    case (word === 77):\n      return 'pushdata2'\n    case (word === 78):\n      return 'pushdata4'\n    case (word <= 254):\n      return 'opcode'\n    default:\n      throw new Error(`Invalid word range: ${word}`)\n  }\n}\n\nexport function isValidWord (word : number) : boolean {\n  /** Check if the provided value\n   * is a valid script opcode.\n   * */\n  const MIN_RANGE = 75\n  const MAX_RANGE = 254\n\n  const DISABLED_OPCODES : number[] = []\n\n  switch (true) {\n    case (typeof (word) !== 'number'):\n      return false\n    case (word === 0):\n      return true\n    case (DISABLED_OPCODES.includes(word)):\n      return false\n    case (MIN_RANGE < word && word < MAX_RANGE):\n      return true\n    default:\n      return false\n  }\n}\n"
  },
  {
    "path": "src/lib/sig/index.ts",
    "content": "import { SWSigner } from './segwit/index.js'\nimport { TRSigner } from './taproot/index.js'\n\nexport const Signer = {\n  segwit  : SWSigner,\n  taproot : TRSigner\n}\n"
  },
  {
    "path": "src/lib/sig/segwit/hash.ts",
    "content": "import { Buff }       from '@cmdcode/buff-utils'\nimport * as ENC       from '../../tx/encode.js'\nimport { Script }     from '../../script/index.js'\nimport { HashConfig } from '../types.js'\nimport { Tx }         from '../../tx/index.js'\n\nimport {\n  InputData,\n  OutputData,\n  TxTemplate,\n  Bytes\n} from '../../../schema/types.js'\nimport { hash160, hash256 } from '@cmdcode/crypto-utils'\n\nconst VALID_HASH_TYPES = [ 0x01, 0x02, 0x03 ]\n\nexport function hashTx (\n  txdata : TxTemplate | Bytes,\n  idx    : number,\n  config : HashConfig = {}\n) : Buff {\n  // Unpack the sigflag from our config object.\n  const { sigflag = 0x01 } = config\n  // Check if the ANYONECANPAY flag is set.\n  const isAnypay = (sigflag & 0x80) === 0x80\n  // Save a normalized version of the sigflag.\n  const flag = sigflag % 0x80\n  // Check if the sigflag exists as a valid type.\n  if (!VALID_HASH_TYPES.includes(flag)) {\n    throw new Error('Invalid hash type: ' + String(sigflag))\n  }\n  // Normalize the tx into JSON format.\n  const tx = Tx.fmt.toJson(txdata)\n  // Unpack the tx object.\n  const { version, vin, vout, locktime } = tx\n  // Unpack the chosen input for signing.\n  const { txid, vout: prevIdx, prevout, sequence } = vin[idx]\n  // Unpack the prevout for the chosen input.\n  const { value } = prevout ?? {}\n  // Check if a prevout value is provided.\n  if (value === undefined) {\n    throw new Error('Prevout value is empty!')\n  }\n  // Initialize our script variable from the config.\n  let script = config.script\n  // Check if a pubkey is provided (instead of a script).\n  if (\n    script === undefined &&\n    config.pubkey !== undefined\n  ) {\n    const pkhash = hash160(config.pubkey)\n    script = `76a914${pkhash.hex}88ac`\n  }\n  // Make sure that some form of script has been provided.\n  if (script === undefined) {\n    throw new Error('No pubkey / script has been set!')\n  }\n  // Throw if OP_CODESEPARATOR is used in a script.\n  if (Script.fmt.toAsm(script).includes('OP_CODESEPARATOR')) {\n    throw new Error('This library does not currently support the use of OP_CODESEPARATOR in segwit scripts.')\n  }\n\n  const sighash = [\n    ENC.encodeVersion(version),\n    hashPrevouts(vin, isAnypay),\n    hashSequence(vin, flag, isAnypay),\n    ENC.encodeTxid(txid),\n    ENC.encodePrevOut(prevIdx),\n    Script.encode(script, true),\n    ENC.encodeValue(value),\n    ENC.encodeSequence(sequence),\n    hashOutputs(vout, idx, flag),\n    ENC.encodeLocktime(locktime),\n    Buff.num(sigflag, 4).reverse()\n  ]\n\n  // console.log('sighash:', sighash.map(e => Buff.bytes(e).hex))\n\n  return hash256(Buff.join(sighash))\n}\n\nfunction hashPrevouts (\n  vin : InputData[],\n  isAnypay ?: boolean\n) : Uint8Array {\n  if (isAnypay === true) {\n    return Buff.num(0, 32)\n  }\n\n  const stack = []\n\n  for (const { txid, vout } of vin) {\n    stack.push(ENC.encodeTxid(txid))\n    stack.push(ENC.encodePrevOut(vout))\n  }\n\n  return hash256(Buff.join(stack))\n}\n\nfunction hashSequence (\n  vin      : InputData[],\n  sigflag  : number,\n  isAnyPay : boolean\n) : Uint8Array {\n  if (isAnyPay || sigflag !== 0x01) {\n    return Buff.num(0, 32)\n  }\n\n  const stack = []\n\n  for (const { sequence } of vin) {\n    stack.push(ENC.encodeSequence(sequence))\n  }\n  return hash256(Buff.join(stack))\n}\n\nfunction hashOutputs (\n  vout    : OutputData[],\n  idx     : number,\n  sigflag : number\n) : Uint8Array {\n  const stack = []\n\n  if (sigflag === 0x01) {\n    for (const { value, scriptPubKey } of vout) {\n      stack.push(ENC.encodeValue(value))\n      stack.push(Script.encode(scriptPubKey, true))\n    }\n    return hash256(Buff.join(stack))\n  }\n\n  if (sigflag === 0x03 && idx < vout.length) {\n    const { value, scriptPubKey } = vout[idx]\n    stack.push(ENC.encodeValue(value))\n    stack.push(Script.encode(scriptPubKey, true))\n    return hash256(Buff.join(stack))\n  }\n\n  return Buff.num(0, 32)\n}\n"
  },
  {
    "path": "src/lib/sig/segwit/index.ts",
    "content": "import { hashTx }   from './hash.js'\nimport { signTx }   from './sign.js'\nimport { verifyTx } from './verify.js'\n\nexport const SWSigner = {\n  hash   : hashTx,\n  sign   : signTx,\n  verify : verifyTx\n}\n"
  },
  {
    "path": "src/lib/sig/segwit/sign.ts",
    "content": "import { Buff }       from '@cmdcode/buff-utils'\nimport { noble }      from '@cmdcode/crypto-utils'\nimport { hashTx }     from './hash.js'\nimport { TxTemplate } from '../../../schema/types.js'\nimport { HashConfig } from '../types.js'\n\nexport function signTx (\n  seckey  : string | Uint8Array,\n  txdata  : TxTemplate | string | Uint8Array,\n  index   : number,\n  config  : HashConfig = {}\n) : Buff {\n  const { sigflag = 0x01 } = config\n  const hash = hashTx(txdata, index, config)\n  const sig  = noble.secp.sign(hash, seckey).toDERRawBytes(true)\n  return Buff.join([ sig, sigflag ])\n}\n"
  },
  {
    "path": "src/lib/sig/segwit/verify.ts",
    "content": "import { Buff }       from '@cmdcode/buff-utils'\nimport { noble }      from '@cmdcode/crypto-utils'\nimport { safeThrow }  from '../../utils.js'\nimport { Tx }         from '../../tx/index.js'\nimport { hashTx }     from './hash.js'\nimport { TxTemplate } from '../../../schema/types.js'\nimport { Script }     from '../../script/index.js'\nimport { HashConfig } from '../types.js'\n\nexport function verifyTx (\n  txdata : TxTemplate | string | Uint8Array,\n  index  : number,\n  config : HashConfig = {}\n) : boolean {\n  const tx = Tx.fmt.toJson(txdata)\n  const { throws = false } = config\n  const { witness = [] }   = tx.vin[index]\n  const witnessData = Tx.util.readWitness(witness)\n\n  const { script, params } = witnessData\n\n  let pub : Buff | null = null\n\n  if (params.length < 1) {\n    return safeThrow('Invalid witness data: ' + String(witness), throws)\n  }\n\n  if (\n    config.script === undefined &&\n    script !== null\n  ) {\n    config.script = script\n  }\n\n  if (config.pubkey !== undefined) {\n    pub = Buff.bytes(config.pubkey)\n  } else if (\n    params.length > 1 &&\n    params[1].length === 33\n  ) {\n    pub = Buff.bytes(params[1])\n  } else {\n    return safeThrow('No pubkey provided!', throws)\n  }\n\n  const rawsig    = Script.fmt.toParam(params[0])\n  const signature = rawsig.slice(0, -1)\n  const sigflag   = rawsig.slice(-1)[0]\n\n  const hash = hashTx(tx, index, { ...config, sigflag })\n\n  // console.log('sign:', signature.hex)\n  // console.log('flag:', Buff.num(sigflag).hex)\n  // console.log('hash:', hash.hex)\n  // console.log('pubk:', pub.hex)\n\n  if (!noble.secp.verify(signature, hash, pub)) {\n    return safeThrow('Invalid signature!', throws)\n  }\n\n  return true\n}\n"
  },
  {
    "path": "src/lib/sig/taproot/hash.ts",
    "content": "import { Buff }         from '@cmdcode/buff-utils'\nimport * as ENC         from '../../tx/encode.js'\nimport { Tx }           from '../../tx/index.js'\nimport { Script }       from '../../script/index.js'\nimport { encodeScript } from '../../script/encode.js'\nimport { HashConfig }   from '../types.js'\n\nimport {\n  Bytes,\n  InputData,\n  OutputData,\n  ScriptData,\n  TxTemplate\n} from '../../../schema/types.js'\n\nconst VALID_HASH_TYPES = [ 0x00, 0x01, 0x02, 0x03, 0x81, 0x82, 0x83 ]\n\nexport function hashTx (\n  template : TxTemplate | Bytes,\n  index    : number,\n  config   : HashConfig = {}\n) : Buff {\n  // Unpack configuration.\n  const {\n    extension,\n    sigflag       = 0x00,\n    extflag       = 0x00,\n    key_version   = 0x00,\n    separator_pos = 0xFFFFFFFF\n  } = config\n\n  // Normalize and unpack the txdata object.\n  const txdata = Tx.fmt.toJson(template)\n  const { version, vin: input, vout: output, locktime } = txdata\n\n  if (index >= input.length) {\n    // If index is out of bounds, throw error.\n    throw new Error('Index out of bounds: ' + String(index))\n  }\n\n  if (!VALID_HASH_TYPES.includes(sigflag)) {\n    // If the sigflag is an invalid type, throw error.\n    throw new Error('Invalid hash type: ' + String(sigflag))\n  }\n\n  if (extflag < 0 || extflag > 127) {\n    // If the extflag is out of range, throw error.\n    throw new Error('Extention flag out of range: ' + String(extflag))\n  }\n\n  // Unpack the input being signed.\n  const { txid, vout, sequence, witness = [] } = input[index]\n\n  // Define the parameters of the transaction.\n  const isAnyPay  = (sigflag & 0x80) === 0x80\n  const annex     = getAnnexData(witness)\n  const annexBit  = (annex !== undefined) ? 1 : 0\n  const extendBit = (extension !== undefined) ? 1 : 0\n  const spendType = ((extflag + extendBit) * 2) + annexBit\n  const hashtag   = Buff.str('TapSighash').digest\n\n  // Begin building our preimage.\n  const preimage = [\n    hashtag,                      // Buffer input with\n    hashtag,                      // 2x hashed strings.\n    Buff.num(0x00, 1),            // Add zero-byte.\n    Buff.num(sigflag, 1),         // Commit to signature flag.\n    ENC.encodeVersion(version),   // Commit to tx version.\n    ENC.encodeLocktime(locktime)  // Commit to tx locktime.\n  ]\n\n  if (!isAnyPay) {\n    // If flag ANYONE_CAN_PAY is not set,\n    // then commit to all inputs.\n    const prevouts = input.map(e => getPrevout(e))\n    preimage.push(\n      hashOutpoints(input),   // Commit to txid/vout for each input.\n      hashAmounts(prevouts),  // Commit to prevout amount for each input.\n      hashScripts(prevouts),  // Commit to prevout script for each input.\n      hashSequence(input)     // Commit to sequence value for each input.\n    )\n  }\n\n  if ((sigflag & 0x03) < 2 || (sigflag & 0x03) > 3) {\n    // If neither SINGLE or NONE flags are set,\n    // include a commitment to all outputs.\n    preimage.push(hashOutputs(output))\n  }\n\n  // At this step, we include the spend type.\n  preimage.push(Buff.num(spendType, 1))\n\n  if (isAnyPay) {\n    // If ANYONE_CAN_PAY flag is set, then we will\n    // provide a commitment to the input being signed.\n    const { value, scriptPubKey } = getPrevout(input[index])\n    preimage.push(\n      ENC.encodeTxid(txid),               // Commit to the input txid.\n      ENC.encodePrevOut(vout),            // Commit to the input vout index.\n      ENC.encodeValue(value),             // Commit to the input's prevout value.\n      Script.encode(scriptPubKey, true),  // Commit to the input's prevout script.\n      ENC.encodeSequence(sequence)        // Commit to the input's sequence value.\n    )\n  } else {\n    // Otherwise, we must have already included a commitment\n    // to all inputs in the tx, so simply add a commitment to\n    // the index of the input we are signing for.\n    preimage.push(Buff.num(index, 4).reverse())\n  }\n\n  if (annex !== undefined) {\n    // If an annex has been set, include it here.\n    preimage.push(annex)\n  }\n\n  if ((sigflag & 0x03) === 0x03) {\n    // If the SINGLE flag is set, then include a\n    // commitment to the output which is adjacent\n    // to the input that we are signing for.\n    preimage.push(hashOutput(output[index]))\n  }\n\n  if (extension !== undefined) {\n    // If we are extending this signature to include\n    // other commitments (such as a tapleaf), then we\n    // will add it to the preimage here.\n    preimage.push(\n      Buff.bytes(extension),      // Extention data (in bytes).\n      Buff.num(key_version),      // Key version (reserved for future upgrades).\n      Buff.num(separator_pos, 4, 'le')  // If OP_CODESEPARATOR is used, this must be set.\n    )\n  }\n\n  // Useful for debugging the preimage stack.\n  // console.log(preimage.map(e => Buff.raw(e).hex))\n\n  return Buff.join(preimage).digest\n}\n\nexport function hashOutpoints (\n  vin : InputData[]\n) : Uint8Array {\n  const stack = []\n  for (const { txid, vout } of vin) {\n    stack.push(ENC.encodeTxid(txid))\n    stack.push(ENC.encodePrevOut(vout))\n  }\n  return Buff.join(stack).digest\n}\n\nexport function hashSequence (\n  vin : InputData[]\n) : Uint8Array {\n  const stack = []\n  for (const { sequence } of vin) {\n    stack.push(ENC.encodeSequence(sequence))\n  }\n  return Buff.join(stack).digest\n}\n\nexport function hashAmounts (\n  prevouts : OutputData[]\n) : Uint8Array {\n  const stack = []\n  for (const { value } of prevouts) {\n    stack.push(ENC.encodeValue(value))\n  }\n  return Buff.join(stack).digest\n}\n\nexport function hashScripts (\n  prevouts : OutputData[]\n) : Uint8Array {\n  const stack = []\n  for (const { scriptPubKey } of prevouts) {\n    stack.push(encodeScript(scriptPubKey, true))\n  }\n  return Buff.join(stack).digest\n}\n\nexport function hashOutputs (\n  vout : OutputData[]\n) : Uint8Array {\n  const stack = []\n  for (const { value, scriptPubKey } of vout) {\n    stack.push(ENC.encodeValue(value))\n    stack.push(Script.encode(scriptPubKey, true))\n  }\n  return Buff.join(stack).digest\n}\n\nexport function hashOutput (\n  vout : OutputData\n) : Uint8Array {\n  return Buff.join([\n    ENC.encodeValue(vout.value),\n    Script.encode(vout.scriptPubKey, true)\n  ]).digest\n}\n\nfunction getAnnexData (\n  witness ?: ScriptData[]\n) : Uint8Array | undefined {\n  // If no witness exists, return undefined.\n  if (witness === undefined) return\n  // If there are less than two elements, return undefined.\n  if (witness.length < 2) return\n  // Define the last element as the annex.\n  let annex = witness.at(-1)\n  // If element is a string,\n  if (typeof annex === 'string') {\n    // convert to bytes.\n    annex = Buff.hex(annex)\n  }\n  // If first byte is annex flag,\n  if (\n    annex instanceof Uint8Array &&\n    annex[0] === 0x50\n  ) {\n    // return a digest of the annex.\n    return Buff.raw(annex).prefixSize('be').digest\n  }\n  // Else, return undefined.\n  return undefined\n}\n\nfunction getPrevout (vin : InputData) : OutputData {\n  if (vin.prevout === undefined) {\n    throw new Error('Prevout data missing for input: ' + String(vin.txid))\n  }\n  return vin.prevout\n}\n"
  },
  {
    "path": "src/lib/sig/taproot/index.ts",
    "content": "import { hashTx }   from './hash.js'\nimport { signTx }   from './sign.js'\nimport { verifyTx } from './verify.js'\n\nexport const TRSigner = {\n  hash   : hashTx,\n  sign   : signTx,\n  verify : verifyTx\n}\n"
  },
  {
    "path": "src/lib/sig/taproot/sign.ts",
    "content": "import { Buff, Bytes }  from '@cmdcode/buff-utils'\nimport { Field, Point } from '@cmdcode/crypto-utils'\nimport { hashTx }       from './hash.js'\nimport { HashConfig }   from '../types.js'\nimport { TxTemplate }   from '../../../schema/types.js'\nimport { xOnlyPub }     from '../../tap/utils.js'\nimport { hashTag, safeThrow } from '../../utils.js'\n\nconst FIELD_SIZE  = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2Fn\nconst CURVE_ORDER = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141n\n\nexport function signTx (\n  seckey  : string | Uint8Array,\n  txdata  : TxTemplate | string | Uint8Array,\n  index   : number,\n  config  : HashConfig = {}\n) : Buff {\n  // Set the signature flag type.\n  const { sigflag = 0x00 } = config\n  // Calculate the transaction hash.\n  const hash = hashTx(txdata, index, config)\n  // Sign the transaction hash with secret key.\n  const sig  = sign(seckey, hash)\n  // Return the signature.\n  return (sigflag === 0x00)\n    ? Buff.raw(sig)\n    : Buff.join([ sig, sigflag ])\n}\n\nexport function sign (\n  secret  : Bytes,\n  message : Bytes,\n  rand    : Bytes = Buff.random(32)\n) : Buff {\n  /**\n   * Implementation of signature algorithm as specified in BIP0340.\n   * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n   */\n  // Normalize our message into bytes.\n  const m = Buff.bytes(message)\n  // Let d' equal the integer value of secret key.\n  const dp = new Field(secret)\n  // Let P equal d' * G\n  const P  = dp.point\n  // If P has an odd Y coordinate, return negated version of d'.\n  const d  = (P.hasEvenY) ? dp.big : dp.negated.big\n  // Hash the auxiliary data according to BIP 0340.\n  const a  = hashTag('BIP0340/aux', Buff.bytes(rand))\n  // Let t equal the byte-wise xor of (d) and (a).\n  const t  = d ^ a.big\n  // Let our nonce value equal the tagged hash('BIP0340/nonce', t || P || m).\n  const n  = hashTag('BIP0340/nonce', t, P.x.raw, m)\n  // Let k' equal our nonce mod N.\n  const kp = new Field(n)\n  // Let R equal k' * G.\n  const R  = kp.point\n  // If R has an odd Y coordinate, return negated version of k'.\n  const k  = (R.hasEvenY) ? kp.big : kp.negated.big\n  // Let e equal the tagged hash('BIP0340/challenge' || R || P || m) mod n.\n  const e  = new Field(hashTag('BIP0340/challenge', R.x.raw, P.x.raw, m))\n  // Let s equal (k + ed) mod n.\n  const s  = new Field(k + (e.big * d))\n  // Return (R || s) as a signature\n  return Buff.join([ R.x.raw, s.raw ])\n}\n\nexport function verify (\n  signature : Bytes,\n  message   : Bytes,\n  pubkey    : Bytes,\n  shouldThrow = false\n) : boolean {\n   /**\n   * Implementation of verify algorithm as specified in BIP0340.\n   * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n   */\n  // Get the Point value for pubkey.\n  const P = Point.from_x(xOnlyPub(pubkey))\n  // Normalize the message into bytes.\n  const m = Buff.bytes(message)\n  // Convert signature into a stream object.\n  const stream = Buff.bytes(signature).stream\n  // Check if the signature size is at least 64 bytes.\n  if (stream.size < 64) {\n    safeThrow('Signature length is too small: ' + String(stream.size), shouldThrow)\n  }\n  // Let r equal first 32 bytes of signature.\n  const r = stream.read(32)\n  // Fail if r > p (field size).\n  if (r.big > FIELD_SIZE) {\n    safeThrow('Signature r value greater than field size!', shouldThrow)\n  }\n  // Let s equal next 32 bytes of signature.\n  const s = stream.read(32)\n  // Fail if s > n (curve order).\n  if (s.big > CURVE_ORDER) {\n    safeThrow('Signature s value greater than curve order!', shouldThrow)\n  }\n  // Let e equal the tagged hash('BIP0340/challenge' || R || P || m) mod n.\n  const e = new Field(hashTag('BIP0340/challenge', r.raw, P.x.raw, m))\n  // Let R equal s * G - eP.\n  const sG = new Field(s).point\n  const eP = P.mul(e.big)\n  const R  = sG.sub(eP)\n  // Reject if R value has an odd Y coordinate.\n  if (R.hasOddY) {\n    safeThrow('Signature R value has odd Y coordinate!', shouldThrow)\n  }\n  // Reject if R value is infinite.\n  if (R.x.big === 0n) {\n    safeThrow('Signature R value is infinite!', shouldThrow)\n  }\n  // Return if x coordinate of R value equals r.\n  return R.x.big === r.big\n}\n"
  },
  {
    "path": "src/lib/sig/taproot/verify.ts",
    "content": "import { Buff, Stream }  from '@cmdcode/buff-utils'\nimport { checkPath }     from '../../tap/key.js'\nimport { verify }        from './sign.js'\nimport { safeThrow }     from '../../utils.js'\nimport { getTapLeaf }    from '../../tap/tree.js'\nimport { Tx }            from '../../tx/index.js'\nimport { hashTx }        from './hash.js'\nimport { TxTemplate }    from '../../../schema/types.js'\nimport { Script }        from '../../script/index.js'\nimport { HashConfig }    from '../types.js'\n\nexport function verifyTx (\n  txdata  : TxTemplate | string | Uint8Array,\n  index   : number,\n  config  : HashConfig = {}\n) : boolean {\n  const tx = Tx.fmt.toJson(txdata)\n  const { throws = false } = config\n  const { prevout, witness = [] } = tx.vin[index]\n  const witnessData = Tx.util.readWitness(witness)\n  const { cblock, script, params } = witnessData\n\n  let pub : Buff\n\n  if (params.length < 1) {\n    return safeThrow('Invalid witness data: ' + String(witness), throws)\n  }\n\n  const { scriptPubKey } = prevout ?? {}\n\n  if (scriptPubKey === undefined) {\n    return safeThrow('Prevout scriptPubKey is empty!', throws)\n  }\n\n  const { type, data: tapkey } = Tx.util.readScriptPubKey(scriptPubKey)\n\n  if (type !== 'p2tr') {\n    return safeThrow('Prevout script is not a valid taproot output:' + tapkey.hex, throws)\n  }\n\n  if (tapkey.length !== 32) {\n    return safeThrow('Invalid tapkey length: ' + String(tapkey.length), throws)\n  }\n\n  if (\n    cblock !== null &&\n    script !== null\n  ) {\n    const version    = cblock[0] & 0xfe\n    const target     = getTapLeaf(script, version)\n    config.extension = target\n\n    if (!checkPath(tapkey, target, cblock, { throws })) {\n      return safeThrow('cblock verification failed!', throws)\n    }\n  }\n\n  if (config.pubkey !== undefined) {\n    pub = Buff.bytes(config.pubkey)\n  } else if (params.length > 1 && params[1].length === 32) {\n    pub = Buff.bytes(params[1])\n  } else {\n    pub = Buff.bytes(tapkey)\n  }\n\n  const rawsig    = Script.fmt.toParam(params[0])\n  const stream    = new Stream(rawsig)\n  const signature = stream.read(64).raw\n\n  if (stream.size === 1) {\n    config.sigflag = stream.read(1).num\n    if (config.sigflag === 0x00) {\n      return safeThrow('0x00 is not a valid appended sigflag!', throws)\n    }\n  }\n\n  const hash = hashTx(tx, index, config)\n\n  if (!verify(signature, hash, pub, throws)) {\n    return safeThrow('Invalid signature!', throws)\n  }\n\n  return true\n}\n"
  },
  {
    "path": "src/lib/sig/types.ts",
    "content": "import { Bytes } from '../../schema/types.js'\n\nexport interface HashConfig {\n  extension     ?: Bytes    // Include a tapleaf hash with your signature hash.\n  pubkey        ?: Bytes    // Verify using this pubkey instead of the tapkey.\n  script        ?: Bytes    // Hash using this script (for segwit spends).\n  sigflag       ?: number   // Set the signature type flag.\n  separator_pos ?: number   // If using OP_CODESEPARATOR, specify the latest opcode position.\n  extflag       ?: number   // Set the extention version flag (future use).\n  key_version   ?: number   // Set the key version flag (future use).\n  throws        ?: boolean  // Should throw an exception on failure.\n}\n"
  },
  {
    "path": "src/lib/tap/index.ts",
    "content": "import * as SCR  from './tree.js'\nimport * as TWK  from './tweak.js'\nimport * as CHK  from './key.js'\n\nexport const TapTree = {\n  getTag    : SCR.getTapTag,\n  getLeaf   : SCR.getTapLeaf,\n  getBranch : SCR.getTapBranch,\n  getRoot   : SCR.getTapRoot\n}\n\nexport const TapUtil = {\n  readCtrlBlock : CHK.readCtrlBlock,\n  readParityBit : CHK.readParityBit\n}\n\nexport const TapTweak = {\n  getPubKey   : TWK.getTweakedPub,\n  getSecKey   : TWK.getTweakedSec,\n  getTweak    : TWK.getTapTweak,\n  tweakSecKey : TWK.tweakSecKey,\n  tweakPubKey : TWK.tweakPubKey\n}\n\nexport const Tap = {\n  getPubKey     : CHK.getTapPubKey,\n  getSecKey     : CHK.getTapSecKey,\n  encodeScript  : SCR.getTapScript,\n  checkPath     : CHK.checkPath,\n  tree          : TapTree,\n  tweak         : TapTweak,\n  util          : TapUtil,\n  SCRIPT_PUBKEY : TWK.SCRIPT_PUBKEY\n}\n"
  },
  {
    "path": "src/lib/tap/key.ts",
    "content": "import { Buff, Stream }      from '@cmdcode/buff-utils'\nimport { util }              from '@cmdcode/crypto-utils'\nimport { getTweakedKey }     from './tweak.js'\nimport { safeThrow }         from '../utils.js'\nimport { xOnlyPub }          from './utils.js'\nimport { getTapBranch, merkleize }      from './tree.js'\nimport { CtrlBlock, TapConfig, TapKey } from './types.js'\nimport { Bytes } from '../../schema/types.js'\n\nconst DEFAULT_VERSION = 0xc0\n\nexport function getTapSecKey (\n  seckey  : Bytes,\n  config  : TapConfig = {}\n) : TapKey {\n  return getTapKey(seckey, { ...config, isPrivate: true })\n}\n\nexport function getTapPubKey (\n  pubkey  : Bytes,\n  config  : TapConfig = {}\n) : TapKey {\n  return getTapKey(pubkey, { ...config, isPrivate: false })\n}\n\nfunction getTapKey (\n  intkey : Bytes,\n  config : TapConfig = {}\n) : TapKey {\n  const {\n    isPrivate = false,\n    tree      = [],\n    version   = DEFAULT_VERSION\n  } = config\n\n  const pubkey = (isPrivate)\n    ? util.getPublicKey(intkey, true)\n    : xOnlyPub(intkey)\n\n  let { target } = config\n\n  if (target !== undefined) target = Buff.bytes(target).hex\n\n  let tapkey, ctrlpath : string[] = []\n\n  if (tree.length > 0) {\n    // Merkelize the leaves into a root hash (with proof).\n    const [ root, _t, path ] = merkleize(tree, target)\n    // Get the control path from the merkelized output.\n    ctrlpath = path\n    // Get the tapped key from the internal key.\n    tapkey = getTweakedKey(intkey, root, isPrivate)\n  } else {\n    if (target !== undefined) {\n      // Get the tapped key from the single tapleaf.\n      tapkey = getTweakedKey(intkey, target, isPrivate)\n    } else {\n      // Get the tapped key from an empty tweak.\n      tapkey = getTweakedKey(intkey, undefined, isPrivate)\n    }\n  }\n  // Get the parity bit for the (public) tapkey.\n  const parity : number = (isPrivate)\n    ? util.getPublicKey(tapkey)[0]\n    : tapkey[0]\n  // Get the block version / parity bit.\n  const cbit = Buff.num(version + readParityBit(parity))\n  // Create the control block, starting with\n  // the control bit and the (x-only) pubkey.\n  const block = [ cbit, pubkey ]\n  // If there is more than one path, add to block.\n  if (ctrlpath.length > 0) {\n    ctrlpath.forEach(e => block.push(Buff.hex(e)))\n  }\n  // Merge the data together into one array.\n  const cblock = Buff.join(block)\n  // If target is not undefined:\n  if (target !== undefined) {\n    // Check that the path is valid.\n    if (!checkPath(tapkey, target, cblock, config)) {\n      throw new Error('Path checking failed! Unable to generate path.')\n    }\n  }\n  return [ xOnlyPub(tapkey).hex, cblock.hex ]\n}\n\nexport function checkPath (\n  tapkey : Bytes,\n  target : Bytes,\n  cblock : Bytes,\n  config : TapConfig = {}\n) : boolean {\n  const { isPrivate = false, throws = false } = config\n  const { parity, paths, intkey } = readCtrlBlock(cblock)\n\n  const pub = (isPrivate)\n    ? util.getPublicKey(tapkey, true)\n    : xOnlyPub(tapkey)\n\n  const extkey = Buff.join([ parity, pub ])\n\n  if (extkey.length !== 33) {\n    return safeThrow('Invalid tapkey: ' + extkey.hex, throws)\n  }\n\n  let branch = Buff.bytes(target).hex\n\n  for (const path of paths) {\n    branch = getTapBranch(branch, path)\n  }\n\n  const k = getTweakedKey(intkey, branch)\n\n  // console.log('branch:', branch)\n  // console.log('intkey:', Buff.raw(intkey).hex)\n  // console.log('extkey:', extkey.hex)\n  // console.log('tapkey:', k.hex)\n\n  return (Buff.raw(k).hex === Buff.raw(extkey).hex)\n}\n\nexport function readCtrlBlock (cblock : Bytes) : CtrlBlock {\n  const buffer = new Stream(Buff.bytes(cblock))\n  const cbyte  = buffer.read(1).num\n  const intkey = buffer.read(32)\n  const [ version, parity ] = (cbyte % 2 === 0)\n    ? [ cbyte, 0x02 ]\n    : [ cbyte - 1, 0x03 ]\n  const paths  = []\n  while (buffer.size >= 32) {\n    paths.push(buffer.read(32).hex)\n  }\n  if (buffer.size !== 0) {\n    throw new Error('Non-empty buffer on control block: ' + String(buffer))\n  }\n  return { intkey, paths, parity, version }\n}\n\nexport function readParityBit (parity : number | string = 0x02) : number {\n  if (parity === 0 || parity === 1) return parity\n  if (parity === 0x02 || parity === '02') return 0\n  if (parity === 0x03 || parity === '03') return 1\n  throw new Error('Invalid parity bit: ' + String(parity))\n}\n"
  },
  {
    "path": "src/lib/tap/tree.ts",
    "content": "import { Buff }              from '@cmdcode/buff-utils'\nimport { TapTree, TapProof } from './types.js'\nimport { Bytes, ScriptData } from '../../schema/types.js'\nimport { Script } from '../script/index.js'\n\nconst DEFAULT_VERSION = 0xc0\n\nexport function getTapTag (tag : string) : Buff {\n  const htag = Buff.str(tag).digest\n  return Buff.join([ htag, htag ])\n}\n\nexport function getTapLeaf (\n  data : Bytes,\n  version = DEFAULT_VERSION\n) : string {\n  return Buff.join([\n    getTapTag('TapLeaf'),\n    getVersion(version),\n    Buff.bytes(data)\n  ]).digest.hex\n}\n\nexport function getTapScript (\n  script   : ScriptData,\n  version ?: number\n) : string {\n  return getTapLeaf(Script.fmt.toBytes(script), version)\n}\n\nexport function getTapBranch (\n  leafA : string,\n  leafB : string\n) : string {\n  // Compare leaves in lexical order.\n  if (leafB < leafA) {\n    // Swap leaves if needed.\n    [ leafA, leafB ] = [ leafB, leafA ]\n  }\n  // Return digest of leaves as a branch hash.\n  return Buff.join([\n    getTapTag('TapBranch'),\n    Buff.hex(leafA).raw,\n    Buff.hex(leafB).raw\n  ]).digest.hex\n}\n\nexport function getTapRoot (\n  leaves : TapTree\n) : Buff {\n  // Merkelize the leaves into a root hash.\n  return Buff.hex(merkleize(leaves)[0])\n}\n\nexport function merkleize (\n  taptree  : TapTree,\n  target  ?: string,\n  path     : string[] = []\n) : TapProof {\n  const leaves : string[] = []\n  const tree   : string[] = []\n\n  if (taptree.length < 1) {\n    throw new Error('Tree is empty!')\n  }\n\n  // If there are any nested leaves,\n  // resolve them before moving on.\n  for (let i = 0; i < taptree.length; i++) {\n    const leaf = taptree[i]\n    if (Array.isArray(leaf)) {\n      const [ r, t, p ] = merkleize(leaf, target)\n      target = t\n      leaves.push(r)\n      for (const e of p) {\n        path.push(e)\n      }\n    } else { leaves.push(leaf) }\n  }\n\n  // If there is only one leaf,\n  // then return it as the root.\n  if (leaves.length === 1) {\n    return [ leaves[0], target, path ]\n  }\n  // Ensure the tree is sorted.\n  leaves.sort()\n  // Ensure the tree is balanced evenly.\n  if (leaves.length % 2 !== 0) {\n    // If uneven, duplicate the last leaf.\n    leaves.push(leaves[leaves.length - 1])\n  }\n\n  // Sort through the leaves (two at a time).\n  for (let i = 0; i < leaves.length - 1; i += 2) {\n    // Compute two leaves into a branch.\n    const branch = getTapBranch(leaves[i], leaves[i + 1])\n    // Push our branch to the tree.\n    tree.push(branch)\n    // Check if a proof target is specified.\n    if (typeof target === 'string') {\n      // Check if this branch is part of our proofs.\n      if (target === leaves[i]) {\n        // If so, include right-side of branch.\n        path.push(leaves[i + 1])\n        target = branch\n      } else if (target === leaves[i + 1]) {\n        // If so, include left-side of branch.\n        path.push(leaves[i])\n        target = branch\n      }\n    }\n  }\n  return merkleize(tree, target, path)\n}\n\nexport function getVersion (version = 0xc0) : number {\n  return version & 0xfe\n}\n"
  },
  {
    "path": "src/lib/tap/tweak.ts",
    "content": "import { Buff }         from '@cmdcode/buff-utils'\nimport { Field, Point } from '@cmdcode/crypto-utils'\nimport { getTapTag }    from './tree.js'\nimport { xOnlyPub }     from './utils.js'\nimport { Bytes }        from '../../schema/types.js'\n\nexport function getTapTweak (\n  key   : Bytes,\n  data  : Bytes = new Uint8Array(),\n  isPrivate = false\n) : Buff {\n  const pub = (isPrivate)\n    ? new Field(key).point.x.raw\n    : xOnlyPub(key)\n  return Buff.join([ getTapTag('TapTweak'), pub, Buff.bytes(data) ]).digest\n}\n\nexport function getTweakedKey (\n  intkey  : Bytes,\n  data   ?: Bytes,\n  isPrivate = false\n) : Buff {\n  if (data === undefined) data = new Uint8Array()\n  const k = Buff.bytes(intkey)\n  // Calculate the tweak.\n  const t = getTapTweak(intkey, data, isPrivate)\n  // Return the tweaked key based on type.\n  if (isPrivate) {\n    // Return tweaked private key.\n    return tweakSecKey(k, t)\n  } else {\n    // Return tweaked public key.\n    return tweakPubKey(k, t)\n  }\n}\n\nexport function getTweakedPub (\n  pubkey  : Bytes,\n  data   ?: Bytes\n) : Buff {\n  return getTweakedKey(pubkey, data)\n}\n\nexport function getTweakedSec (\n  seckey  : Bytes,\n  data   ?: Bytes\n) : Buff {\n  return getTweakedKey(seckey, data, true)\n}\n\nexport function tweakSecKey (\n  seckey : Bytes,\n  tweak  : Bytes\n) : Buff {\n  let sec = new Field(seckey)\n  if (sec.point.hasOddY) {\n    sec = sec.negate()\n  }\n  return Buff.raw(sec.add(tweak).raw)\n}\n\nexport function tweakPubKey (\n  pubkey : Bytes,\n  tweak  : Bytes\n) : Buff {\n  pubkey = xOnlyPub(pubkey)\n  const P = Point.from_x(pubkey)\n  const Q = P.add(tweak)\n  return Buff.raw(Q.raw)\n}\n\nfunction getScriptOnlyPubkey () : Buff {\n  // Generated as specified in BIP0341:\n  // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki\n  const G = Buff.hex('0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8')\n  return Point.from_x(G.digest).x\n}\n\nexport const SCRIPT_PUBKEY = getScriptOnlyPubkey()\n"
  },
  {
    "path": "src/lib/tap/types.ts",
    "content": "import { Buff } from '@cmdcode/buff-utils'\nimport { Bytes, ScriptData } from '../../schema/types.js'\n\nexport type TapKey = [\n  key    : string,\n  cblock : string\n]\n\nexport interface TapConfig {\n  data      ?: Bytes\n  isPrivate ?: boolean\n  script    ?: ScriptData\n  tapleaf   ?: Bytes\n  target    ?: Bytes\n  throws    ?: boolean\n  tree      ?: TapTree\n  version   ?: number\n}\n\nexport interface CtrlBlock {\n  version : number\n  parity  : number\n  intkey  : Buff\n  paths   : string[]\n}\n\nexport type TapTree = Array<string | string[]>\n\nexport type TapProof = [\n  root   : string,\n  target : string | undefined,\n  path   : string[]\n]\n"
  },
  {
    "path": "src/lib/tap/utils.ts",
    "content": "import { Buff, Bytes } from '@cmdcode/buff-utils'\n\nexport function xOnlyPub (key : Bytes) : Buff {\n  const bytes = Buff.bytes(key)\n  return (bytes.length > 32) ? bytes.slice(1, 33) : bytes\n}\n"
  },
  {
    "path": "src/lib/tx/create.ts",
    "content": "import { TxData, TxTemplate } from '../../schema/types.js'\n\nconst DEFAULT_TX = {\n  version  : 2,\n  vin      : [],\n  vout     : [],\n  locktime : 0\n}\n\nconst DEFAULT_VIN = {\n  scriptSig : [],\n  sequence  : 4294967293,\n  witness   : []\n}\n\nconst DEFAULT_VOUT = {\n  value        : 0n,\n  scriptPubKey : []\n}\n\nexport function createTx (template : TxTemplate) : TxData {\n  const tx = { ...DEFAULT_TX, ...template }\n  tx.vin  = tx.vin.map(txin   => { return { ...DEFAULT_VIN, ...txin }   })\n  tx.vout = tx.vout.map(txout => { return { ...DEFAULT_VOUT, ...txout } })\n  return tx as TxData\n}\n"
  },
  {
    "path": "src/lib/tx/decode.ts",
    "content": "import { Buff, Stream } from '@cmdcode/buff-utils'\n\nimport {\n  TxData,\n  InputData,\n  OutputData\n} from '../../schema/types.js'\n\nexport function decodeTx (bytes : string | Uint8Array) : TxData {\n  /** Decode a raw bitcoin transaction. */\n\n  if (typeof bytes === 'string') {\n    bytes = Buff.hex(bytes).raw\n  }\n\n  // Setup a byte-stream.\n  const stream = new Stream(bytes)\n\n  const version = readVersion(stream)\n\n  // Check and enable any flags that are set.\n  const hasWitness = checkWitnessFlag(stream)\n\n  // Parse our inputs and outputs.\n  const vin  = readInputs(stream)\n  const vout = readOutputs(stream)\n\n  // If witness flag is set, parse witness data.\n  if (hasWitness) {\n    for (const txin of vin) {\n      txin.witness = readWitness(stream)\n    }\n  }\n\n  // Parse locktime.\n  const locktime = readLocktime(stream)\n\n  // Return transaction object with calculated fields.\n  return { version, vin, vout, locktime }\n}\n\nfunction readVersion (stream : Stream) : number {\n  return stream.read(4).reverse().toNum()\n}\n\nfunction checkWitnessFlag (stream : Stream) : boolean {\n  const [ marker, flag ] : number[] = [ ...stream.peek(2) ]\n  if (marker === 0) {\n    stream.read(2)\n    if (flag === 1) {\n      return true\n    } else {\n      throw new Error(`Invalid witness flag: ${flag}`)\n    }\n  }\n  return false\n}\n\nfunction readInputs (stream : Stream) : InputData[] {\n  const inputs = []\n  const vinCount = stream.readSize('le')\n  for (let i = 0; i < vinCount; i++) {\n    inputs.push(readInput(stream))\n  }\n  return inputs\n}\n\nfunction readInput (stream : Stream) : InputData {\n  const txin = {\n    txid      : stream.read(32).reverse().toHex(),\n    vout      : stream.read(4).reverse().toNum(),\n    scriptSig : readScript(stream, true),\n    sequence  : stream.read(4).reverse().toHex(),\n    witness   : []\n  }\n  return txin\n}\n\nfunction readOutputs (stream : Stream) : OutputData[] {\n  const outputs  = []\n  const outcount = stream.readSize('le')\n  for (let i = 0; i < outcount; i++) {\n    outputs.push(readOutput(stream))\n  }\n  return outputs\n}\n\nfunction readOutput (stream : Stream) : OutputData {\n  const txout = {\n    value        : stream.read(8).reverse().big,\n    scriptPubKey : readScript(stream, true)\n  }\n  return txout\n}\n\nfunction readWitness (stream : Stream) : string[] {\n  const stack = []\n  const count = stream.readSize()\n  for (let i = 0; i < count; i++) {\n    const word = readData(stream, true)\n    stack.push(word ?? '')\n  }\n  return stack\n}\n\nfunction readData (\n  stream  : Stream,\n  varint ?: boolean\n) : string | null {\n  const size = (varint === true)\n    ? stream.readSize('le')\n    : stream.size\n  return size > 0\n    ? stream.read(size).hex\n    : null\n}\n\nfunction readScript (\n  stream  : Stream,\n  varint ?: boolean\n) : string | string[] {\n  const data = readData(stream, varint)\n  return (data !== null) ? data : []\n}\n\nfunction readLocktime (stream : Stream) : number {\n  return stream.read(4).reverse().toNum()\n}\n"
  },
  {
    "path": "src/lib/tx/encode.ts",
    "content": "import { Buff }         from '@cmdcode/buff-utils'\nimport { encodeScript } from '../script/encode.js'\nimport { createTx }     from './create.js'\n\nimport {\n  InputData,\n  OutputData,\n  SequenceData,\n  ScriptData,\n  TxTemplate,\n  LockData,\n  ValueData,\n  TxData\n} from '../../schema/types.js'\n\nexport function encodeTx (\n  txdata : TxTemplate | TxData,\n  omitWitness ?: boolean\n) : Buff {\n  /** Convert a JSON-based Bitcoin transaction\n   * into hex-encoded bytes.\n   * */\n  const { version, vin, vout, locktime } = createTx(txdata)\n\n  const useWitness = (omitWitness !== true && checkForWitness(vin))\n\n  const raw = [ encodeVersion(version) ]\n\n  if (useWitness) {\n    raw.push(Buff.hex('0001'))\n  }\n\n  raw.push(encodeInputs(vin))\n  raw.push(encodeOutputs(vout))\n\n  for (const txin of vin) {\n    if (useWitness) {\n      raw.push(encodeWitness(txin.witness))\n    }\n  }\n\n  raw.push(encodeLocktime(locktime))\n\n  return Buff.join(raw)\n}\n\nfunction checkForWitness (vin : InputData[]) : boolean {\n  /** Check if any witness data is present. */\n  for (const txin of vin) {\n    const { witness } = txin\n    if (\n      typeof witness === 'string'   ||\n      witness instanceof Uint8Array ||\n      (Array.isArray(witness) && witness.length > 0)\n    ) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function encodeVersion (num : number) : Uint8Array {\n  return Buff.num(num, 4).reverse()\n}\n\nexport function encodeTxid (txid : string) : Uint8Array {\n  return Buff.hex(txid, 32).reverse()\n}\n\nexport function encodePrevOut (vout : number) : Uint8Array {\n  return Buff.num(vout, 4).reverse()\n}\n\nexport function encodeSequence (\n  sequence : SequenceData\n) : Uint8Array {\n  if (typeof sequence === 'string') {\n    return Buff.hex(sequence, 4).reverse()\n  }\n  if (typeof sequence === 'number') {\n    return Buff.num(sequence, 4).reverse()\n  }\n  throw new Error('Unrecognized format: ' + String(sequence))\n}\n\nfunction encodeInputs (arr : InputData[]) : Uint8Array {\n  const raw : Uint8Array[] = [ Buff.varInt(arr.length, 'le') ]\n  for (const vin of arr) {\n    const { txid, vout, scriptSig, sequence } = vin\n    raw.push(encodeTxid(txid))\n    raw.push(encodePrevOut(vout))\n    raw.push(encodeScript(scriptSig, true))\n    raw.push(encodeSequence(sequence))\n  }\n  return Buff.join(raw)\n}\n\nexport function encodeValue (\n  value : ValueData\n) : Uint8Array {\n  if (typeof value === 'number') {\n    if (value % 1 !== 0) {\n      throw new Error('Value must be an integer:' + String(value))\n    }\n    return Buff.num(value, 8).reverse()\n  }\n  return Buff.big(value, 8).reverse()\n}\n\nfunction encodeOutputs (arr : OutputData[]) : Uint8Array {\n  const raw : Uint8Array[] = [ Buff.varInt(arr.length, 'le') ]\n  for (const vout of arr) {\n    raw.push(encodeOutput(vout))\n  }\n  return Buff.join(raw)\n}\n\nfunction encodeOutput (\n  vout : OutputData\n) : Uint8Array {\n  const { value, scriptPubKey } = vout\n  const raw : Uint8Array[] = []\n  raw.push(encodeValue(value))\n  raw.push(encodeScript(scriptPubKey, true))\n  return Buff.join(raw)\n}\n\nfunction encodeWitness (\n  data : ScriptData[] = []\n) : Uint8Array {\n  const buffer : Uint8Array[] = []\n  if (Array.isArray(data)) {\n    const count = Buff.varInt(data.length)\n    buffer.push(count)\n    for (const entry of data) {\n      buffer.push(encodeData(entry))\n    }\n    return Buff.join(buffer)\n  } else { return Buff.bytes(data) }\n}\n\nfunction encodeData (data : ScriptData) : Buff {\n  return (!isEmpty(data))\n    ? encodeScript(data, true)\n    : new Buff(0)\n}\n\nfunction isEmpty (data : ScriptData) : boolean {\n  if (Array.isArray(data)) {\n    return data.length === 0\n  }\n  if (typeof data === 'string') {\n    if (data === '') return true\n  }\n  const bytes = Buff.bytes(data)\n  return bytes.length === 1 && bytes[0] === 0\n}\n\nexport function encodeLocktime (locktime : LockData) : Uint8Array {\n  if (typeof locktime === 'string') {\n    return Buff.hex(locktime, 4)\n  }\n  if (typeof locktime === 'number') {\n    return Buff.num(locktime, 4).reverse()\n  }\n  throw new Error('Unrecognized format: ' + String(locktime))\n}\n"
  },
  {
    "path": "src/lib/tx/format.ts",
    "content": "import { Buff }     from '@cmdcode/buff-utils'\nimport { isBytes }  from '../check.js'\nimport { decodeTx } from './decode.js'\nimport { encodeTx } from './encode.js'\nimport { createTx } from './create.js'\n\nimport { Bytes, TxData, TxTemplate } from '../../schema/types.js'\n\nexport function toJson (\n  txdata ?: Bytes | TxData | TxTemplate\n) : TxData {\n  if (isBytes(txdata)) {\n    return decodeTx(txdata)\n  }\n  if (\n    typeof txdata === 'object' &&\n    !(txdata instanceof Uint8Array)\n  ) {\n    encodeTx(txdata)\n    return createTx(txdata)\n  }\n  throw new Error('Invalid format: ' + String(typeof txdata))\n}\n\nexport function toBytes (\n  txdata ?: Bytes | TxData | TxTemplate\n) : Buff {\n  if (isBytes(txdata)) {\n    decodeTx(txdata)\n    return Buff.bytes(txdata)\n  }\n  if (typeof txdata === 'object') {\n    return encodeTx(txdata)\n  }\n  throw new Error('Invalid format: ' + String(typeof txdata))\n}\n\nexport const TxFmt = {\n  toBytes,\n  toJson\n}\n"
  },
  {
    "path": "src/lib/tx/index.ts",
    "content": "import { encodeTx } from './encode.js'\nimport { decodeTx } from './decode.js'\nimport { TxFmt }    from './format.js'\nimport { createTx } from './create.js'\n\nimport {\n  getTxid,\n  getTxSize,\n  readScriptPubKey,\n  readWitness\n} from './parse.js'\n\nexport const Tx = {\n  create : createTx,\n  encode : encodeTx,\n  decode : decodeTx,\n  fmt    : TxFmt,\n  util   : {\n    getTxSize,\n    getTxid,\n    readScriptPubKey,\n    readWitness\n  }\n}\n"
  },
  {
    "path": "src/lib/tx/parse.ts",
    "content": "import { Buff }     from '@cmdcode/buff-utils'\nimport { isHex }    from '../check.js'\nimport { Script }   from '../script/index.js'\nimport { encodeTx } from './encode.js'\nimport { TxFmt }    from './format.js'\n\nimport {\n  Bytes,\n  OutputType,\n  ScriptData,\n  ScriptPubKeyData,\n  TxData,\n  WitnessData\n} from '../../schema/types.js'\n\nimport { hash256 } from '@cmdcode/crypto-utils'\n\ninterface TxSizeData {\n  size   : number\n  bsize  : number\n  vsize  : number\n  weight : number\n}\n\nconst OUTPUT_TYPES : Array<[ string, RegExp ]> = [\n  [ 'p2pkh',   /^76a914(?<hash>\\w{40})88ac$/ ],\n  [ 'p2sh',    /^a914(?<hash>\\w{40})87$/     ],\n  [ 'p2w-pkh', /^0014(?<hash>\\w{40})$/       ],\n  [ 'p2w-sh',  /^0020(?<hash>\\w{64})$/       ],\n  [ 'p2tr',    /^5120(?<hash>\\w{64})$/       ]\n]\n\nconst LEAF_VERSIONS = [\n  0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce,\n  0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,\n  0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,\n  0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,\n  0x66, 0x7e, 0x80, 0x84, 0x96, 0x98, 0xba, 0xbc,\n  0xbe\n]\n\nfunction parseAnnex (\n  data : ScriptData[]\n) : Buff | null {\n  let item = data.at(-1)\n\n  if (isHex(item)) {\n    item = Buff.hex(item)\n  }\n\n  if (\n    data.length > 1            &&\n    item instanceof Uint8Array &&\n    item[0] === 0x50\n  ) {\n    data.pop()\n    return Buff.raw(item)\n  }\n\n  return null\n}\n\nfunction parseBlock (\n  data : ScriptData[]\n) : Buff | null {\n  let item = data.at(-1)\n\n  if (isHex(item)) {\n    item = Buff.hex(item)\n  }\n\n  if (\n    data.length > 1            &&\n    item instanceof Uint8Array &&\n    item.length > 32           &&\n    LEAF_VERSIONS.includes(item[0] & 0xfe)\n  ) {\n    data.pop()\n    return Buff.raw(item)\n  }\n\n  return null\n}\n\nfunction parseWitScript (\n  data : ScriptData[]\n) : Buff | null {\n  if (data.length > 1) {\n    const item = data.at(-1)\n    try {\n      const script = Script.fmt.toBytes(item)\n      data.pop()\n      return script\n    } catch (err) {\n      return null\n    }\n  }\n  return null\n}\n\nfunction parseParams (\n  data : ScriptData[]\n) : Bytes[] {\n  const params : Bytes[] = []\n  for (const d of data) {\n    if (isHex(d)            ||\n    d instanceof Uint8Array || \n    typeof d === 'number'\n  ) {\n      params.push(Buff.bytes(d))\n    } else {\n      throw new Error('unrecognized value: ' + String(d))\n    }\n  }\n  return params\n}\n\nexport function readWitness (\n  data : ScriptData[] = []\n) : WitnessData {\n  const items  = [ ...data ]\n  const annex  = parseAnnex(items)\n  const cblock = parseBlock(items)\n  const script = parseWitScript(items)\n  const params = parseParams(items)\n  return { annex, cblock, script, params }\n}\n\nexport function readScriptPubKey (\n  script : ScriptData\n) : ScriptPubKeyData {\n  const hex = Script.fmt.toBytes(script, false).hex\n  for (const [ keytype, pattern ] of OUTPUT_TYPES) {\n    const type = keytype as OutputType\n    const { groups } = pattern.exec(hex) ?? {}\n    const { hash   } = groups ?? {}\n    if (isHex(hash)) {\n      return { type, data: Buff.hex(hash) }\n    }\n  }\n  return { type: 'raw', data: Buff.hex(hex) }\n}\n\nexport function getTxid (txdata : TxData | Bytes) : string {\n  const json = TxFmt.toJson(txdata)\n  const data = encodeTx(json, true)\n  return hash256(data).reverse().hex\n}\n\nexport function getTxSize (txdata : TxData | Bytes) : TxSizeData {\n  const json   = TxFmt.toJson(txdata)\n  const bsize  = encodeTx(json, true).length\n  const fsize  = encodeTx(json, false).length\n  const weight = bsize * 3 + fsize\n  const remain = (weight % 4 > 0) ? 1 : 0\n  const vsize  = Math.floor(weight / 4) + remain\n  return { size: fsize, bsize, vsize, weight }\n}\n"
  },
  {
    "path": "src/lib/utils.ts",
    "content": "import { Buff, Bytes } from '@cmdcode/buff-utils'\n\nexport function checkSize (input : Bytes, size : number) : void {\n  const bytes = Buff.bytes(input)\n  if (bytes.length !== size) {\n    throw new Error(`Invalid input size: ${bytes.hex} !== ${size}`)\n  }\n}\n\nexport function safeThrow (\n  errorMsg    : string,\n  shouldThrow : boolean\n) : boolean {\n  if (shouldThrow) {\n    throw new Error(errorMsg)\n  } else { return false }\n}\n\nexport function hashTag (\n  tag : string,\n  ...data : Bytes[]\n) : Buff {\n  const htag = Buff.str(tag).digest.raw\n  const buff = data.map(e => Buff.bytes(e))\n  return Buff.join([ htag, htag, Buff.join(buff) ]).digest\n}\n"
  },
  {
    "path": "src/schema/check.ts",
    "content": "import { z } from 'zod'\n\nconst hexstr  = z.string().regex(/^[a-fA-F0-9]$/)\nconst hash    = z.string().regex(/^[a-fA-F0-9]{64}$/)\nconst uint32  = z.number().min(0).max(0xFFFFFFFF)\nconst uint64  = z.bigint()\nconst byteArr = z.instanceof(Uint8Array)\nconst asmcode = z.union([ hexstr, uint32, z.string(), byteArr ]).array()\nconst script  = z.union([ asmcode, hexstr, byteArr ])\nconst witness = z.array(script)\n\nconst TxOutput = z.object({\n  value        : z.union([ uint32, uint64 ]),\n  scriptPubKey : script\n})\n\nconst TxInput = z.object({\n  txid      : hash,\n  vout      : uint32,\n  scriptSig : script,\n  sequence  : uint32,\n  prevout   : TxOutput.optional(),\n  witness\n})\n\nconst TxData = z.object({\n  version  : uint32,\n  vin      : z.array(TxInput),\n  vout     : z.array(TxOutput),\n  locktime : uint32\n})\n\nexport const Schema = {\n  TxData,\n  TxInput,\n  TxOutput,\n  witness,\n  script,\n  hexstr,\n  hash,\n  uint32,\n  uint64\n}\n"
  },
  {
    "path": "src/schema/types.ts",
    "content": "import { Buff } from '@cmdcode/buff-utils'\n\nexport type Networks   = 'main' | 'testnet' | 'signet' | 'regtest'\n\nexport type InputType  = 'p2pkh'   | 'p2sh'   | 'p2w-p2pkh' | 'p2w-p2sh' |\n                         'p2w-pkh' | 'p2w-sh' | 'p2tr' | 'raw'\n\nexport type OutputType = 'p2pkh'  | 'p2sh'  | 'p2w-pkh' | 'p2w-sh' | 'p2tr' | 'raw'\n\nexport interface TxTemplate {\n  version  ?: number\n  vin      ?: Array<{\n    txid : string\n    vout : number\n    scriptSig ?: ScriptData\n    sequence  ?: SequenceData\n    witness   ?: ScriptData[]\n    prevout   ?: OutputData\n  }>\n  vout ?: Array<{\n    value        ?: ValueData\n    scriptPubKey ?: ScriptData\n  }>\n  locktime ?: LockData\n}\n\nexport interface TxData {\n  version  : number\n  vin      : InputData[]\n  vout     : OutputData[]\n  locktime : LockData\n}\n\nexport interface InputData {\n  txid : string\n  vout : number\n  scriptSig : ScriptData\n  sequence  : SequenceData\n  witness   : ScriptData[]\n  prevout  ?: OutputData\n}\n\nexport interface OutputData {\n  value        : ValueData\n  scriptPubKey : ScriptData\n}\n\nexport interface ScriptPubKeyData {\n  type : OutputType\n  data : Buff\n}\n\nexport interface WitnessData {\n  annex  : Buff | null\n  cblock : Buff | null\n  script : Buff | null\n  params : Bytes[]\n}\n\nexport type SequenceData = string | number\nexport type LockData     = string | number\nexport type ValueData    = number | bigint\nexport type ScriptData   = Bytes  | Word[]\nexport type Bytes        = string | Uint8Array\nexport type Word         = string | number | Uint8Array\n"
  },
  {
    "path": "test/bitcoin.conf",
    "content": ""
  },
  {
    "path": "test/core.ts",
    "content": "import { CoreClient, CoreConfig, CoreDaemon } from '@cmdcode/core-cmd'\n\nconst DEFAULT_CONFIG = {\n  core_params : [ '-txindex' ],\n  corepath    : 'test/bin/bitcoind',\n  clipath     : 'test/bin/bitcoin-cli',\n  confpath    : 'test/bitcoin.conf',\n  datapath    : 'test/data',\n  network     : 'regtest',\n  isolated    : true,\n  debug       : false,\n  verbose     : false\n}\n\nlet daemon : CoreDaemon | null = null\n\nexport function get_client (\n  config : Partial<CoreConfig> = DEFAULT_CONFIG\n) : Promise<CoreClient> {\n  if (daemon === null) {\n    daemon = new CoreDaemon(config)\n  }\n  return daemon.startup()\n}\n"
  },
  {
    "path": "test/example/ex_test.ts",
    "content": "import { Test } from 'tape'\nimport { key_spend }    from './taproot/keyspend.test.js'\nimport { script_spend } from './taproot/tapscript.test.js'\nimport { tree_spend }   from './taproot/taptree.test.js'\nimport { inscription }  from './taproot/inscribe.test.js'\nimport { get_client }   from '../core.js'\n\nconst client = await get_client()\nconst wallet = await client.load_wallet('test')\n\nawait wallet.ensure_funds(1_000_000)\n\nexport default async function example_tests (t : Test) : Promise<void> {\n  t.test('Example Tests', async t => {\n    await key_spend(t, wallet)\n    await script_spend(t, wallet)\n    await tree_spend(t, wallet)\n    await inscription(t, wallet)\n  })\n\n  t.teardown(() => client.core.shutdown())\n}\n"
  },
  {
    "path": "test/example/taproot/inscribe.test.ts",
    "content": "import { Test }       from 'tape'\nimport { CoreWallet } from '@cmdcode/core-cmd'\nimport { Buff }       from '@cmdcode/buff-utils'\nimport { util }       from '@cmdcode/crypto-utils'\n\nimport { Address, Signer, Tap, Tx, } from '../../../src/index.js'\n\nimport fs      from 'fs/promises'\nimport { URL } from 'url'\n\nexport async function inscription (t : Test, wallet : CoreWallet) : Promise<void> {\n  t.test('Example of an inscription transaction.', async t => {\n    t.plan(2)\n\n    // Switch this to true to enable console output.\n    const VERBOSE = false\n\n    /** \n    * The code marked below is a quick example of how to load an image \n    * within a NodeJS environment. It may not work in other environments.\n    *\n    * For examples of how to convert images into binary from within a browser\n    * environment, please check out the Web File API:\n    * https://developer.mozilla.org/en-US/docs/Web/API/File \n    */\n    const imgpath = new URL('./image.png', import.meta.url).pathname\n    const imgdata = await fs.readFile(imgpath).then(e => new Uint8Array(e))\n\n    /**\n     * Specify the \"marker\" bytes. Ord uses this to recognize your script\n     * as an inscription.\n     */\n    const marker = Buff.encode('ord')\n\n    /**\n     * Specify the media type of the file. Applications use this when rendering \n     * content. See: https://developer.mozilla.org/en-US/docs/Glossary/MIME_type \n     */\n    const mimetype = Buff.encode('image/png')\n\n    /**\n     * Specify a secret key to use for signing.\n     */\n    const secret = '0a7d01d1c2e1592a02ea7671bb79ecd31d8d5e660b008f4b10e67787f4f24712'\n    const seckey = util.getSecretKey(secret)\n    const pubkey = util.getPublicKey(seckey, true)\n\n\n    // Basic format of an 'inscription' script.\n    const script = [ pubkey, 'OP_CHECKSIG', 'OP_0', 'OP_IF', marker, '01', mimetype, 'OP_0', imgdata, 'OP_ENDIF' ]\n\n    // For tapscript spends, we need to convert this script into a 'tapleaf'.\n    const tapleaf = Tap.encodeScript(script)\n\n    // Generate a tapkey that includes our leaf script. Also, create a merlke proof \n    // (cblock) that targets our leaf and proves its inclusion in the tapkey.\n    const [ tpubkey, cblock ] = Tap.getPubKey(pubkey, { target: tapleaf })\n\n    // A taproot address is simply the tweaked public key, encoded in bech32 format.\n    const address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n\n    if (VERBOSE) console.log('Your address:', address)\n\n    // Generate a utxo for testing (using a local core client).\n    const utxo = await wallet.create_utxo(100_000, address)\n\n    const txdata = Tx.create({\n      vin  : [{\n        // Use the txid of the funding transaction used to send the sats.\n        txid    : utxo.txid,\n        // Specify the index value of the output that you are going to spend from.\n        vout    : utxo.vout,\n        // Also include the value and script of that ouput.\n        prevout : utxo.prevout\n      }],\n      vout : [{\n        // We are leaving behind 10_000 sats as a fee to the miners.\n        value: 90_000,\n        // This is the new script that we are locking our funds to.\n        scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n      }]\n    })\n\n    // For this example, we are signing for input 0 of our transaction,\n    // using the untweaked secret key. We are also extending the signature \n    // to include a commitment to the tapleaf script that we wish to use.\n    const sig = Signer.taproot.sign(seckey, txdata, 0, { extension: tapleaf })\n\n    // Add the signature to our witness data for input 0, along with the script\n    // and merkle proof (cblock) for the script.\n    txdata.vin[0].witness = [ sig, script, cblock ]\n\n    // Check if the signature is valid for the provided public key, and that the\n    // transaction is also valid (the merkle proof will be validated as well).\n    const isValid = Signer.taproot.verify(txdata, 0, { pubkey, throws: true })\n\n    t.equal(isValid, true, 'Transaction should pass validation.')\n\n    // Encode the final transaction as hex.\n    const txhex = Tx.encode(txdata)\n    \n    // Publish the transaction using a local bitcoin core client.\n    const txid  = await wallet.client.publish_tx(txhex, true)\n\n    t.pass('Transaction broadcast with txid: ' + txid)\n\n    if (VERBOSE) {\n      console.log('Your txhex:', Tx.encode(txdata).hex)\n      console.dir(txdata, { depth: null })\n    }\n  })\n}\n"
  },
  {
    "path": "test/example/taproot/keyspend.test.ts",
    "content": "\nimport { Test }       from 'tape'\nimport { util }       from '@cmdcode/crypto-utils'\nimport { CoreWallet } from '@cmdcode/core-cmd'\n\nimport { Address, Signer, Tap, Tx, } from '../../../src/index.js'\n\nexport async function key_spend (t : Test, wallet : CoreWallet) : Promise<void> {\n  t.test('Basic spend using key-path.', async t => {\n    t.plan(2)\n    \n    // Switch this to true to enable console output.\n    const VERBOSE = false\n\n    // Create a keypair to use for testing.\n    const secret = 'ccd54b99acec77d0537b01431579baef998efac6b08e9564bc3047b20ec1bb4c'\n    const seckey = util.getSecretKey(secret)\n    const pubkey = util.getPublicKey(seckey, true)\n\n    // For key spends, we need to get the tweaked versions\n    // of the secret key and public key.\n    const [ tseckey ] = Tap.getSecKey(seckey)\n    const [ tpubkey ] = Tap.getPubKey(pubkey)\n\n    // Optional: You could also derive the public key from the tweaked secret key.\n    const _tpubkey_example = util.getPublicKey(tseckey, true).hex\n\n    // A taproot address is simply the tweaked public key, encoded in bech32 format.\n    const address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n\n    if (VERBOSE) console.log('Your address:', address)\n\n    // Generate a utxo for testing (using a local core client).\n    const utxo = await wallet.create_utxo(100_000, address)\n\n    const txdata = Tx.create({\n      vin  : [{\n        // Use the txid of the funding transaction used to send the sats.\n        txid: utxo.txid,\n        // Specify the index value of the output that you are going to spend from.\n        vout: utxo.vout,\n        // Also include the value and script of that ouput.\n        prevout: utxo.prevout,\n      }],\n      vout : [{\n        // We are leaving behind 10_000 sats as a fee to the miners.\n        value: 90_000,\n        // This is the new script that we are locking our funds to.\n        scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n      }]\n    })\n\n    // For this example, we are signing for input 0 of our transaction,\n    // using the tweaked secret key.\n    const sig = Signer.taproot.sign(tseckey, txdata, 0)\n\n    // Let's add this signature to our witness data for input 0.\n    txdata.vin[0].witness = [ sig ]\n\n    // Check if the signature and transaction are valid.\n    const isValid = Signer.taproot.verify(txdata, 0)\n\n    t.equal(isValid, true, 'Transaction should pass validation.')\n\n    // Encode the final transaction as hex.\n    const txhex = Tx.encode(txdata)\n    \n    // Publish the transaction using a local bitcoin core client.\n    const txid  = await wallet.client.publish_tx(txhex, true)\n\n    t.pass('Transaction broadcast with txid: ' + txid)\n\n    if (VERBOSE) {\n      console.log('Your txhex:', Tx.encode(txdata).hex)\n      console.dir(txdata, { depth: null })\n    }\n  })\n}\n"
  },
  {
    "path": "test/example/taproot/tapscript.test.ts",
    "content": "import { Test }       from 'tape'\nimport { util }       from '@cmdcode/crypto-utils'\nimport { CoreWallet } from '@cmdcode/core-cmd'\n\nimport { Address, Script, Signer, Tap, Tx, } from '../../../src/index.js'\n\nexport async function script_spend (t : Test, wallet : CoreWallet) : Promise<void> {\n  t.test('Basic spend using tapscript.', async t => {\n    t.plan(2)\n\n    // Switch this to true to enable console output.\n    const VERBOSE = false\n\n    // Create a keypair to use for testing.\n    const secret = '0a7d01d1c2e1592a02ea7671bb79ecd31d8d5e660b008f4b10e67787f4f24712'\n    const seckey = util.getSecretKey(secret)\n    const pubkey = util.getPublicKey(seckey, true)\n\n    // Specify a basic script to use for testing.\n    const script = [ pubkey, 'OP_CHECKSIG' ]\n    const sbytes = Script.encode(script)\n\n    // For tapscript spends, we need to convert this script into a 'tapleaf'.\n    const tapleaf = Tap.tree.getLeaf(sbytes)\n\n    // Generate a tapkey that includes our leaf script. Also, create a merlke proof \n    // (cblock) that targets our leaf and proves its inclusion in the tapkey.\n    const [ tpubkey, cblock ] = Tap.getPubKey(pubkey, { target: tapleaf })\n\n    // A taproot address is simply the tweaked public key, encoded in bech32 format.\n    const address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n    if (VERBOSE) console.log('Your address:', address)\n\n    // Generate a utxo for testing (using a local core client).\n    const utxo = await wallet.create_utxo(100_000, address)\n\n    const txdata = Tx.create({\n      vin  : [{\n        // Use the txid of the funding transaction used to send the sats.\n        txid    : utxo.txid,\n        // Specify the index value of the output that you are going to spend from.\n        vout    : utxo.vout,\n        // Also include the value and script of that ouput.\n        prevout : utxo.prevout\n      }],\n      vout : [{\n        // We are leaving behind 1000 sats as a fee to the miners.\n        value: 99_000,\n        // This is the new script that we are locking our funds to.\n        scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n      }]\n    })\n\n    // For this example, we are signing for input 0 of our transaction,\n    // using the untweaked secret key. We are also extending the signature \n    // to include a commitment to the tapleaf script that we wish to use.\n    const sig = Signer.taproot.sign(seckey, txdata, 0, { extension: tapleaf })\n\n    // Add the signature to our witness data for input 0, along with the script\n    // and merkle proof (cblock) for the script.\n    txdata.vin[0].witness = [ sig.hex, script, cblock ]\n\n    // Check if the signature is valid for the provided public key, and that the\n    // transaction is also valid (the merkle proof will be validated as well).\n    const isValid = Signer.taproot.verify(txdata, 0, { pubkey })\n\n    t.equal(isValid, true, 'Transaction should pass validation.')\n\n    // Encode the final transaction as hex.\n    const txhex = Tx.encode(txdata)\n    \n    // Publish the transaction using a local bitcoin core client.\n    const txid  = await wallet.client.publish_tx(txhex, true)\n\n    t.pass('Transaction broadcast with txid: ' + txid)\n\n    if (VERBOSE) {\n      console.log('Your txhex:', Tx.encode(txdata).hex)\n      console.dir(txdata, { depth: null })\n    }\n  })\n}\n"
  },
  {
    "path": "test/example/taproot/taptree.test.ts",
    "content": "import { Test }       from 'tape'\nimport { util }       from '@cmdcode/crypto-utils'\nimport { CoreWallet } from '@cmdcode/core-cmd'\n\nimport { Address, Signer, Tap, Tx, } from '../../../src/index.js'\n\nexport async function tree_spend (t : Test, wallet : CoreWallet) : Promise<void> {\n  t.test('Spend a script inside a tree.', async t => {\n    // Switch this to true to enable console output.\n    const VERBOSE = false\n\n    // Create a keypair to use for testing.\n    const secret = '0a7d01d1c2e1592a02ea7671bb79ecd31d8d5e660b008f4b10e67787f4f24712'\n    const seckey = util.getSecretKey(secret)\n    const pubkey = util.getPublicKey(seckey, true)\n\n    // Specify an array of scripts to use for testing.\n    const scripts = [\n      [ 1, 7, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n      [ 2, 6, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n      [ 3, 5, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n      [ 4, 4, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n      [ 5, 3, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n      [ 6, 2, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ],\n      [ 7, 1, 'OP_ADD', 8, 'OP_EQUALVERIFY', pubkey, 'OP_CHECKSIG' ]\n    ]\n\n    // Convert our array of scripts into tapleaves.\n    const tree = scripts.map(s => Tap.encodeScript(s))\n\n    if (VERBOSE) console.log('tree:', tree)\n\n    // Pick one of our scripts as a target for spending.\n    const index  = Math.floor(Math.random() * 10) % 7\n    const script = scripts[index]\n    const target = Tap.encodeScript(script)\n\n    if (VERBOSE) console.log('target:', target)\n\n    // Generate a tapkey that includes our tree. Also, create a merlke proof \n    // (cblock) that targets our leaf and proves its inclusion in the tapkey.\n    const [ tpubkey, cblock ] = Tap.getPubKey(pubkey, { tree, target })\n\n    // A taproot address is simply the tweaked public key, encoded in bech32 format.\n    const address = Address.p2tr.fromPubKey(tpubkey, 'regtest')\n\n    if (VERBOSE) console.log('Your address:', address)\n\n    // Generate a utxo for testing (using a local core client).\n    const utxo = await wallet.create_utxo(100_000, address)\n\n    const txdata = Tx.create({\n      vin  : [{\n        // Use the txid of the funding transaction used to send the sats.\n        txid    : utxo.txid,\n        // Specify the index value of the output that you are going to spend from.\n        vout    : utxo.vout,\n        // Also include the value and script of that ouput.\n        prevout : utxo.prevout\n      }],\n      vout : [{\n        // We are leaving behind 10_000 sats as a fee to the miners.\n        value: 90_000,\n        // This is the new script that we are locking our funds to.\n        scriptPubKey: Address.toScriptPubKey('bcrt1q6zpf4gefu4ckuud3pjch563nm7x27u4ruahz3y')\n      }]\n    })\n\n    // For this example, we are signing for input 0 of our transaction,\n    // using the untweaked secret key. We are also extending the signature \n    // to include a commitment to the tapleaf script that we wish to use.\n    const sig = Signer.taproot.sign(seckey, txdata, 0, { extension: target })\n\n    // Add the signature to our witness data for input 0, along with the script\n    // and merkle proof (cblock) for the script.\n    txdata.vin[0].witness = [ sig.hex, script, cblock ]\n\n    // Check if the signature is valid for the provided public key, and that the\n    // transaction is also valid (the merkle proof will be validated as well).\n    const isValid = await Signer.taproot.verify(txdata, 0, { pubkey })\n\n    t.equal(isValid, true, 'Transaction should pass validation.')\n\n    // Encode the final transaction as hex.\n    const txhex = Tx.encode(txdata)\n    \n    // Publish the transaction using a local bitcoin core client.\n    const txid  = await wallet.client.publish_tx(txhex, true)\n\n    t.pass('Transaction broadcast with txid: ' + txid)\n\n    if (VERBOSE) {\n      console.log('Your txhex:', Tx.encode(txdata).hex)\n      console.dir(txdata, { depth: null })\n    }\n  })\n}\n"
  },
  {
    "path": "test/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Browser Scratch</title>\n</head>\n<body>\n  <script src=\"../dist/bundle.min.js\"></script>\n  <script type=\"module\">\n    const { Tx } = window.tapscript\n\n    const testTx = Tx.create({\n      version: 2,\n      vin: [\n        {\n          txid: '1b4135af95b2728fcf6c77df66e83c7dea903d83856b7cb770983bfad8c32719',\n          vout: 0,\n          witness: [\n            '30440220084d33f3184626e745ded7792ef265230465d90308698a3ea858579428c0ac1f0220528224177f1bba21ddc83716c11d3a04ae28c0cef4f92649ccf9f88775ebe9c401',\n            '03c1f09640d7ac03330876ecda7bcf30afa46431898b0e55d037c01d3bd03ec3da',\n            '76a914c021f50982f8901e92ea7f92b3a3d546568fb9e788ac'\n          ]\n        },\n        {\n          txid: '1b4135af95b2728fcf6c77df66e83c7dea903d83856b7cb770983bfad8c32719',\n          vout: 1,\n          witness: [\n            '30440220084d33f3184626e745ded7792ef265230465d90308698a3ea858579428c0ac1f0220528224177f1bba21ddc83716c11d3a04ae28c0cef4f92649ccf9f88775ebe9c401',\n            '03c1f09640d7ac03330876ecda7bcf30afa46431898b0e55d037c01d3bd03ec3da',\n            '76a9149094a9bb2e62972048368ed8a6770f5c8516a0f688ac'\n          ]\n        }\n      ],\n      vout: [\n        {\n          value: 1_250_000_000,\n          scriptPubkey: [0, '9094a9bb2e62972048368ed8a6770f5c8516a0f6']\n        },\n        {\n          value: 1_249_999_000,\n          scriptPubkey: [0, 'c021f50982f8901e92ea7f92b3a3d546568fb9e7']\n        }\n      ],\n      locktime: 0\n    })\n\n    const encoded = Tx.encode(testTx)\n\n    console.log(encoded.hex)\n\n    const decoded = Tx.decode(encoded)\n\n    console.log(decoded)\n  </script>\n</body>\n</html>"
  },
  {
    "path": "test/scratch.ts",
    "content": "import fs       from 'fs/promises'\nimport { URL }  from 'url'\nimport { Script, Tx }   from '../src/index.js'\n\nconst txtpath = new URL('./txhex.txt', import.meta.url).pathname\nconst txtdata = await fs.readFile(txtpath) //.then(e => new Uint8Array(e))\n\nconst scriptAsHexString = '4e21032cf515e2ae74b6d639c4e91a0b2a7047a0178e628d167989af46d1da474a6951ad21022d6b369d9a95568203b2a51eac49cc8b20ab81930e2d2565df5f0bc8e3bf59d5ac73640380ca00b268'\n\nconst script = Script.decode(scriptAsHexString, true)\n\nconsole.log(script)\n\n//const tx1 = Tx.decode(txtdata.toString())\n//console.dir(tx1, { depth : null })\n"
  },
  {
    "path": "test/src/addr/addr.test.ts",
    "content": "import { Test }        from 'tape'\nimport { p2pkh_test }  from './p2pkh.test.js'\nimport { p2sh_test }   from './p2sh.test.js'\nimport { p2wpkh_test } from './p2wpkh.test.js'\nimport { p2wsh_test }  from './p2wsh.test.js'\nimport { p2tr_test }   from './p2tr.test.js'\n\nexport default function address_tests(t : Test) {\n  p2pkh_test(t)\n  p2sh_test(t)\n  p2wpkh_test(t)\n  p2wsh_test(t)\n  p2tr_test(t)\n}"
  },
  {
    "path": "test/src/addr/p2pkh.test.ts",
    "content": "\nimport { Test }    from 'tape'\nimport { Buff }    from '@cmdcode/buff-utils'\nimport { Address } from '../../../src/index.js'\n\nexport function p2pkh_test(t : Test) : void {\n\n  const ref_pubkey  = '037191e9be308354c79d9e0d596e74fce4a98768459a846a073799ad20b4c78770'\n  const ref_address = 'msi862KMaLR3jHcdKtAh9QMN2sS8Qcyywy'\n  const ref_hexdata = '76a91485be4269276fd45d0b6f7ee963dd073b202d49ed88ac'\n  const ref_hash    = '85be4269276fd45d0b6f7ee963dd073b202d49ed'\n  const ref_script  = [ 'OP_DUP', 'OP_HASH160', ref_hash, 'OP_EQUALVERIFY', 'OP_CHECKSIG' ]\n  const ref_object  = { prefix: 'm', type: 'p2pkh', network: 'testnet', data: Buff.hex(ref_hash) , script: ref_script }\n\n  t.test('P2PKH unit test', t => {\n    t.plan(7)\n\n    const addr1 = Address.p2pkh.fromPubKey(ref_pubkey, 'regtest')\n    t.equal(addr1, ref_address, 'Pubkey should encode into proper address.')\n\n    const addr2 = Address.p2pkh.encode(ref_hash, 'regtest')\n    t.equal(addr2, ref_address, 'Hash should encode into proper address')\n\n    const bytes = Address.p2pkh.decode(ref_address, 'regtest')\n    t.equal(bytes.hex, ref_hash, 'Address should decode into proper hash.')\n\n    const asm = Address.p2pkh.scriptPubKey(ref_hash)\n    t.deepEqual(asm, ref_script, 'scriptPubKey should match reference script.')\n\n    const data = Address.decode(ref_address)\n    t.deepEqual(data, ref_object, 'Address should produce proper AddressData')\n\n    const script = Address.toScriptPubKey(ref_address)\n    t.deepEqual(script, ref_script, 'Address should produce proper scriptPubKey.')\n\n    const addr3 = Address.fromScriptPubKey(ref_script, 'regtest')\n    t.equal(addr3, ref_address, 'scriptPubKey should produce proper address.')\n  })\n}"
  },
  {
    "path": "test/src/addr/p2sh.test.ts",
    "content": "\nimport { Test }    from 'tape'\nimport { Buff }    from '@cmdcode/buff-utils'\nimport { Address } from '../../../src/index.js'\n\nexport function p2sh_test(t : Test) : void {\n\n  const ref_preimg  = '001494d325b4767d23020cec68a9ca75b8fe9264b7af'\n  const ref_address = '2NFbT9Fkp7yjp22dvu7tHgikd8Yfy87KnTc'\n  const ref_hexdata = 'a914f52611446bdfa1f67da1fb7805dbee74c6d92a5487'\n  const ref_hash    = 'f52611446bdfa1f67da1fb7805dbee74c6d92a54'\n  const ref_script  = [ 'OP_HASH160', ref_hash, 'OP_EQUAL' ]\n  const ref_object  = { prefix: '2', type: 'p2sh', network: 'testnet', data: Buff.hex(ref_hash) , script: ref_script }\n\n  t.test('P2SH unit test', t => {\n    t.plan(7)\n\n    const addr1 = Address.p2sh.fromScript(ref_preimg, 'regtest')\n    t.equal(addr1, ref_address, 'Script should encode into proper address.')\n\n    const addr2 = Address.p2sh.encode(ref_hash, 'regtest')\n    t.equal(addr2, ref_address, 'Hash should encode into proper address')\n\n    const bytes = Address.p2sh.decode(ref_address, 'regtest')\n    t.equal(bytes.hex, ref_hash, 'Address should decode into proper hash.')\n\n    const asm = Address.p2sh.scriptPubKey(ref_hash)\n    t.deepEqual(asm, ref_script, 'scriptPubKey should match reference script.')\n\n    const data = Address.decode(ref_address)\n    t.deepEqual(data, ref_object, 'Address should produce proper AddressData')\n\n    const script = Address.toScriptPubKey(ref_address)\n    t.deepEqual(script, ref_script, 'Address should produce proper scriptPubKey.')\n\n    const addr3 = Address.fromScriptPubKey(ref_script, 'regtest')\n    t.equal(addr3, ref_address, 'scriptPubKey should produce proper address.')\n  })\n}"
  },
  {
    "path": "test/src/addr/p2tr.test.ts",
    "content": "\nimport { Test }    from 'tape'\nimport { Buff }    from '@cmdcode/buff-utils'\nimport { Address } from '../../../src/index.js'\n\nexport function p2tr_test(t : Test) : void {\n\n  const ref_pubkey  = '91b64d5324723a985170e4dc5a0f84c041804f2cd12660fa5dec09fc21783605'\n  const ref_address = 'bcrt1pjxmy65eywgafs5tsunw95ruycpqcqnev6ynxp7jaasylcgtcxczsqzdc9v'\n  const ref_hexdata = '512091b64d5324723a985170e4dc5a0f84c041804f2cd12660fa5dec09fc21783605'\n  const ref_script  = [ 'OP_1', ref_pubkey ]\n  const ref_object  = { prefix: 'bcrt1p', type: 'p2tr', network: 'regtest', data: Buff.hex(ref_pubkey), script: ref_script }\n\n  t.test('P2TR unit test', t => {\n    t.plan(7)\n\n    const addr1 = Address.p2tr.fromPubKey(ref_pubkey, 'regtest')\n    t.equal(addr1, ref_address, 'Pubkey should encode into proper address.')\n\n    const addr2 = Address.p2tr.encode(ref_pubkey, 'regtest')\n    t.equal(addr2, ref_address, 'Pubkey should encode into proper address')\n\n    const bytes = Address.p2tr.decode(ref_address)\n    t.equal(bytes.hex, ref_pubkey, 'Address should decode into proper pubkey.')\n\n    const asm = Address.p2tr.scriptPubKey(ref_pubkey)\n    t.deepEqual(asm, ref_script, 'scriptPubKey should match reference script.')\n\n    const data = Address.decode(ref_address)\n    t.deepEqual(data, ref_object, 'Address should produce proper AddressData')\n\n    const script = Address.toScriptPubKey(ref_address)\n    t.deepEqual(script, ref_script, 'Address should produce proper scriptPubKey.')\n\n    const addr3 = Address.fromScriptPubKey(ref_script, 'regtest')\n    t.equal(addr3, ref_address, 'scriptPubKey should produce proper address.')\n  })\n}"
  },
  {
    "path": "test/src/addr/p2wpkh.test.ts",
    "content": "\nimport { Test }    from 'tape'\nimport { Buff }    from '@cmdcode/buff-utils'\nimport { Address } from '../../../src/index.js'\n\nexport function p2wpkh_test(t : Test) : void {\n\n  const ref_pubkey  = '03d5af2a3e89cb72ff9ca1b36091ca46e4d4399abc5574b13d3e56bca6c0784679'\n  const ref_address = 'bcrt1q738hdjlatdx9xmg3679kwq9cwd7fa2c84my9zk'\n  const ref_hexdata = '0014f44f76cbfd5b4c536d11d78b6700b8737c9eab07'\n  const ref_hash    = 'f44f76cbfd5b4c536d11d78b6700b8737c9eab07'\n  const ref_script  = [ 'OP_0', ref_hash ]\n  const ref_object  = { prefix: 'bcrt1q', type: 'p2w-pkh', network: 'regtest', data: Buff.hex(ref_hash), script: ref_script }\n\n  t.test('P2WPKH unit test', t => {\n    t.plan(7)\n\n    const addr1 = Address.p2wpkh.fromPubKey(ref_pubkey, 'regtest')\n    t.equal(addr1, ref_address, 'Pubkey should encode into proper address.')\n\n    const addr2 = Address.p2wpkh.encode(ref_hash, 'regtest')\n    t.equal(addr2, ref_address, 'Hash should encode into proper address')\n\n    const bytes = Address.p2wpkh.decode(addr1)\n    t.equal(bytes.hex, ref_hash, 'Address should decode into proper hash.')\n\n    const asm = Address.p2wpkh.scriptPubKey(bytes)\n    t.deepEqual(asm, ref_script, 'scriptPubKey should match reference script.')\n\n    const data = Address.decode(ref_address)\n    t.deepEqual(data, ref_object, 'Address should produce proper AddressData')\n\n    const script = Address.toScriptPubKey(ref_address)\n    t.deepEqual(script, ref_script, 'Address should produce proper scriptPubKey.')\n\n    const addr3 = Address.fromScriptPubKey(ref_script, 'regtest')\n    t.equal(addr3, ref_address, 'scriptPubKey should produce proper address.')\n  })\n}"
  },
  {
    "path": "test/src/addr/p2wsh.test.ts",
    "content": "\nimport { Test }    from 'tape'\nimport { Buff }    from '@cmdcode/buff-utils'\nimport { Address } from '../../../src/index.js'\n\nexport function p2wsh_test(t : Test) : void {\n\n  const ref_preimg  = [ 1, 2, 'OP_ADD', 3, 'OP_EQUAL' ]\n  const ref_address = 'bcrt1qetz4my584ckcqd0acdm7h788lkmslz44q5wc0rd3eknmmzc85sjq9sle8n'\n  const ref_hexdata = '0020cac55d9287ae2d8035fdc377ebf8e7fdb70f8ab5051d878db1cda7bd8b07a424'\n  const ref_hash    = 'cac55d9287ae2d8035fdc377ebf8e7fdb70f8ab5051d878db1cda7bd8b07a424'\n  const ref_script  = [ 'OP_0', ref_hash, ]\n  const ref_object  = { prefix: 'bcrt1q', type: 'p2w-sh', network: 'regtest', data: Buff.hex(ref_hash) , script: ref_script }\n\n  t.test('P2WSH unit test', t => {\n    t.plan(7)\n\n    const addr1 = Address.p2wsh.fromScript(ref_preimg, 'regtest')\n    t.equal(addr1, ref_address, 'Script should encode into proper address.')\n\n    const addr2 = Address.p2wsh.encode(ref_hash, 'regtest')\n    t.equal(addr2, ref_address, 'Hash should encode into proper address')\n\n    const bytes = Address.p2wsh.decode(ref_address)\n    t.equal(bytes.hex, ref_hash, 'Address should decode into proper hash.')\n\n    const asm = Address.p2wsh.scriptPubKey(ref_hash)\n    t.deepEqual(asm, ref_script, 'scriptPubKey should match reference script.')\n\n    const data = Address.decode(ref_address)\n    t.deepEqual(data, ref_object, 'Address should produce proper AddressData')\n\n    const script = Address.toScriptPubKey(ref_address)\n    t.deepEqual(script, ref_script, 'Address should produce proper scriptPubKey.')\n\n    const addr3 = Address.fromScriptPubKey(ref_script, 'regtest')\n    t.equal(addr3, ref_address, 'scriptPubKey should produce proper address.')\n  })\n}"
  },
  {
    "path": "test/src/sig/segwit/bip0143.vectors.json",
    "content": "{\n  \"rawhex\": \"010000000136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000000ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac00000000\",\n  \"txdata\": {\n    \"version\": 1,\n    \"vin\": [\n      {\n        \"txid\": \"6eb98797a21c6c10aa74edf29d618be109f48a8e94c694f3701e08ca69186436\",\n        \"vout\": 1,\n        \"scriptSig\": \"220020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54\",\n        \"prevout\" : {\n          \"value\": 987654321,\n          \"scriptPubKey\": \"a9149993a429037b5d912407a71c252019287b8d27a587\"\n        },\n        \"sequence\": \"ffffffff\",\n        \"witness\": []\n      }\n    ],\n    \"vout\": [\n      {\n        \"value\": 900000000,\n        \"scriptPubKey\": \"76a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688ac\"\n      },\n      {\n        \"value\": 87000000,\n        \"scriptPubKey\": \"76a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac\"\n      }\n    ],\n    \"locktime\": 0\n  },\n  \"hash_vectors\": {\n    \"prevouts\": {\n      \"preimage\": \"36641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000\",\n      \"digest\": \"74afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0\"\n    },\n    \"sequence\": {\n      \"preimage\": \"ffffffff\",\n      \"digest\": \"3bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e70665044\"\n    },\n    \"output_all\": {\n      \"preimage\": \"00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac\",\n      \"digest\": \"bc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc\"\n    },\n    \"output_single\": {\n      \"preimage\": \"00e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688ac\",\n      \"digest\": \"9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f708\"\n    }\n  },\n  \"redeemScript\": \"56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae\",\n  \"sign_vectors\": [\n    {\n      \"label\"     : \"ALL\",\n      \"hashType\"  : \"01000000\",\n      \"preimage\"  : \"0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa03bb13029ce7b1f559ef5e747fcac439f1455a2ec7c5f09b72290795e7066504436641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffffbc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc0000000001000000\",\n      \"sigHash\"   : \"185c0be5263dce5b4bb50a047973c1b6272bfbd0103a89444597dc40b248ee7c\",\n      \"pubkey\"    : \"0307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba3\",\n      \"seckey\"    : \"730fff80e1413068a05b57d6a58261f07551163369787f349438ea38ca80fac6\",\n      \"signature\" : \"304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01\"\n    },\n    {\n      \"label\"     : \"NONE\",\n      \"hashType\"  : \"02000000\",\n      \"preimage\"  : \"0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000002000000\",\n      \"sigHash\"   : \"e9733bc60ea13c95c6527066bb975a2ff29a925e80aa14c213f686cbae5d2f36\",\n      \"pubkey\"    : \"03b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b\",\n      \"seckey\"    : \"11fa3d25a17cbc22b29c44a484ba552b5a53149d106d3d853e22fdd05a2d8bb3\",\n      \"signature\" : \"3044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502\"\n    },\n    {\n      \"label\"     : \"SINGLE\",\n      \"hashType\"  : \"03000000\",\n      \"preimage\"  : \"0100000074afdc312af5183c4198a40ca3c1a275b485496dd3929bca388c4b5e31f7aaa0000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f7080000000003000000\",\n      \"sigHash\"   : \"1e1f1c303dc025bd664acb72e583e933fae4cff9148bf78c157d1e8f78530aea\",\n      \"pubkey\"    : \"034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a\",\n      \"seckey\"    : \"77bf4141a87d55bdd7f3cd0bdccf6e9e642935fec45f2f30047be7b799120661\",\n      \"signature\" : \"3044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403\"\n    },\n    {\n      \"label\"     : \"ALL|ANYONECANPAY\",\n      \"hashType\"  : \"81000000\",\n      \"preimage\"  : \"010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffffbc4d309071414bed932f98832b27b4d76dad7e6c1346f487a8fdbb8eb90307cc0000000081000000\",\n      \"sigHash\"   : \"2a67f03e63a6a422125878b40b82da593be8d4efaafe88ee528af6e5a9955c6e\",\n      \"pubkey\"    : \"033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f4\",\n      \"seckey\"    : \"14af36970f5025ea3e8b5542c0f8ebe7763e674838d08808896b63c3351ffe49\",\n      \"signature\" : \"3045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381\"\n    },\n    {\n      \"label\"     : \"NONE|ANYONECANPAY\",\n      \"hashType\"  : \"82000000\",\n      \"preimage\"  : \"010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000082000000\",\n      \"sigHash\"   : \"781ba15f3779d5542ce8ecb5c18716733a5ee42a6f51488ec96154934e2c890a\",\n      \"pubkey\"    : \"03a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac16\",\n      \"seckey\"    : \"fe9a95c19eef81dde2b95c1284ef39be497d128e2aa46916fb02d552485e0323\",\n      \"signature\" : \"3045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a0882\"\n    },\n    {\n      \"label\"     : \"SINGLE|ANYONECANPAY\",\n      \"hashType\"  : \"83000000\",\n      \"preimage\"  : \"010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e01000000cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56aeb168de3a00000000ffffffff9efe0c13a6b16c14a41b04ebe6a63f419bdacb2f8705b494a43063ca3cd4f7080000000083000000\",\n      \"sigHash\"   : \"511e8e52ed574121fc1b654970395502128263f62662e076dc6baf05c2e6a99b\",\n      \"pubkey\"    : \"02d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b\",\n      \"seckey\"    : \"428a7aee9f0c2af0cd19af3cf1c78149951ea528726989b2e83e4778d2c3f890\",\n      \"signature\" : \"30440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783\"\n    }\n  ],\n  \"signedtx\": \"0100000000010136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000023220020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac080047304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01473044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502473044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403483045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381483045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a08824730440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae00000000\"\n}"
  },
  {
    "path": "test/src/sig/segwit/sighash.test.ts",
    "content": "import { Test }    from 'tape'\nimport { Buff }    from '@cmdcode/buff-utils'\nimport { secp256k1 as secp } from '@noble/curves/secp256k1'\nimport { Signer, TxData }    from '../../../../src/index.js'\nimport test_data  from './bip0143.vectors.json' assert { type: 'json' }\n\nexport async function sighash_vector_test(t :Test) : Promise<void> {\n  t.test('Testing segwit sighash vectors.', async t => {\n    const { redeemScript, txdata, sign_vectors } = test_data\n    t.plan(sign_vectors.length * 4)\n    for (const vector of sign_vectors) {\n      const { label, hashType, sigHash, } = vector\n      const { pubkey, seckey, signature } = vector\n      const sigflag = Buff.hex(hashType, 4).reverse().num\n      const config  = { sigflag, pubkey, script: redeemScript, throws: true }\n      const index   = 0\n\n      t.comment(`Testing ${label}:`)\n\n      // console.log('seckey:', seckey)\n      // console.log('pubkey:', pubkey)\n      // console.log('hash:', sigHash)\n      // console.log('signature:', signature)\n    \n      try {\n        const hash = Signer.segwit.hash(txdata, index, config)\n        t.equal(hash.hex, sigHash, 'Sighash should be equal.')\n      } catch (err) {\n        t.fail(err.message)\n      }\n\n      try {\n        const txcopy = { ...txdata } as TxData\n        const sig = Signer.segwit.sign(seckey, txcopy, index, config)\n        t.equal(sig.hex, signature, 'Signatures should be equal.')\n        const nobleVerify = secp.verify(sig.slice(0, -1).hex, sigHash, pubkey)\n        t.equal(nobleVerify, true, 'Signature should be valid using Noble.')\n        txcopy.vin[index].witness = [ sig, pubkey, redeemScript ]\n        const signerVerify = Signer.segwit.verify(txcopy, index, config)\n        t.equal(signerVerify, true, 'Signature should be valid using Signer.')\n      } catch (err) {\n        t.fail(err.message)\n      }\n    }\n  })\n}\n"
  },
  {
    "path": "test/src/sig/segwit/sighash.vectors.json",
    "content": "[\n\t[\"907c2bc503ade11cc3b04eb2918b6f547b0630ab569273824748c87ea14b0696526c66ba740200000004ab65ababfd1f9bdd4ef073c7afc4ae00da8a66f429c917a0081ad1e1dabce28d373eab81d8628de802000000096aab5253ab52000052ad042b5f25efb33beec9f3364e8a9139e8439d9d7e26529c3c30b6c3fd89f8684cfd68ea0200000009ab53526500636a52ab599ac2fe02a526ed040000000008535300516352515164370e010000000003006300ab2ec229\", \"\", 2, 1864164639, \"31af167a6cf3f9d5f6875caa4d31704ceb0eba078d132b78dab52c3b8997317e\"],\n\t[\"a0aa3126041621a6dea5b800141aa696daf28408959dfb2df96095db9fa425ad3f427f2f6103000000015360290e9c6063fa26912c2e7fb6a0ad80f1c5fea1771d42f12976092e7a85a4229fdb6e890000000001abc109f6e47688ac0e4682988785744602b8c87228fcef0695085edf19088af1a9db126e93000000000665516aac536affffffff8fe53e0806e12dfd05d67ac68f4768fdbe23fc48ace22a5aa8ba04c96d58e2750300000009ac51abac63ab5153650524aa680455ce7b000000000000499e50030000000008636a00ac526563ac5051ee030000000003abacabd2b6fe000000000003516563910fb6b5\", \"65\", 0, -1391424484, \"48d6a1bd2cd9eec54eb866fc71209418a950402b5d7e52363bfb75c98e141175\"],\n\t[\"6e7e9d4b04ce17afa1e8546b627bb8d89a6a7fefd9d892ec8a192d79c2ceafc01694a6a7e7030000000953ac6a51006353636a33bced1544f797f08ceed02f108da22cd24c9e7809a446c61eb3895914508ac91f07053a01000000055163ab516affffffff11dc54eee8f9e4ff0bcf6b1a1a35b1cd10d63389571375501af7444073bcec3c02000000046aab53514a821f0ce3956e235f71e4c69d91abe1e93fb703bd33039ac567249ed339bf0ba0883ef300000000090063ab65000065ac654bec3cc504bcf499020000000005ab6a52abac64eb060100000000076a6a5351650053bbbc130100000000056a6aab53abd6e1380100000000026a51c4e509b8\", \"acab655151\", 0, 479279909, \"2a3d95b09237b72034b23f2d2bb29fa32a58ab5c6aa72f6aafdfa178ab1dd01c\"],\n\t[\"73107cbd025c22ebc8c3e0a47b2a760739216a528de8d4dab5d45cbeb3051cebae73b01ca10200000007ab6353656a636affffffffe26816dffc670841e6a6c8c61c586da401df1261a330a6c6b3dd9f9a0789bc9e000000000800ac6552ac6aac51ffffffff0174a8f0010000000004ac52515100000000\", \"5163ac63635151ac\", 1, 1190874345, \"06e328de263a87b09beabe222a21627a6ea5c7f560030da31610c4611f4a46bc\"],\n\t[\"e93bbf6902be872933cb987fc26ba0f914fcfc2f6ce555258554dd9939d12032a8536c8802030000000453ac5353eabb6451e074e6fef9de211347d6a45900ea5aaf2636ef7967f565dce66fa451805c5cd10000000003525253ffffffff047dc3e6020000000007516565ac656aabec9eea010000000001633e46e600000000000015080a030000000001ab00000000\", \"5300ac6a53ab6a\", 1, -886562767, \"f03aa4fc5f97e826323d0daa03343ebf8a34ed67a1ce18631f8b88e5c992e798\"],\n\t[\"50818f4c01b464538b1e7e7f5ae4ed96ad23c68c830e78da9a845bc19b5c3b0b20bb82e5e9030000000763526a63655352ffffffff023b3f9c040000000008630051516a6a5163a83caf01000000000553ab65510000000000\", \"6aac\", 0, 946795545, \"746306f322de2b4b58ffe7faae83f6a72433c22f88062cdde881d4dd8a5a4e2d\"],\n\t[\"a93e93440250f97012d466a6cc24839f572def241c814fe6ae94442cf58ea33eb0fdd9bcc1030000000600636a0065acffffffff5dee3a6e7e5ad6310dea3e5b3ddda1a56bf8de7d3b75889fc024b5e233ec10f80300000007ac53635253ab53ffffffff0160468b04000000000800526a5300ac526a00000000\", \"ac00636a53\", 1, 1773442520, \"5c9d3a2ce9365bb72cfabbaa4579c843bb8abf200944612cf8ae4b56a908bcbd\"],\n\t[\"ce7d371f0476dda8b811d4bf3b64d5f86204725deeaa3937861869d5b2766ea7d17c57e40b0100000003535265ffffffff7e7e9188f76c34a46d0bbe856bde5cb32f089a07a70ea96e15e92abb37e479a10100000006ab6552ab655225bcab06d1c2896709f364b1e372814d842c9c671356a1aa5ca4e060462c65ae55acc02d0000000006abac0063ac5281b33e332f96beebdbc6a379ebe6aea36af115c067461eb99d22ba1afbf59462b59ae0bd0200000004ab635365be15c23801724a1704000000000965006a65ac00000052ca555572\", \"53ab530051ab\", 1, 2030598449, \"c336b2f7d3702fbbdeffc014d106c69e3413c7c71e436ba7562d8a7a2871f181\"],\n\t[\"d3b7421e011f4de0f1cea9ba7458bf3486bee722519efab711a963fa8c100970cf7488b7bb0200000003525352dcd61b300148be5d05000000000000000000\", \"535251536aac536a\", 0, -1960128125, \"29aa6d2d752d3310eba20442770ad345b7f6a35f96161ede5f07b33e92053e2a\"],\n\t[\"04bac8c5033460235919a9c63c42b2db884c7c8f2ed8fcd69ff683a0a2cccd9796346a04050200000003655351fcad3a2c5a7cbadeb4ec7acc9836c3f5c3e776e5c566220f7f965cf194f8ef98efb5e3530200000007526a006552526526a2f55ba5f69699ece76692552b399ba908301907c5763d28a15b08581b23179cb01eac03000000075363ab6a516351073942c2025aa98a05000000000765006aabac65abd7ffa6030000000004516a655200000000\", \"53ac6365ac526a\", 1, 764174870, \"bf5fdc314ded2372a0ad078568d76c5064bf2affbde0764c335009e56634481b\"],\n\t[\"c363a70c01ab174230bbe4afe0c3efa2d7f2feaf179431359adedccf30d1f69efe0c86ed390200000002ab51558648fe0231318b04000000000151662170000000000008ac5300006a63acac00000000\", \"\", 0, 2146479410, \"191ab180b0d753763671717d051f138d4866b7cb0d1d4811472e64de595d2c70\"],\n\t[\"8d437a7304d8772210a923fd81187c425fc28c17a5052571501db05c7e89b11448b36618cd02000000026a6340fec14ad2c9298fde1477f1e8325e5747b61b7e2ff2a549f3d132689560ab6c45dd43c3010000000963ac00ac000051516a447ed907a7efffebeb103988bf5f947fc688aab2c6a7914f48238cf92c337fad4a79348102000000085352ac526a5152517436edf2d80e3ef06725227c970a816b25d0b58d2cd3c187a7af2cea66d6b27ba69bf33a0300000007000063ab526553f3f0d6140386815d030000000003ab6300de138f00000000000900525153515265abac1f87040300000000036aac6500000000\", \"51\", 3, -315779667, \"b6632ac53578a741ae8c36d8b69e79f39b89913a2c781cdf1bf47a8c29d997a5\"],\n\t[\"fd878840031e82fdbe1ad1d745d1185622b0060ac56638290ec4f66b1beef4450817114a2c0000000009516a63ab53650051abffffffff37b7a10322b5418bfd64fb09cd8a27ddf57731aeb1f1f920ffde7cb2dfb6cdb70300000008536a5365ac53515369ecc034f1594690dbe189094dc816d6d57ea75917de764cbf8eccce4632cbabe7e116cd0100000003515352ffffffff035777fc000000000003515200abe9140300000000050063005165bed6d10200000000076300536363ab65195e9110\", \"635265\", 0, 1729787658, \"6e3735d37a4b28c45919543aabcb732e7a3e1874db5315abb7cc6b143d62ff10\"],\n\t[\"f40a750702af06efff3ea68e5d56e42bc41cdb8b6065c98f1221fe04a325a898cb61f3d7ee030000000363acacffffffffb5788174aef79788716f96af779d7959147a0c2e0e5bfb6c2dba2df5b4b97894030000000965510065535163ac6affffffff0445e6fd0200000000096aac536365526a526aa6546b000000000008acab656a6552535141a0fd010000000000c897ea030000000008526500ab526a6a631b39dba3\", \"00abab5163ac\", 1, -1778064747, \"d76d0fc0abfa72d646df888bce08db957e627f72962647016eeae5a8412354cf\"],\n\t[\"a63bc673049c75211aa2c09ecc38e360eaa571435fedd2af1116b5c1fa3d0629c269ecccbf0000000008ac65ab516352ac52ffffffffbf1a76fdda7f451a5f0baff0f9ccd0fe9136444c094bb8c544b1af0fa2774b06010000000463535253ffffffff13d6b7c3ddceef255d680d87181e100864eeb11a5bb6a3528cb0d70d7ee2bbbc02000000056a0052abab951241809623313b198bb520645c15ec96bfcc74a2b0f3db7ad61d455cc32db04afc5cc702000000016309c9ae25014d9473020000000004abab6aac3bb1e803\", \"\", 3, -232881718, \"6e48f3da3a4ac07eb4043a232df9f84e110485d7c7669dd114f679c27d15b97e\"],\n\t[\"4c565efe04e7d32bac03ae358d63140c1cfe95de15e30c5b84f31bb0b65bb542d637f49e0f010000000551abab536348ae32b31c7d3132030a510a1b1aacf7b7c3f19ce8dc49944ef93e5fa5fe2d356b4a73a00100000009abac635163ac00ab514c8bc57b6b844e04555c0a4f4fb426df139475cd2396ae418bc7015820e852f711519bc202000000086a00510000abac52488ff4aec72cbcfcc98759c58e20a8d2d9725aa4a80f83964e69bc4e793a4ff25cd75dc701000000086a52ac6aac5351532ec6b10802463e0200000000000553005265523e08680100000000002f39a6b0\", \"\", 3, 70712784, \"c6076b6a45e6fcfba14d3df47a34f6aadbacfba107e95621d8d7c9c0e40518ed\"],\n\t[\"1233d5e703403b3b8b4dae84510ddfc126b4838dcb47d3b23df815c0b3a07b55bf3098110e010000000163c5c55528041f480f40cf68a8762d6ed3efe2bd402795d5233e5d94bf5ddee71665144898030000000965525165655151656affffffff6381667e78bb74d0880625993bec0ea3bd41396f2bcccc3cc097b240e5e92d6a01000000096363acac6a63536365ffffffff04610ad60200000000065251ab65ab52e90d680200000000046351516ae30e98010000000008abab52520063656a671856010000000004ac6aac514c84e383\", \"6aabab636300\", 1, -114996813, \"aeb8c5a62e8a0b572c28f2029db32854c0b614dbecef0eaa726abebb42eebb8d\"],\n\t[\"0c69702103b25ceaed43122cc2672de84a3b9aa49872f2a5bb458e19a52f8cc75973abb9f102000000055365656aacffffffff3ffb1cf0f76d9e3397de0942038c856b0ebbea355dc9d8f2b06036e19044b0450100000000ffffffff4b7793f4169617c54b734f2cd905ed65f1ce3d396ecd15b6c426a677186ca0620200000008655263526551006a181a25b703240cce0100000000046352ab53dee22903000000000865526a6a516a51005e121602000000000852ab52ababac655200000000\", \"6a516aab63\", 1, -2040012771, \"a6e6cb69f409ec14e10dd476f39167c29e586e99bfac93a37ed2c230fcc1dbbe\"],\n\t[\"fd22692802db8ae6ab095aeae3867305a954278f7c076c542f0344b2591789e7e33e4d29f4020000000151ffffffffb9409129cfed9d3226f3b6bab7a2c83f99f48d039100eeb5796f00903b0e5e5e0100000006656552ac63abd226abac0403e649000000000007abab51ac5100ac8035f10000000000095165006a63526a52510d42db030000000007635365ac6a63ab24ef5901000000000453ab6a0000000000\", \"536a52516aac6a\", 1, 309309168, \"7ca0f75e6530ec9f80d031fc3513ca4ecd67f20cb38b4dacc6a1d825c3cdbfdb\"],\n\t[\"a43f85f701ffa54a3cc57177510f3ea28ecb6db0d4431fc79171cad708a6054f6e5b4f89170000000008ac6a006a536551652bebeaa2013e779c05000000000665ac5363635100000000\", \"ac\", 0, 2028978692, \"58294f0d7f2e68fe1fd30c01764fe1619bcc7961d68968944a0e263af6550437\"],\n\t[\"c2b0b99001acfecf7da736de0ffaef8134a9676811602a6299ba5a2563a23bb09e8cbedf9300000000026300ffffffff042997c50300000000045252536a272437030000000007655353ab6363ac663752030000000002ab6a6d5c900000000000066a6a5265abab00000000\", \"52ac525163515251\", 0, -894181723, \"8b300032a1915a4ac05cea2f7d44c26f2a08d109a71602636f15866563eaafdc\"],\n\t[\"82f9f10304c17a9d954cf3380db817814a8c738d2c811f0412284b2c791ec75515f38c4f8c020000000265ab5729ca7db1b79abee66c8a757221f29280d0681355cb522149525f36da760548dbd7080a0100000001510b477bd9ce9ad5bb81c0306273a3a7d051e053f04ecf3a1dbeda543e20601a5755c0cfae030000000451ac656affffffff71141a04134f6c292c2e0d415e6705dfd8dcee892b0d0807828d5aeb7d11f5ef0300000001520b6c6dc802a6f3dd0000000000056aab515163bfb6800300000000015300000000\", \"\", 3, -635779440, \"d55ed1e6c53510f2608716c12132a11fb5e662ec67421a513c074537eeccc34b\"],\n\t[\"8edcf5a1014b604e53f0d12fe143cf4284f86dc79a634a9f17d7e9f8725f7beb95e8ffcd2403000000046aabac52ffffffff01c402b5040000000005ab6a63525100000000\", \"6351525251acabab6a\", 0, 1520147826, \"2765bbdcd3ebb8b1a316c04656b28d637f80bffbe9b040661481d3dc83eea6d6\"],\n\t[\"2074bad5011847f14df5ea7b4afd80cd56b02b99634893c6e3d5aaad41ca7c8ee8e5098df003000000026a6affffffff018ad59700000000000900ac656a526551635300000000\", \"65635265\", 0, -1804671183, \"663c999a52288c9999bff36c9da2f8b78d5c61b8347538f76c164ccba9868d0a\"],\n\t[\"7100b11302e554d4ef249ee416e7510a485e43b2ba4b8812d8fe5529fe33ea75f36d392c4403000000020000ffffffff3d01a37e075e9a7715a657ae1bdf1e44b46e236ad16fd2f4c74eb9bf370368810000000007636553ac536365ffffffff01db696a0400000000065200ac656aac00000000\", \"63005151\", 0, -1210499507, \"b9c3aee8515a4a3b439de1ffc9c156824bda12cb75bfe5bc863164e8fd31bd7a\"],\n\t[\"02c1017802091d1cb08fec512db7b012fe4220d57a5f15f9e7676358b012786e1209bcff950100000004acab6352ffffffff799bc282724a970a6fea1828984d0aeb0f16b67776fa213cbdc4838a2f1961a3010000000951516a536552ab6aabffffffff016c7b4b03000000000865abac5253ac5352b70195ad\", \"65655200516a\", 0, -241626954, \"be567cb47170b34ff81c66c1142cb9d27f9b6898a384d6dfc4fce16b75b6cb14\"],\n\t[\"cb3178520136cd294568b83bb2520f78fecc507898f4a2db2674560d72fd69b9858f75b3b502000000066aac00515100ffffffff03ab005a01000000000563526363006e3836030000000001abfbda3200000000000665ab0065006500000000\", \"ab516a0063006a5300\", 0, 1182109299, \"2149e79c3f4513da4e4378608e497dcfdfc7f27c21a826868f728abd2b8a637a\"],\n\t[\"18a4b0c004702cf0e39686ac98aab78ad788308f1d484b1ddfe70dc1997148ba0e28515c310300000000ffffffff05275a52a23c59da91129093364e275da5616c4070d8a05b96df5a2080ef259500000000096aac51656a6aac53ab66e64966b3b36a07dd2bb40242dd4a3743d3026e7e1e0d9e9e18f11d068464b989661321030000000265ac383339c4fae63379cafb63b0bab2eca70e1f5fc7d857eb5c88ccd6c0465093924bba8b2a000000000300636ab5e0545402bc2c4c010000000000cd41c002000000000000000000\", \"abac635253656a00\", 3, 2052372230, \"32db877b6b1ca556c9e859442329406f0f8246706522369839979a9f7a235a32\"],\n\t[\"1d9c5df20139904c582285e1ea63dec934251c0f9cf5c47e86abfb2b394ebc57417a81f67c010000000353515222ba722504800d3402000000000353656a3c0b4a0200000000000fb8d20500000000076300ab005200516462f30400000000015200000000\", \"ab65\", 0, -210854112, \"edf73e2396694e58f6b619f68595b0c1cdcb56a9b3147845b6d6afdb5a80b736\"],\n\t[\"4504cb1904c7a4acf375ddae431a74de72d5436efc73312cf8e9921f431267ea6852f9714a01000000066a656a656553a2fbd587c098b3a1c5bd1d6480f730a0d6d9b537966e20efc0e352d971576d0f87df0d6d01000000016321aeec3c4dcc819f1290edb463a737118f39ab5765800547522708c425306ebfca3f396603000000055300ac656a1d09281d05bfac57b5eb17eb3fa81ffcedfbcd3a917f1be0985c944d473d2c34d245eb350300000007656a51525152ac263078d9032f470f0500000000066aac00000052e12da60200000000003488410200000000076365006300ab539981e432\", \"52536a52526a\", 1, -31909119, \"f0a2deee7fd8a3a9fad6927e763ded11c940ee47e9e6d410f94fda5001f82e0c\"],\n\t[\"14bc7c3e03322ec0f1311f4327e93059c996275302554473104f3f7b46ca179bfac9ef753503000000016affffffff9d405eaeffa1ca54d9a05441a296e5cc3a3e32bb8307afaf167f7b57190b07e00300000008abab51ab5263abab45533aa242c61bca90dd15d46079a0ab0841d85df67b29ba87f2393cd764a6997c372b55030000000452005263ffffffff0250f40e02000000000651516a0063630e95ab0000000000046a5151ac00000000\", \"6a65005151\", 0, -1460947095, \"aa418d096929394c9147be8818d8c9dafe6d105945ab9cd7ec682df537b5dd79\"],\n\t[\"2b3bd0dd04a1832f893bf49a776cd567ec4b43945934f4786b615d6cb850dfc0349b33301a000000000565ac000051cf80c670f6ddafab63411adb4d91a69c11d9ac588898cbfb4cb16061821cc104325c895103000000025163ffffffffa9e2d7506d2d7d53b882bd377bbcc941f7a0f23fd15d2edbef3cd9df8a4c39d10200000009ac63006a52526a5265ffffffff44c099cdf10b10ce87d4b38658d002fd6ea17ae4a970053c05401d86d6e75f99000000000963ab53526a5252ab63ffffffff035af69c01000000000100ba9b8b0400000000004cead10500000000026a520b77d667\", \"ab52abac526553\", 3, -1955078165, \"eb9ceecc3b401224cb79a44d23aa8f428e29f1405daf69b4e01910b848ef1523\"],\n\t[\"35df11f004a48ba439aba878fe9df20cc935b4a761c262b1b707e6f2b33e2bb7565cd68b130000000000ffffffffb2a2f99abf64163bb57ca900500b863f40c02632dfd9ea2590854c5fb4811da90200000006ac006363636affffffffaf9d89b2a8d2670ca37c8f7c140600b81259f2e037cb4590578ec6e37af8bf200000000005abac6a655270a4751eb551f058a93301ffeda2e252b6614a1fdd0e283e1d9fe53c96c5bbaafaac57b8030000000153ffffffff020d9f3b02000000000100ed7008030000000004abac000000000000\", \"abac\", 3, 593793071, \"88fdee1c2d4aeead71d62396e28dc4d00e5a23498eea66844b9f5d26d1f21042\"],\n\t[\"a08ff466049fb7619e25502ec22fedfb229eaa1fe275aa0b5a23154b318441bf547989d0510000000005ab5363636affffffff2b0e335cb5383886751cdbd993dc0720817745a6b1c9b8ab3d15547fc9aafd03000000000965656a536a52656a532b53d10584c290d3ac1ab74ab0a19201a4a039cb59dc58719821c024f6bf2eb26322b33f010000000965ac6aac0053ab6353ffffffff048decba6ebbd2db81e416e39dde1f821ba69329725e702bcdea20c5cc0ecc6402000000086363ab5351ac6551466e377b0468c0fa00000000000651ab53ac6a513461c6010000000008636a636365535100eeb3dc010000000006526a52ac516a43f362010000000005000063536500000000\", \"0063516a\", 1, -1158911348, \"f6a1ecb50bd7c2594ebecea5a1aa23c905087553e40486dade793c2f127fdfae\"],\n\t[\"5ac2f17d03bc902e2bac2469907ec7d01a62b5729340bc58c343b7145b66e6b97d434b30fa000000000163ffffffff44028aa674192caa0d0b4ebfeb969c284cb16b80c312d096efd80c6c6b094cca000000000763acabac516a52ffffffff10c809106e04b10f9b43085855521270fb48ab579266e7474657c6c625062d2d030000000351636595a0a97004a1b69603000000000465ab005352ad68010000000008636a5263acac5100da7105010000000002acab90325200000000000000000000\", \"6a6aab516a63526353\", 2, 1518400956, \"f7efb74b1dcc49d316b49c632301bc46f98d333c427e55338be60c7ef0d953be\"],\n\t[\"aeb2e11902dc3770c218b97f0b1960d6ee70459ecb6a95eff3f05295dc1ef4a0884f10ba460300000005516352526393e9b1b3e6ae834102d699ddd3845a1e159aa7cf7635edb5c02003f7830fee3788b795f20100000009ab006a526553ac006ad8809c570469290e0400000000050000abab00b10fd5040000000008ab655263abac53ab630b180300000000009d9993040000000002516300000000\", \"5351ababac6a65\", 0, 1084852870, \"f2286001af0b0170cbdad92693d0a5ebaa8262a4a9d66e002f6d79a8c94026d1\"],\n\t[\"9860ca9a0294ff4812534def8c3a3e3db35b817e1a2ddb7f0bf673f70eab71bb79e90a2f3100000000086a636551acac5165ffffffffed4d6d3cd9ff9b2d490e0c089739121161a1445844c3e204296816ab06e0a83702000000035100ac88d0db5201c3b59a050000000005ac6a0051ab00000000\", \"535263ab006a526aab\", 1, -962088116, \"30df2473e1403e2b8e637e576825f785528d998af127d501556e5f7f5ed89a2a\"],\n\t[\"4ddaa680026ec4d8060640304b86823f1ac760c260cef81d85bd847952863d629a3002b54b0200000008526365636a656aab65457861fc6c24bdc760c8b2e906b6656edaf9ed22b5f50e1fb29ec076ceadd9e8ebcb6b000000000152ffffffff033ff04f00000000000551526a00657a1d900300000000002153af040000000003006a6300000000\", \"ab526a53acabab\", 0, 1055317633, \"7f21b62267ed52462e371a917eb3542569a4049b9dfca2de3c75872b39510b26\"],\n\t[\"01e76dcd02ad54cbc8c71d68eaf3fa7c883b65d74217b30ba81f1f5144ef80b706c0dc82ca000000000352ab6a078ec18bcd0514825feced2e8b8ea1ccb34429fae41c70cc0b73a2799e85603613c6870002000000086363ab6365536a53ffffffff043acea90000000000016ad20e1803000000000100fa00830200000000056352515351e864ee00000000000865535253ab6a6551d0c46672\", \"6a6365abacab\", 0, -1420559003, \"8af0b4cbdbc011be848edf4dbd2cde96f0578d662cfebc42252495387114224a\"],\n\t[\"fa00b26402670b97906203434aa967ce1559d9bd097d56dbe760469e6032e7ab61accb54160100000006635163630052fffffffffe0d3f4f0f808fd9cfb162e9f0c004601acf725cd7ea5683bbdc9a9a433ef15a0200000005ab52536563d09c7bef049040f305000000000153a7c7b9020000000004ac63ab52847a2503000000000553ab00655390ed80010000000005006553ab52860671d4\", \"536565ab52\", 0, 799022412, \"40ed8e7bbbd893e15f3cce210ae02c97669818de5946ca37eefc7541116e2c78\"],\n\t[\"cb5c06dc01b022ee6105ba410f0eb12b9ce5b5aa185b28532492d839a10cef33d06134b91b010000000153ffffffff02cec0530400000000005e1e4504000000000865656551acacac6a00000000\", \"ab53\", 0, -1514251329, \"136beb95459fe6b126cd6cefd54eb5d971524b0e883e41a292a78f78015cb8d5\"],\n\t[\"f10a0356031cd569d652dbca8e7a4d36c8da33cdff428d003338602b7764fe2c96c505175b010000000465ac516affffffffbb54563c71136fa944ee20452d78dc87073ac2365ba07e638dce29a5d179da600000000003635152ffffffff9a411d8e2d421b1e6085540ee2809901e590940bbb41532fa38bd7a16b68cc350100000007535251635365636195df1603b61c45010000000002ab65bf6a310400000000026352fcbba10200000000016aa30b7ff0\", \"5351\", 0, 1552495929, \"9eb8adf2caecb4bf9ac59d7f46bd20e83258472db2f569ee91aba4cf5ee78e29\"],\n\t[\"c3325c9b012f659466626ca8f3c61dfd36f34670abc054476b7516a1839ec43cd0870aa0c0000000000753525265005351e7e3f04b0112650500000000000363ac6300000000\", \"acac\", 0, -68961433, \"5ca70e727d91b1a42b78488af2ed551642c32d3de4712a51679f60f1456a8647\"],\n\t[\"2333e54c044370a8af16b9750ac949b151522ea6029bacc9a34261599549581c7b4e5ece470000000007510052006563abffffffff80630fc0155c750ce20d0ca4a3d0c8e8d83b014a5b40f0b0be0dd4c63ac28126020000000465000000ffffffff1b5f1433d38cdc494093bb1d62d84b10abbdae57e3d04e82e600857ab3b1dc990300000003515100b76564be13e4890a908ea7508afdad92ec1b200a9a67939fadce6eb7a29eb4550a0a28cb0300000001acffffffff02926c930300000000016373800201000000000153d27ee740\", \"ab6365ab516a53\", 3, 598653797, \"2be27a686eb7940dd32c44ff3a97c1b28feb7ab9c5c0b1593b2d762361cfc2db\"],\n\t[\"b500ca48011ec57c2e5252e5da6432089130603245ffbafb0e4c5ffe6090feb629207eeb0e010000000652ab6a636aab8302c9d2042b44f40500000000015278c05a050000000004ac5251524be080020000000007636aac63ac5252c93a9a04000000000965ab6553636aab5352d91f9ddb\", \"52005100\", 0, -2024394677, \"49c8a6940a461cc7225637f1e512cdd174c99f96ec05935a59637ededc77124c\"],\n\t[\"f52ff64b02ee91adb01f3936cc42e41e1672778962b68cf013293d649536b519bc3271dd2c00000000020065afee11313784849a7c15f44a61cd5fd51ccfcdae707e5896d131b082dc9322a19e12858501000000036aac654e8ca882022deb7c020000000006006a515352abd3defc0000000000016300000000\", \"63520063\", 0, 1130989496, \"7f208df9a5507e98c62cebc5c1e2445eb632e95527594929b9577b53363e96f6\"],\n\t[\"ab7d6f36027a7adc36a5cf7528fe4fb5d94b2c96803a4b38a83a675d7806dda62b380df86a0000000003000000ffffffff5bc00131e29e22057c04be854794b4877dda42e416a7a24706b802ff9da521b20000000007ac6a0065ac52ac957cf45501b9f06501000000000500ac6363ab25f1110b\", \"00526500536a635253\", 0, 911316637, \"5fa09d43c8aef6f6fa01c383a69a5a61a609cd06e37dce35a39dc9eae3ddfe6c\"],\n\t[\"f940888f023dce6360263c850372eb145b864228fdbbb4c1186174fa83aab890ff38f8c9a90300000000ffffffff01e80ccdb081e7bbae1c776531adcbfb77f2e5a7d0e5d0d0e2e6c8758470e85f00000000020053ffffffff03b49088050000000004656a52ab428bd604000000000951630065ab63ac636a0cbacf0400000000070063ac5265ac53d6e16604\", \"ac63\", 0, 39900215, \"713ddeeefcfe04929e7b6593c792a4efbae88d2b5280d1f0835d2214eddcbad6\"],\n\t[\"530ecd0b01ec302d97ef6f1b5a6420b9a239714013e20d39aa3789d191ef623fc215aa8b940200000005ac5351ab6a3823ab8202572eaa04000000000752ab6a51526563fd8a270100000000036a006581a798f0\", \"525153656a0063\", 0, 1784562684, \"fe42f73a8742676e640698222b1bd6b9c338ff1ccd766d3d88d7d3c6c6ac987e\"],\n\t[\"5d781d9303acfcce964f50865ddfddab527ea971aee91234c88e184979985c00b4de15204b0100000003ab6352a009c8ab01f93c8ef2447386c434b4498538f061845862c3f9d5751ad0fce52af442b3a902000000045165ababb909c66b5a3e7c81b3c45396b944be13b8aacfc0204f3f3c105a66fa8fa6402f1b5efddb01000000096a65ac636aacab656ac3c677c402b79fa4050000000004006aab5133e35802000000000751ab635163ab0078c2e025\", \"6aac51636a6a005265\", 0, -882306874, \"551ce975d58647f10adefb3e529d9bf9cda34751627ec45e690f135ef0034b95\"],\n\t[\"25ee54ef0187387564bb86e0af96baec54289ca8d15e81a507a2ed6668dc92683111dfb7a50100000004005263634cecf17d0429aa4d000000000007636a6aabab5263daa75601000000000251ab4df70a01000000000151980a890400000000065253ac6a006377fd24e3\", \"65ab\", 0, 797877378, \"069f38fd5d47abff46f04ee3ae27db03275e9aa4737fa0d2f5394779f9654845\"],\n\t[\"a9c57b1a018551bcbc781b256642532bbc09967f1cbe30a227d352a19365d219d3f11649a3030000000451655352b140942203182894030000000006ab00ac6aab654add350400000000003d379505000000000553abacac00e1739d36\", \"5363\", 0, -1069721025, \"6da32416deb45a0d720a1dbe6d357886eabc44029dd5db74d50feaffbe763245\"],\n\t[\"05c4fb94040f5119dc0b10aa9df054871ed23c98c890f1e931a98ffb0683dac45e98619fdc0200000007acab6a525263513e7495651c9794c4d60da835d303eb4ee6e871f8292f6ad0b32e85ef08c9dc7aa4e03c9c010000000500ab52acacfffffffffee953259cf14ced323fe8d567e4c57ba331021a1ef5ac2fa90f7789340d7c550100000007ac6aacac6a6a53ffffffff08d9dc820d00f18998af247319f9de5c0bbd52a475ea587f16101af3afab7c210100000003535363569bca7c0468e34f00000000000863536353ac51ac6584e319010000000006650052ab6a533debea030000000003ac0053ee7070020000000006ac52005253ac00000000\", \"6351005253\", 2, 1386916157, \"76c4013c40bfa1481badd9d342b6d4b8118de5ab497995fafbf73144469e5ff0\"],\n\t[\"c95ab19104b63986d7303f4363ca8f5d2fa87c21e3c5d462b99f1ebcb7c402fc012f5034780000000009006aac63ac65655265ffffffffbe91afa68af40a8700fd579c86d4b706c24e47f7379dad6133de389f815ef7f501000000046aac00abffffffff1520db0d81be4c631878494668d258369f30b8f2b7a71e257764e9a27f24b48701000000076a515100535300b0a989e1164db9499845bac01d07a3a7d6d2c2a76e4c04abe68f808b6e2ef5068ce6540e0100000009ac53636a63ab65656affffffff0309aac6050000000005ab6563656a6067e8020000000003ac536aec91c8030000000009655251ab65ac6a53acc7a45bc5\", \"63526a65abac\", 1, 512079270, \"fb7eca81d816354b6aedec8cafc721d5b107336657acafd0d246049556f9e04b\"],\n\t[\"ca66ae10049533c2b39f1449791bd6d3f039efe0a121ab7339d39ef05d6dcb200ec3fb2b3b020000000465006a53ffffffff534b8f97f15cc7fb4f4cea9bf798472dc93135cd5b809e4ca7fe4617a61895980100000000ddd83c1dc96f640929dd5e6f1151dab1aa669128591f153310d3993e562cc7725b6ae3d903000000046a52536582f8ccddb8086d8550f09128029e1782c3f2624419abdeaf74ecb24889cc45ac1a64492a0100000002516a4867b41502ee6ccf03000000000752acacab52ab6a4b7ba80000000000075151ab0052536300000000\", \"6553\", 2, -62969257, \"8085e904164ab9a8c20f58f0d387f6adb3df85532e11662c03b53c3df8c943cb\"],\n\t[\"ba646d0b0453999f0c70cb0430d4cab0e2120457bb9128ed002b6e9500e9c7f8d7baa20abe0200000001652a4e42935b21db02b56bf6f08ef4be5adb13c38bc6a0c3187ed7f6197607ba6a2c47bc8a03000000040052516affffffffa55c3cbfc19b1667594ac8681ba5d159514b623d08ed4697f56ce8fcd9ca5b0b00000000096a6a5263ac655263ab66728c2720fdeabdfdf8d9fb2bfe88b295d3b87590e26a1e456bad5991964165f888c03a0200000006630051ac00acffffffff0176fafe0100000000070063acac65515200000000\", \"63\", 1, 2002322280, \"9db4e320208185ee70edb4764ee195deca00ba46412d5527d9700c1cf1c3d057\"],\n\t[\"2ddb8f84039f983b45f64a7a79b74ff939e3b598b38f436def7edd57282d0803c7ef34968d02000000026a537eb00c4187de96e6e397c05f11915270bcc383959877868ba93bac417d9f6ed9f627a7930300000004516551abffffffffacc12f1bb67be3ae9f1d43e55fda8b885340a0df1175392a8bbd9f959ad3605003000000025163ffffffff02ff0f4700000000000070bd99040000000003ac53abf8440b42\", \"\", 2, -393923011, \"0133f1a161363b71dfb3a90065c7128c56bd0028b558b610142df79e055ab5c7\"],\n\t[\"b21fc15403b4bdaa994204444b59323a7b8714dd471bd7f975a4e4b7b48787e720cbd1f5f00000000000ffffffff311533001cb85c98c1d58de0a5fbf27684a69af850d52e22197b0dc941bc6ca9030000000765ab6363ab5351a8ae2c2c7141ece9a4ff75c43b7ea9d94ec79b7e28f63e015ac584d984a526a73fe1e04e0100000007526352536a5365ffffffff02a0a9ea030000000002ab52cfc4f300000000000465525253e8e0f342\", \"000000\", 1, 1305253970, \"d1df1f4bba2484cff8a816012bb6ec91c693e8ca69fe85255e0031711081c46a\"],\n\t[\"d1704d6601acf710b19fa753e307cfcee2735eada0d982b5df768573df690f460281aad12d0000000007656300005100acffffffff0232205505000000000351ab632ca1bc0300000000016300000000\", \"ac65ab65ab51\", 0, 165179664, \"40b4f03c68288bdc996011b0f0ddb4b48dc3be6762db7388bdc826113266cd6c\"],\n\t[\"d2f6c096025cc909952c2400bd83ac3d532bfa8a1f8f3e73c69b1fd7b8913379793f3ce92202000000076a00ab6a53516ade5332d81d58b22ed47b2a249ab3a2cb3a6ce9a6b5a6810e18e3e1283c1a1b3bd73e3ab00300000002acabffffffff01a9b2d40500000000056352abab00dc4b7f69\", \"ab0065\", 0, -78019184, \"2ef025e907f0fa454a2b48a4f3b81346ba2b252769b5c35d742d0c8985e0bf5e\"],\n\t[\"3e6db1a1019444dba461247224ad5933c997256d15c5d37ade3d700506a0ba0a57824930d7010000000852ab6500ab00ac00ffffffff03389242020000000001aba8465a0200000000086a6a636a5100ab52394e6003000000000953ac51526351000053d21d9800\", \"abababacab53ab65\", 0, 1643661850, \"1f8a3aca573a609f4aea0c69522a82fcb4e15835449da24a05886ddc601f4f6a\"],\n\t[\"f821a042036ad43634d29913b77c0fc87b4af593ac86e9a816a9d83fd18dfcfc84e1e1d57102000000076a63ac52006351ffffffffbcdaf490fc75086109e2f832c8985716b3a624a422cf9412fe6227c10585d21203000000095252abab5352ac526affffffff2efed01a4b73ad46c7f7bc7fa3bc480f8e32d741252f389eaca889a2e9d2007e000000000353ac53ffffffff032ac8b3020000000009636300000063516300d3d9f2040000000006510065ac656aafa5de0000000000066352ab5300ac9042b57d\", \"525365\", 1, 667065611, \"0d17a92c8d5041ba09b506ddf9fd48993be389d000aad54f9cc2a44fcc70426b\"],\n\t[\"58e3f0f704a186ef55d3919061459910df5406a9121f375e7502f3be872a449c3f2bb058380100000000f0e858da3ac57b6c973f889ad879ffb2bd645e91b774006dfa366c74e2794aafc8bbc871010000000751ac65516a515131a68f120fd88ca08687ceb4800e1e3fbfea7533d34c84fef70cc5a96b648d580369526d000000000600ac00515363f6191d5b3e460fa541a30a6e83345dedfa3ed31ad8574d46d7bbecd3c9074e6ba5287c24020000000151e3e19d6604162602010000000004005100ac71e17101000000000065b5e90300000000040053ab53f6b7d101000000000200ac00000000\", \"6563ab\", 1, -669018604, \"8221d5dfb75fc301a80e919e158e0b1d1e86ffb08870a326c89408d9bc17346b\"],\n\t[\"efec1cce044a676c1a3d973f810edb5a9706eb4cf888a240f2b5fb08636bd2db482327cf500000000005ab51656a52ffffffff46ef019d7c03d9456e5134eb0a7b5408d274bd8e33e83df44fab94101f7c5b650200000009ac5100006353630051407aadf6f5aaffbd318fdbbc9cae4bd883e67d524df06bb006ce2f7c7e2725744afb76960100000005536aab53acec0d64eae09e2fa1a7c4960354230d51146cf6dc45ee8a51f489e20508a785cbe6ca86fc000000000651536a516300ffffffff014ef598020000000006636aac655265a6ae1b75\", \"53516a5363526563ab\", 2, -1823982010, \"13e8b5ab4e5b2ceeff0045c625e19898bda2d39fd7af682e2d1521303cfe1154\"],\n\t[\"3c436c2501442a5b700cbc0622ee5143b34b1b8021ea7bbc29e4154ab1f5bdfb3dff9d640501000000086aab5251ac5252acffffffff0170b9a20300000000066aab6351525114b13791\", \"63acabab52ab51ac65\", 0, -2140612788, \"87ddf1f9acb6640448e955bd1968f738b4b3e073983af7b83394ab7557f5cd61\"],\n\t[\"d62f183e037e0d52dcf73f9b31f70554bce4f693d36d17552d0e217041e01f15ad3840c838000000000963acac6a6a6a63ab63ffffffffabdfb395b6b4e63e02a763830f536fc09a35ff8a0cf604021c3c751fe4c88f4d0300000006ab63ab65ac53aa4d30de95a2327bccf9039fb1ad976f84e0b4a0936d82e67eafebc108993f1e57d8ae39000000000165ffffffff04364ad30500000000036a005179fd84010000000007ab636aac6363519b9023030000000008510065006563ac6acd2a4a02000000000000000000\", \"52\", 1, 595020383, \"da8405db28726dc4e0f82b61b2bfd82b1baa436b4e59300305cc3b090b157504\"],\n\t[\"44c200a5021238de8de7d80e7cce905606001524e21c8d8627e279335554ca886454d692e6000000000500acac52abbb8d1dc876abb1f514e96b21c6e83f429c66accd961860dc3aed5071e153e556e6cf076d02000000056553526a51870a928d0360a580040000000004516a535290e1e302000000000851ab6a00510065acdd7fc5040000000007515363ab65636abb1ec182\", \"6363\", 0, -785766894, \"ed53cc766cf7cb8071cec9752460763b504b2183442328c5a9761eb005c69501\"],\n\t[\"d682d52d034e9b062544e5f8c60f860c18f029df8b47716cabb6c1b4a4b310a0705e754556020000000400656a0016eeb88eef6924fed207fba7ddd321ff3d84f09902ff958c815a2bf2bb692eb52032c4d803000000076365ac516a520099788831f8c8eb2552389839cfb81a9dc55ecd25367acad4e03cfbb06530f8cccf82802701000000085253655300656a53ffffffff02d543200500000000056a510052ac03978b05000000000700ac51525363acfdc4f784\", \"\", 2, -696035135, \"e1a256854099907050cfee7778f2018082e735a1f1a3d91437584850a74c87bb\"],\n\t[\"e8c0dec5026575ddf31343c20aeeca8770afb33d4e562aa8ee52eeda6b88806fdfd4fe0a97030000000953acabab65ab516552ffffffffdde122c2c3e9708874286465f8105f43019e837746686f442666629088a970e0010000000153ffffffff01f98eee0100000000025251fe87379a\", \"63\", 1, 633826334, \"abe441209165d25bc6d8368f2e7e7dc21019056719fef1ace45542aa2ef282e2\"],\n\t[\"b288c331011c17569293c1e6448e33a64205fc9dc6e35bc756a1ac8b97d18e912ea88dc0770200000007635300ac6aacabfc3c890903a3ccf8040000000004656500ac9c65c9040000000009ab6a6aabab65abac63ac5f7702000000000365005200000000\", \"526a63\", 0, 1574937329, \"0dd1bd5c25533bf5f268aa316ce40f97452cca2061f0b126a59094ca5b65f7a0\"],\n\t[\"fc0a092003cb275fa9a25a72cf85d69c19e4590bfde36c2b91cd2c9c56385f51cc545530210000000004ab530063ffffffff729b006eb6d14d6e5e32b1c376acf1c62830a5d9246da38dbdb4db9f51fd1c74020000000463636500ffffffff0ae695c6d12ab7dcb8d3d4b547b03f178c7268765d1de9af8523d244e3836b12030000000151ffffffff0115c1e20100000000066a6aabac6a6a1ff59aec\", \"ab0053ac\", 0, 931831026, \"73fe22099c826c34a74edf45591f5d7b3a888c8178cd08facdfd96a9a681261c\"],\n\t[\"0fcae7e004a71a4a7c8f66e9450c0c1785268679f5f1a2ee0fb3e72413d70a9049ecff75de020000000452005251ffffffff99c8363c4b95e7ec13b8c017d7bb6e80f7c04b1187d6072961e1c2479b1dc0320200000000ffffffff7cf03b3d66ab53ed740a70c5c392b84f780fff5472aee82971ac3bfeeb09b2df0200000006ab5265636a0058e4fe9257d7c7c7e82ff187757c6eadc14cceb6664dba2de03a018095fd3006682a5b9600000000056353536a636de26b2303ff76de010000000001acdc0a2e020000000001ab0a53ed020000000007530063ab51510088417307\", \"ac6aacab5165535253\", 2, -902160694, \"eea96a48ee572aea33d75d0587ce954fcfb425531a7da39df26ef9a6635201be\"],\n\t[\"612701500414271138e30a46b7a5d95c70c78cc45bf8e40491dac23a6a1b65a51af04e6b94020000000451655153ffffffffeb72dc0e49b2fad3075c19e1e6e4b387f1365dca43d510f6a02136318ddecb7f0200000003536352e115ffc4f9bae25ef5baf534a890d18106fb07055c4d7ec9553ba89ed1ac2101724e507303000000080063006563acabac2ff07f69a080cf61a9d19f868239e6a4817c0eeb6a4f33fe254045d8af2bca289a8695de0300000000430736c404d317840500000000086a00abac5351ab65306e0503000000000963ab0051536aabab6a6c8aca01000000000565516351ab5dcf960100000000016a00000000\", \"ab\", 2, -604581431, \"5ec805e74ee934aa815ca5f763425785ae390282d46b5f6ea076b6ad6255a842\"],\n\t[\"6b68ba00023bb4f446365ea04d68d48539aae66f5b04e31e6b38b594d2723ab82d44512460000000000200acffffffff5dfc6febb484fff69c9eeb7c7eb972e91b6d949295571b8235b1da8955f3137b020000000851ac6352516a535325828c8a03365da801000000000800636aabac6551ab0f594d03000000000963ac536365ac63636a45329e010000000005abac53526a00000000\", \"005151\", 0, 1317038910, \"42f5ba6f5fe1e00e652a08c46715871dc4b40d89d9799fd7c0ea758f86eab6a7\"],\n\t[\"aff5850c0168a67296cc790c1b04a9ed9ad1ba0469263a9432fcb53676d1bb4e0eea8ea1410100000005ac65526a537d5fcb1d01d9c26d0200000000065265ab5153acc0617ca1\", \"51ab650063\", 0, 1712981774, \"8449d5247071325e5f8edcc93cb9666c0fecabb130ce0e5bef050575488477eb\"],\n\t[\"e6d6b9d8042c27aec99af8c12b6c1f7a80453e2252c02515e1f391da185df0874e133696b50300000006ac5165650065ffffffff6a4b60a5bfe7af72b198eaa3cde2e02aa5fa36bdf5f24ebce79f6ecb51f3b554000000000652656aababac2ec4c5a6cebf86866b1fcc4c5bd5f4b19785a8eea2cdfe58851febf87feacf6f355324a80100000001537100145149ac1e287cef62f6f5343579189fad849dd33f25c25bfca841cb696f10c5a34503000000046a636a63df9d7c4c018d96e20100000000015100000000\", \"53ab\", 1, -1924777542, \"f98f95d0c5ec3ac3e699d81f6c440d2e7843eab15393eb023bc5a62835d6dcea\"],\n\t[\"046ac25e030a344116489cc48025659a363da60bc36b3a8784df137a93b9afeab91a04c1ed020000000951ab0000526a65ac51ffffffff6c094a03869fde55b9a8c4942a9906683f0a96e2d3e5a03c73614ea3223b2c29020000000500ab636a6affffffff3da7aa5ecef9071600866267674b54af1740c5aeb88a290c459caa257a2683cb0000000004ab6565ab7e2a1b900301b916030000000005abac63656308f4ed03000000000852ab53ac63ac51ac73d620020000000003ab00008deb1285\", \"6a\", 2, 1299505108, \"f79e6b776e2592bad45ca328c54abf14050c241d8f822d982c36ea890fd45757\"],\n\t[\"bd515acd0130b0ac47c2d87f8d65953ec7d657af8d96af584fc13323d0c182a2e5f9a96573000000000652ac51acac65ffffffff0467aade000000000003655363dc577d050000000006515252ab5300137f60030000000007535163530065004cdc860500000000036a5265241bf53e\", \"acab\", 0, 621090621, \"771d4d87f1591a13d77e51858c16d78f1956712fe09a46ff1abcabbc1e7af711\"],\n\t[\"ff1ae37103397245ac0fa1c115b079fa20930757f5b6623db3579cb7663313c2dc4a3ffdb300000000076353656a000053ffffffff83c59e38e5ad91216ee1a312d15b4267bae2dd2e57d1a3fd5c2f0f809eeb5d46010000000800abab6a6a53ab51ffffffff9d5e706c032c1e0ca75915f8c6686f64ec995ebcd2539508b7dd8abc3e4d7d2a01000000006b2bdcda02a8fe070500000000045253000019e31d04000000000700ab63acab526a00000000\", \"53656aab6a525251\", 0, 881938872, \"726bb88cdf3af2f7603a31f33d2612562306d08972a4412a55dbbc0e3363721c\"],\n\t[\"ff5400dd02fec5beb9a396e1cbedc82bedae09ed44bae60ba9bef2ff375a6858212478844b03000000025253ffffffff01e46c203577a79d1172db715e9cc6316b9cfc59b5e5e4d9199fef201c6f9f0f000000000900ab6552656a5165acffffffff02e8ce62040000000002515312ce3e00000000000251513f119316\", \"\", 0, 1541581667, \"1e0da47eedbbb381b0e0debbb76e128d042e02e65b11125e17fd127305fc65cd\"],\n\t[\"28e3daa603c03626ad91ffd0ff927a126e28d29db5012588b829a06a652ea4a8a5732407030200000004ab6552acffffffff8e643146d3d0568fc2ad854fd7864d43f6f16b84e395db82b739f6f5c84d97b40000000004515165526b01c2dc1469db0198bd884e95d8f29056c48d7e74ff9fd37a9dec53e44b8769a6c99c030200000009ab006a516a53630065eea8738901002398000000000007ac5363516a51abeaef12f5\", \"52ab52515253ab\", 2, 1687390463, \"55591346aec652980885a558cc5fc2e3f8d21cbd09f314a798e5a7ead5113ea6\"],\n\t[\"b54bf5ac043b62e97817abb892892269231b9b220ba08bc8dbc570937cd1ea7cdc13d9676c010000000451ab5365a10adb7b35189e1e8c00b86250f769319668189b7993d6bdac012800f1749150415b2deb0200000003655300ffffffff60b9f4fb9a7e17069fd00416d421f804e2ef2f2c67de4ca04e0241b9f9c1cc5d0200000003ab6aacfffffffff048168461cce1d40601b42fbc5c4f904ace0d35654b7cc1937ccf53fe78505a0100000008526563525265abacffffffff01dbf4e6040000000007acac656553636500000000\", \"63\", 2, 882302077, \"f5b38b0f06e246e47ce622e5ee27d5512c509f8ac0e39651b3389815eff2ab93\"],\n\t[\"ebf628b30360bab3fa4f47ce9e0dcbe9ceaf6675350e638baff0c2c197b2419f8e4fb17e16000000000452516365ac4d909a79be207c6e5fb44fbe348acc42fc7fe7ef1d0baa0e4771a3c4a6efdd7e2c118b0100000003acacacffffffffa6166e9101f03975721a3067f1636cc390d72617be72e5c3c4f73057004ee0ee010000000863636a6a516a5252c1b1e82102d8d54500000000000153324c900400000000015308384913\", \"0063516a51\", 1, -1658428367, \"eb2d8dea38e9175d4d33df41f4087c6fea038a71572e3bad1ea166353bf22184\"],\n\t[\"d6a8500303f1507b1221a91adb6462fb62d741b3052e5e7684ea7cd061a5fc0b0e93549fa50100000004acab65acfffffffffdec79bf7e139c428c7cfd4b35435ae94336367c7b5e1f8e9826fcb0ebaaaea30300000000ffffffffd115fdc00713d52c35ea92805414bd57d1e59d0e6d3b79a77ee18a3228278ada020000000453005151ffffffff040231510300000000085100ac6a6a000063c6041c0400000000080000536a6563acac138a0b04000000000263abd25fbe03000000000900656a00656aac510000000000\", \"ac526aac6a00\", 1, -2007972591, \"13d12a51598b34851e7066cd93ab8c5212d60c6ed2dae09d91672c10ccd7f87c\"],\n\t[\"658cb1c1049564e728291a56fa79987a4ed3146775fce078bd2e875d1a5ca83baf6166a82302000000056a656351ab2170e7d0826cbdb45fda0457ca7689745fd70541e2137bb4f52e7b432dcfe2112807bd720300000007006a0052536351ffffffff8715ca2977696abf86d433d5c920ef26974f50e9f4a20c584fecbb68e530af5101000000009e49d864155bf1d3c757186d29f3388fd89c7f55cc4d9158b4cf74ca27a35a1dd93f945502000000096a535353ac656351510d29fa870230b809040000000006ab6a6a526a633b41da050000000004ab6a6a65ed63bf62\", \"52acabac\", 2, -1774073281, \"53ab197fa7e27b8a3f99ff48305e67081eb90e95d89d7e92d80cee25a03a6689\"],\n\t[\"e92492cc01aec4e62df67ea3bc645e2e3f603645b3c5b353e4ae967b562d23d6e043badecd0100000003acab65ffffffff02c7e5ea040000000002ab52e1e584010000000005536365515195d16047\", \"6551\", 0, -424930556, \"93c34627f526d73f4bea044392d1a99776b4409f7d3d835f23b03c358f5a61c2\"],\n\t[\"02e242db04be2d8ced9179957e98cee395d4767966f71448dd084426844cbc6d15f2182e85030000000200650c8ffce3db9de9c3f9cdb9104c7cb26647a7531ad1ebf7591c259a9c9985503be50f8de30000000007ac6a51636a6353ffffffffa2e33e7ff06fd6469987ddf8a626853dbf30c01719efb259ae768f051f803cd30300000000fffffffffd69d8aead941683ca0b1ee235d09eade960e0b1df3cd99f850afc0af1b73e070300000001ab60bb602a011659670100000000076363526300acac00000000\", \"6353ab515251\", 3, 1451100552, \"bbc9069b8615f3a52ac8a77359098dcc6c1ba88c8372d5d5fe080b99eb781e55\"],\n\t[\"b28d5f5e015a7f24d5f9e7b04a83cd07277d452e898f78b50aae45393dfb87f94a26ef57720200000008ababac630053ac52ffffffff046475ed040000000008ab5100526363ac65c9834a04000000000251abae26b30100000000040000ac65ceefb900000000000000000000\", \"ac6551ac6a536553\", 0, -1756558188, \"5848d93491044d7f21884eef7a244fe7d38886f8ae60df49ce0dfb2a342cd51a\"],\n\t[\"efb8b09801f647553b91922a5874f8e4bb2ed8ddb3536ed2d2ed0698fac5e0e3a298012391030000000952ac005263ac52006affffffff04cdfa0f050000000007ac53ab51abac65b68d1b02000000000553ab65ac00d057d50000000000016a9e1fda010000000007ac63ac536552ac00000000\", \"6aac\", 0, 1947322973, \"603a9b61cd30fcea43ef0a5c18b88ca372690b971b379ee9e01909c336280511\"],\n\t[\"68a59fb901c21946797e7d07a4a3ea86978ce43df0479860d7116ac514ba955460bae78fff0000000001abffffffff03979be80100000000036553639300bc040000000008006552006a656565cfa78d0000000000076552acab63ab5100000000\", \"ab65ab\", 0, 995583673, \"3b320dd47f2702452a49a1288bdc74a19a4b849b132b6cad9a1d945d87dfbb23\"],\n\t[\"67761f2a014a16f3940dcb14a22ba5dc057fcffdcd2cf6150b01d516be00ef55ef7eb07a830100000004636a6a51ffffffff01af67bd050000000008526553526300510000000000\", \"6a00\", 0, 1570943676, \"079fa62e9d9d7654da8b74b065da3154f3e63c315f25751b4d896733a1d67807\"],\n\t[\"e20fe96302496eb436eee98cd5a32e1c49f2a379ceb71ada8a48c5382df7c8cd88bdc47ced03000000016556aa0e180660925a841b457aed0aae47fca2a92fa1d7afeda647abf67198a3902a7c80dd00000000085152ac636a535265bd18335e01803c810100000000046500ac52f371025e\", \"6363ab\", 1, -651254218, \"2921a0e5e3ba83c57ba57c25569380c17986bf34c366ec216d4188d5ba8b0b47\"],\n\t[\"4e1bd9fa011fe7aa14eee8e78f27c9fde5127f99f53d86bc67bdab23ca8901054ee8a8b6eb0300000009ac535153006a6a0063ffffffff044233670500000000000a667205000000000652ab636a51abe5bf35030000000003535351d579e505000000000700630065ab51ac3419ac30\", \"52abac52\", 0, -1807563680, \"4aae6648f856994bed252d319932d78db55da50d32b9008216d5366b44bfdf8a\"],\n\t[\"ec02fbee03120d02fde12574649660c441b40d330439183430c6feb404064d4f507e704f3c0100000000ffffffffe108d99c7a4e5f75cc35c05debb615d52fac6e3240a6964a29c1704d98017fb60200000002ab63fffffffff726ec890038977adfc9dadbeaf5e486d5fcb65dc23acff0dd90b61b8e2773410000000002ac65e9dace55010f881b010000000005ac00ab650000000000\", \"51ac525152ac6552\", 2, -1564046020, \"3f988922d8cd11c7adff1a83ce9499019e5ab5f424752d8d361cf1762e04269b\"],\n\t[\"23dbdcc1039c99bf11938d8e3ccec53b60c6c1d10c8eb6c31197d62c6c4e2af17f52115c3a0300000008636352000063ababffffffff17823880e1df93e63ad98c29bfac12e36efd60254346cac9d3f8ada020afc0620300000003ab63631c26f002ac66e86cd22a25e3ed3cb39d982f47c5118f03253054842daadc88a6c41a2e1500000000096a00ab636a53635163195314de015570fd0100000000096a5263acab5200005300000000\", \"ababac6a6553\", 1, 11586329, \"bd36a50e0e0a4ecbf2709e68daef41eddc1c0c9769efaee57910e99c0a1d1343\"],\n\t[\"33b03bf00222c7ca35c2f8870bbdef2a543b70677e413ce50494ac9b22ea673287b6aa55c50000000005ab00006a52ee4d97b527eb0b427e4514ea4a76c81e68c34900a23838d3e57d0edb5410e62eeb8c92b6000000000553ac6aacac42e59e170326245c000000000009656553536aab516aabb1a10603000000000852ab52ab6a516500cc89c802000000000763ac6a63ac516300000000\", \"\", 0, 557416556, \"41bead1b073e1e9fee065dd612a617ca0689e8f9d3fed9d0acfa97398ebb404c\"],\n\t[\"813eda1103ac8159850b4524ef65e4644e0fc30efe57a5db0c0365a30446d518d9b9aa8fdd0000000003656565c2f1e89448b374b8f12055557927d5b33339c52228f7108228149920e0b77ef0bcd69da60000000006abac00ab63ab82cdb7978d28630c5e1dc630f332c4245581f787936f0b1e84d38d33892141974c75b4750300000004ac53ab65ffffffff0137edfb02000000000000000000\", \"0063\", 1, -1948560575, \"71dfcd2eb7f2e6473aed47b16a6d5fcbd0af22813d892e9765023151e07771ec\"],\n\t[\"9e45d9aa0248c16dbd7f435e8c54ae1ad086de50c7b25795a704f3d8e45e1886386c653fbf01000000025352fb4a1acefdd27747b60d1fb79b96d14fb88770c75e0da941b7803a513e6d4c908c6445c7010000000163ffffffff014069a8010000000001520a794fb3\", \"51ac005363\", 1, -719113284, \"0d31a221c69bd322ef7193dd7359ddfefec9e0a1521d4a8740326d46e44a5d6a\"],\n\t[\"36e42018044652286b19a90e5dd4f8d9f361d0760d080c5c5add1970296ff0f1de630233c8010000000200ac39260c7606017d2246ee14ddb7611586178067e6a4be38e788e33f39a3a95a55a13a6775010000000352ac638bea784f7c2354ed02ea0b93f0240cdfb91796fa77649beee6f7027caa70778b091deee700000000066a65ac656363ffffffff4d9d77ab676d711267ef65363f2d192e1bd55d3cd37f2280a34c72e8b4c559d700000000056a006aab00001764e1020d30220100000000085252516aacab0053472097040000000009635353ab6a636a5100a56407a1\", \"006a536551ab53ab\", 0, 827296034, \"daec2af5622bbe220c762da77bab14dc75e7d28aa1ade9b7f100798f7f0fd97a\"],\n\t[\"5e06159a02762b5f3a5edcdfc91fd88c3bff08b202e69eb5ba74743e9f4291c4059ab008200000000001ac348f5446bb069ef977f89dbe925795d59fb5d98562679bafd61f5f5f3150c3559582992d0000000008ab5165515353abac762fc67703847ec6010000000000e200cf040000000002abaca64b86010000000008520000515363acabb82b491b\", \"ab53525352ab6a\", 0, -61819505, \"75a7db0df41485a28bf6a77a37ca15fa8eccc95b5d6014a731fd8adb9ada0f12\"],\n\t[\"a1948872013b543d6d902ccdeead231c585195214ccf5d39f136023855958436a43266911501000000086aac006a6a6a51514951c9b2038a538a04000000000452526563c0f345050000000007526a5252ac526af9be8e03000000000752acac51ab006306198db2\", \"ab6353\", 0, -326384076, \"ced7ef84aad4097e1eb96310e0d1c8e512cfcb392a01d9010713459b23bc0cf4\"],\n\t[\"c3efabba03cb656f154d1e159aa4a1a4bf9423a50454ebcef07bc3c42a35fb8ad84014864d0000000000d1cc73d260980775650caa272e9103dc6408bdacaddada6b9c67c88ceba6abaa9caa2f7d020000000553536a5265ffffffff9f946e8176d9b11ff854b76efcca0a4c236d29b69fb645ba29d406480427438e01000000066a0065005300ffffffff040419c0010000000003ab6a63cdb5b6010000000009006300ab5352656a63f9fe5e050000000004acac5352611b980100000000086a00acac00006a512d7f0c40\", \"0053\", 0, -59089911, \"c503001c16fbff82a99a18d88fe18720af63656fccd8511bca1c3d0d69bd7fc0\"],\n\t[\"efb55c2e04b21a0c25e0e29f6586be9ef09f2008389e5257ebf2f5251051cdc6a79fce2dac020000000351006affffffffaba73e5b6e6c62048ba5676d18c33ccbcb59866470bb7911ccafb2238cfd493802000000026563ffffffffe62d7cb8658a6eca8a8babeb0f1f4fa535b62f5fc0ec70eb0111174e72bbec5e0300000009abababac516365526affffffffbf568789e681032d3e3be761642f25e46c20322fa80346c1146cb47ac999cf1b0300000000b3dbd55902528828010000000001ab0aac7b0100000000015300000000\", \"acac52\", 3, 1638140535, \"e84444d91580da41c8a7dcf6d32229bb106f1be0c811b2292967ead5a96ce9d4\"],\n\t[\"91d3b21903629209b877b3e1aef09cd59aca6a5a0db9b83e6b3472aceec3bc2109e64ab85a0200000003530065ffffffffca5f92de2f1b7d8478b8261eaf32e5656b9eabbc58dcb2345912e9079a33c4cd010000000700ab65ab00536ad530611da41bbd51a389788c46678a265fe85737b8d317a83a8ff7a839debd18892ae5c80300000007ab6aac65ab51008b86c501038b8a9a05000000000263525b3f7a040000000007ab535353ab00abd4e3ff04000000000665ac51ab65630b7b656f\", \"6551525151516a00\", 2, 499657927, \"ef4bd7622eb7b2bbbbdc48663c1bc90e01d5bde90ff4cb946596f781eb420a0c\"],\n\t[\"5d5c41ad0317aa7e40a513f5141ad5fc6e17d3916eebee4ddb400ddab596175b41a111ead20100000005536a5265acffffffff900ecb5e355c5c9f278c2c6ea15ac1558b041738e4bffe5ae06a9346d66d5b2b00000000080000ab636a65ab6affffffff99f4e08305fa5bd8e38fb9ca18b73f7a33c61ff7b3c68e696b30a04fea87f3ca000000000163d3d1760d019fc13a00000000000000000000\", \"ab53acabab6aac6a52\", 2, 1007461922, \"4012f5ff2f1238a0eb84854074670b4703238ebc15bfcdcd47ffa8498105fcd9\"],\n\t[\"ceecfa6c02b7e3345445b82226b15b7a097563fa7d15f3b0c979232b138124b62c0be007890200000009abac51536a63525253ffffffffbae481ccb4f15d94db5ec0d8854c24c1cc8642bd0c6300ede98a91ca13a4539a0200000001ac50b0813d023110f5020000000006acabac526563e2b0d0040000000009656aac0063516a536300000000\", \"0063526500\", 0, -1862053821, \"e1600e6df8a6160a79ac32aa40bb4644daa88b5f76c0d7d13bf003327223f70c\"],\n\t[\"ae62d5fd0380c4083a26642159f51af24bf55dc69008e6b7769442b6a69a603edd980a33000000000005ab5100ab53ffffffff49d048324d899d4b8ed5e739d604f5806a1104fede4cb9f92cc825a7fa7b4bfe0200000005536a000053ffffffff42e5cea5673c650881d0b4005fa4550fd86de5f21509c4564a379a0b7252ac0e0000000007530000526a53525f26a68a03bfacc3010000000000e2496f000000000009ab5253acac52636563b11cc600000000000700510065526a6a00000000\", \"abab\", 1, -1600104856, \"05cf0ec9c61f1a15f651a0b3c5c221aa543553ce6c804593f43bb5c50bb91ffb\"],\n\t[\"f06f64af04fdcb830464b5efdb3d5ee25869b0744005375481d7b9d7136a0eb8828ad1f0240200000003516563fffffffffd3ba192dabe9c4eb634a1e3079fca4f072ee5ceb4b57deb6ade5527053a92c5000000000165ffffffff39f43401a36ba13a5c6dd7f1190e793933ae32ee3bf3e7bfb967be51e681af760300000009650000536552636a528e34f50b21183952cad945a83d4d56294b55258183e1627d6e8fb3beb8457ec36cadb0630000000005abab530052334a7128014bbfd10100000000085352ab006a63656afc424a7c\", \"53650051635253ac00\", 2, 313255000, \"d309da5afd91b7afa257cfd62df3ca9df036b6a9f4b38f5697d1daa1f587312b\"],\n\t[\"6dfd2f98046b08e7e2ef5fff153e00545faf7076699012993c7a30cb1a50ec528281a9022f030000000152ffffffff1f535e4851920b968e6c437d84d6ecf586984ebddb7d5db6ae035bd02ba222a8010000000651006a53ab51605072acb3e17939fa0737bc3ee43bc393b4acd58451fc4ffeeedc06df9fc649828822d5010000000253525a4955221715f27788d302382112cf60719be9ae159c51f394519bd5f7e70a4f9816c7020200000009526a6a51636aab656a36d3a5ff0445548e0100000000086a6a00516a52655167030b050000000004ac6a63525cfda8030000000000e158200000000000010000000000\", \"535263ac6a65515153\", 3, 585774166, \"72b7da10704c3ca7d1deb60c31b718ee12c70dc9dfb9ae3461edce50789fe2ba\"],\n\t[\"187eafed01389a45e75e9dda526d3acbbd41e6414936b3356473d1f9793d161603efdb45670100000002ab00ffffffff04371c8202000000000563630063523b3bde02000000000753516563006300e9e765010000000005516aac656a373f9805000000000665525352acab08d46763\", \"ab\", 0, 122457992, \"393aa6c758e0eed15fa4af6d9e2d7c63f49057246dbb92b4268ec24fc87301ca\"],\n\t[\"7d50b977035d50411d814d296da9f7965ddc56f3250961ca5ba805cadd0454e7c521e31b0300000000003d0416c2cf115a397bacf615339f0e54f6c35ffec95aa009284d38390bdde1595cc7aa7c0100000005ab52ac5365ffffffff4232c6e796544d5ac848c9dc8d25cfa74e32e847a5fc74c74d8f38ca51188562030000000653ac51006a51ffffffff016bd8bb00000000000465ab5253163526f3\", \"51ab526a00005353\", 1, -1311316785, \"60b7544319b42e4159976c35c32c2644f0adf42eff13be1dc2f726fc0b6bb492\"],\n\t[\"2a45cd1001bf642a2315d4a427eddcc1e2b0209b1c6abd2db81a800c5f1af32812de42032702000000050051525200ffffffff032177db050000000005530051abac49186f000000000004ab6aab00645c0000000000000765655263acabac00000000\", \"6a65\", 0, -1774715722, \"6a9ac3f7da4c7735fbc91f728b52ecbd602233208f96ac5592656074a5db118a\"],\n\t[\"479358c202427f3c8d19e2ea3def6d6d3ef2281b4a93cd76214f0c7d8f040aa042fe19f71f0300000001abffffffffa2709be556cf6ecaa5ef530df9e4d056d0ed57ce96de55a5b1f369fa40d4e74a020000000700006a51635365c426be3f02af578505000000000363ab63fd8f590500000000065153abac53632dfb14b3\", \"520063ab51\", 1, -763226778, \"cfe147982afacde044ce66008cbc5b1e9f0fd9b8ed52b59fc7c0fecf95a39b0e\"],\n\t[\"76179a8e03bec40747ad65ab0f8a21bc0d125b5c3c17ad5565556d5cb03ade7c83b4f32d98030000000151ffffffff99b900504e0c02b97a65e24f3ad8435dfa54e3c368f4e654803b756d011d24150200000003ac5353617a04ac61bb6cf697cfa4726657ba35ed0031432da8c0ffb252a190278830f9bd54f0320100000006656551005153c8e8fc8803677c77020000000007ac6553535253ac70f442030000000001535be0f20200000000026300bf46cb3a\", \"6aab52\", 1, -58495673, \"35e94b3776a6729d20aa2f3ddeeb06d3aad1c14cc4cde52fd21a4efc212ea16c\"],\n\t[\"75ae53c2042f7546223ce5d5f9e00a968ddc68d52e8932ef2013fa40ce4e8c6ed0b6195cde01000000056563ac630079da0452c20697382e3dba6f4fc300da5f52e95a9dca379bb792907db872ba751b8024ee0300000009655151536500005163ffffffffe091b6d43f51ff00eff0ccfbc99b72d3aff208e0f44b44dfa5e1c7322cfc0c5f01000000075200005363ab63ffffffff7e96c3b83443260ac5cfd18258574fbc4225c630d3950df812bf51dceaeb0f9103000000065365655165639a6bf70b01b3e14305000000000563530063ac00000000\", \"6300ab00ac\", 2, 982422189, \"ee4ea49d2aae0dbba05f0b9785172da54408eb1ec67d36759ff7ed25bfc28766\"],\n\t[\"1cdfa01e01e1b8078e9c2b0ca5082249bd18fdb8b629ead659adedf9a0dd5a04031871ba120200000008525351536565ab6affffffff011e28430200000000076a5363636aac52b2febd4a\", \"abacac63656300\", 0, 387396350, \"299dcaac2bdaa627eba0dfd74767ee6c6f27c9200b49da8ff6270b1041669e7e\"],\n\t[\"cc28c1810113dfa6f0fcd9c7d9c9a30fb6f1d774356abeb527a8651f24f4e6b25cf763c4e00300000003ab636affffffff02dfc6050000000000080053636351ab0052afd56903000000000453ab5265f6c90d99\", \"006551abacacac\", 0, 1299280838, \"a4c0773204ab418a939e23f493bd4b3e817375d133d307609e9782f2cc38dbcf\"],\n\t[\"ca816e7802cd43d66b9374cd9bf99a8da09402d69c688d8dcc5283ace8f147e1672b757e020200000005516aabab5240fb06c95c922342279fcd88ba6cd915933e320d7becac03192e0941e0345b79223e89570300000004005151ac353ecb5d0264dfbd010000000005ac6aacababd5d70001000000000752ac53ac6a5151ec257f71\", \"63ac\", 1, 774695685, \"cc180c4f797c16a639962e7aec58ec4b209853d842010e4d090895b22e7a7863\"],\n\t[\"b42b955303942fedd7dc77bbd9040aa0de858afa100f399d63c7f167b7986d6c2377f66a7403000000066aac00525100ffffffff0577d04b64880425a3174055f94191031ad6b4ca6f34f6da9be7c3411d8b51fc000000000300526a6391e1cf0f22e45ef1c44298523b516b3e1249df153590f592fcb5c5fc432dc66f3b57cb03000000046a6aac65ffffffff0393a6c9000000000004516a65aca674ac0400000000046a525352c82c370000000000030053538e577f89\", \"\", 1, -1237094944, \"566953eb806d40a9fb684d46c1bf8c69dea86273424d562bd407b9461c8509af\"],\n\t[\"92c9fe210201e781b72554a0ed5e22507fb02434ddbaa69aff6e74ea8bad656071f1923f3f02000000056a63ac6a514470cef985ba83dcb8eee2044807bedbf0d983ae21286421506ae276142359c8c6a34d68020000000863ac63525265006aa796dd0102ca3f9d05000000000800abab52ab535353cd5c83010000000007ac00525252005322ac75ee\", \"5165\", 0, 97879971, \"6e6307cef4f3a9b386f751a6f40acebab12a0e7e17171d2989293cbec7fd45c2\"],\n\t[\"ccca1d5b01e40fe2c6b3ee24c660252134601dab785b8f55bd6201ffaf2fddc7b3e2192325030000000365535100496d4703b4b66603000000000665535253ac633013240000000000015212d2a502000000000951abac636353636a5337b82426\", \"0052\", 0, -1691630172, \"577bf2b3520b40aef44899a20d37833f1cded6b167e4d648fc5abe203e43b649\"],\n\t[\"bc1a7a3c01691e2d0c4266136f12e391422f93655c71831d90935fbda7e840e50770c61da20000000008635253abac516353ffffffff031f32aa020000000003636563786dbc0200000000003e950f00000000000563516a655184b8a1de\", \"51536a\", 0, -1627072905, \"730bc25699b46703d7718fd5f5c34c4b5f00f594a9968ddc247fa7d5175124ed\"],\n\t[\"076d209e02d904a6c40713c7225d23e7c25d4133c3c3477828f98c7d6dbd68744023dbb66b030000000753ab00536565acffffffff10975f1b8db8861ca94c8cc7c7cff086ddcd83e10b5fffd4fc8f2bdb03f9463c0100000000ffffffff029dff76010000000006526365530051a3be6004000000000000000000\", \"515253ac65acacac\", 1, -1207502445, \"66c488603b2bc53f0d22994a1f0f66fb2958203102eba30fe1d37b27a55de7a5\"],\n\t[\"690fd1f80476db1f9eebe91317f2f130a60cbc1f4feadd9d6474d438e9cb7f91e4994600af0300000004ab536a63a15ce9fa6622d0c4171d895b42bff884dc6e8a7452f827fdc68a29c3c88e6fdee364eaf50000000002ab52ffffffff022dc39d3c0956b24d7f410b1e387859e7a72955f45d6ffb1e884d77888d18fe0300000005ac6a63656afffffffff10b06bce1800f5c49153d24748fdefb0bf514c12863247d1042d56018c3e25c03000000086a63ac6365536a52ffffffff031f162f0500000000060000655265abffbcd40500000000045151ac001a9c8c05000000000652ac53656a6300000000\", \"ac51ab63acac\", 0, -67986012, \"051c0df7ac688c2c930808dabde1f50300aea115f2bb3334f4753d5169b51e46\"],\n\t[\"49ac2af00216c0307a29e83aa5de19770e6b20845de329290bd69cf0e0db7aed61ae41b39002000000035163ac8b2558ef84635bfc59635150e90b61fc753d34acfd10d97531043053e229cd720133cd95000000000463516a51ffffffff02458471040000000008abab636a51ac0065545aa80000000000096a6553516a5263ac6a00000000\", \"51526300ab5363\", 1, 1449668540, \"ddfd902bba312a06197810da96a0ddccb595f96670b28ded7dba88d8cd0469b8\"],\n\t[\"fa4d868b024b010bd5dce46576c2fb489aa60bb797dac3c72a4836f49812c5c564c258414f03000000007a9b3a585e05027bdd89edbadf3c85ac61f8c3a04c773fa746517ae600ff1a9d6b6c02fb0200000004515163abffffffff01b17d020500000000046a65520000000000\", \"536565ab65635363\", 0, -1718953372, \"96c2b32f0a00a5925db7ba72d0b5d39922f30ea0f7443b22bc1b734808513c47\"],\n\t[\"cac6382d0462375e83b67c7a86c922b569a7473bfced67f17afd96c3cd2d896cf113febf9e0300000003006a53ffffffffaa4913b7eae6821487dd3ca43a514e94dcbbf350f8cc4cafff9c1a88720711b800000000096a6a525300acac6353ffffffff184fc4109c34ea27014cc2c1536ef7ed1821951797a7141ddacdd6e429fae6ff01000000055251655200ffffffff9e7b79b4e6836e290d7b489ead931cba65d1030ccc06f20bd4ca46a40195b33c030000000008f6bc8304a09a2704000000000563655353511dbc73050000000000cf34c500000000000091f76e0000000000085200ab00005100abd07208cb\", \"0063656a\", 2, -1488731031, \"bf078519fa87b79f40abc38f1831731422722c59f88d86775535f209cb41b9b1\"],\n\t[\"1711146502c1a0b82eaa7893976fefe0fb758c3f0e560447cef6e1bde11e42de91a125f71c030000000015bd8c04703b4030496c7461482481f290c623be3e76ad23d57a955807c9e851aaaa20270300000000d04abaf20326dcb7030000000001632225350400000000075263ac00520063dddad9020000000000af23d148\", \"52520053510063\", 0, 1852122830, \"e33d5ee08c0f3c130a44d7ce29606450271b676f4a80c52ab9ffab00cecf67f8\"],\n\t[\"8d5b124d0231fbfc640c706ddb1d57bb49a18ba8ca0e1101e32c7e6e65a0d4c7971d93ea360100000008acabac0000abac65ffffffff8fe0fd7696597b845c079c3e7b87d4a44110c445a330d70342a5501955e17dd70100000004ab525363ef22e8a90346629f030000000009516a00ac63acac51657bd57b05000000000200acfd4288050000000009acab5352ab00ab636300000000\", \"53ac526553ab65\", 0, 1253152975, \"8b57a7c3170c6c02dd14ae1d392ce3d828197b20e9145c89c1cfd5de050e1562\"],\n\t[\"38146dc502c7430e92b6708e9e107b61cd38e5e773d9395e5c8ad8986e7e4c03ee1c1e1e760100000000c8962ce2ac1bb3b1285c0b9ba07f4d2e5ce87c738c42ac0548cd8cec1100e6928cd6b0b6010000000763ab636aab52527cccefbd04e5f6f8020000000006006aabacac65ab2c4a00000000000351635209a6f40100000000026aacce57dc040000000008ab5353ab516a516a00000000\", \"ab\", 0, -1205978252, \"3cb5b030e7da0b60ccce5b4a7f3793e6ca56f03e3799fe2d6c3cc22d6d841dcb\"],\n\t[\"22d81c740469695a6a83a9a4824f77ecff8804d020df23713990afce2b72591ed7de98500502000000065352526a6a6affffffff90dc85e118379b1005d7bbc7d2b8b0bab104dad7eaa49ff5bead892f17d8c3ba010000000665656300ab51ffffffff965193879e1d5628b52005d8560a35a2ba57a7f19201a4045b7cbab85133311d0200000003ac005348af21a13f9b4e0ad90ed20bf84e4740c8a9d7129632590349afc03799414b76fd6e826200000000025353ffffffff04a0d40d04000000000060702700000000000652655151516ad31f1502000000000365ac0069a1ac0500000000095100655300ab53525100000000\", \"51636a52ac\", 0, -1644680765, \"add7f5da27262f13da6a1e2cc2feafdc809bd66a67fb8ae2a6f5e6be95373b6f\"],\n\t[\"a27dcbc801e3475174a183586082e0914c314bc9d79d1570f29b54591e5e0dff07fbb45a7f0000000004ac53ab51ffffffff027347f5020000000005535351ab63d0e5c9030000000009ac65ab6a63515200ab7cd632ed\", \"ac63636553\", 0, -686435306, \"883a6ea3b2cc53fe8a803c229106366ca14d25ffbab9fef8367340f65b201da6\"],\n\t[\"b123ed2204410d4e8aaaa8cdb95234ca86dad9ff77fb4ae0fd4c06ebed36794f0215ede0040100000002ac63ffffffff3b58b81b19b90d8f402701389b238c3a84ff9ba9aeea298bbf15b41a6766d27a01000000056a6553ab00151824d401786153b819831fb15926ff1944ea7b03d884935a8bde01ed069d5fd80220310200000000ffffffffa9c9d246f1eb8b7b382a9032b55567e9a93f86c77f4e32c092aa1738f7f756c30100000002ab65ffffffff011a2b48000000000000ed44d1fb\", \"630051ab63\", 2, -1118263883, \"b5dab912bcabedff5f63f6dd395fc2cf030d83eb4dd28214baba68a45b4bfff0\"],\n\t[\"1339051503e196f730955c5a39acd6ed28dec89b4dadc3f7c79b203b344511270e5747fa9900000000045151636affffffff378c6090e08a3895cedf1d25453bbe955a274657172491fd2887ed5c9aceca7b0100000000ffffffffcf7cc3c36ddf9d4749edfa9cefed496d2f86e870deb814bfcd3b5637a5496461030000000451006300ffffffff04dcf3fa010000000008526a63005263acabb41d84040000000004abac5153800eff020000000005656a535365106c5e00000000000000000000\", \"abac5300\", 2, 2013719928, \"7fc74de39ce6ca46ca25d760d3cec7bb21fd14f7efe1c443b5aa294f2cb5f546\"],\n\t[\"0728c606014c1fd6005ccf878196ba71a54e86cc8c53d6db500c3cc0ac369a26fac6fcbc210000000005ab53ac5365ba9668290182d7870100000000066a000053655100000000\", \"65\", 0, 1789961588, \"ab6baa6da3b2bc853868d166f8996ad31d63ef981179f9104f49968fd61c8427\"],\n\t[\"a1134397034bf4067b6c81c581e2b73fb63835a08819ba24e4e92df73074bf773c94577df7000000000465525251ffffffff8b6608feaa3c1f35f49c6330a769716fa01c5c6f6e0cdc2eb10dfc99bbc21e77010000000952656aac005352655180a0bda4bc72002c2ea8262e26e03391536ec36867258cab968a6fd6ec7523b64fa1d8c001000000056a53ac6353ffffffff04dbeeed05000000000553650052abcd5d0e01000000000463abab51104b2e0500000000066aac53ac5165283ca7010000000004535252ab00000000\", \"ab515151516552ab\", 1, -324598676, \"91178482112f94d1c8e929de443e4b9c893e18682998d393ca9ca77950412586\"],\n\t[\"bcdafbae04aa18eb75855aeb1f5124f30044741351b33794254a80070940cb10552fa4fa8e0300000001acd0423fe6e3f3f88ae606f2e8cfab7a5ef87caa2a8f0401765ff9a47d718afcfb40c0099b0000000008ac6565ab53ac6aac645308009d680202d600e492b31ee0ab77c7c5883ebad5065f1ce87e4dfe6453e54023a0010000000151ffffffffb9d818b14245899e1d440152827c95268a676f14c3389fc47f5a11a7b38b1bde03000000026300ffffffff03cda22102000000000751ac535263005100a4d20400000000045200536ac8bef405000000000700ab51ab6563ac00000000\", \"6553516a526aab\", 1, -2111409753, \"5e1849e7368cf4f042718586d9bd831d61479b775bab97aba9f450042bd9876a\"],\n\t[\"ed3bb93802ddbd08cb030ef60a2247f715a0226de390c9c1a81d52e83f8674879065b5f87d0300000003ab6552ffffffff04d2c5e60a21fb6da8de20bf206db43b720e2a24ce26779bca25584c3f765d1e0200000008ab656a6aacab00ab6e946ded025a811d04000000000951abac6352ac00ab5143cfa3030000000005635200636a00000000\", \"5352ac650065535300\", 1, -668727133, \"e9995065e1fddef72a796eef5274de62012249660dc9d233a4f24e02a2979c87\"],\n\t[\"59f4629d030fa5d115c33e8d55a79ea3cba8c209821f979ed0e285299a9c72a73c5bba00150200000002636affffffffd8aca2176df3f7a96d0dc4ee3d24e6cecde1582323eec2ebef9a11f8162f17ac0000000007ab6565acab6553ffffffffeebc10af4f99c7a21cbc1d1074bd9f0ee032482a71800f44f26ee67491208e0403000000065352ac656351ffffffff0434e955040000000004ab515152caf2b305000000000365ac007b1473030000000003ab530033da970500000000060051536a5253bb08ab51\", \"\", 2, 396340944, \"0e9c47973ef2c292b2252c623f465bbb92046fe0b893eebf4e1c9e02cb01c397\"],\n\t[\"286e3eb7043902bae5173ac3b39b44c5950bc363f474386a50b98c7bdab26f98dc83449c4a020000000752ac6a00510051ffffffff4339cd6a07f5a5a2cb5815e5845da70300f5c7833788363bf7fe67595d3225520100000000fffffffff9c2dd8b06ad910365ffdee1a966f124378a2b8021065c8764f6138bb1e951380200000005ab5153ac6affffffff0370202aba7a68df85436ea7c945139513384ef391fa33d16020420b8ad40e9a000000000900ab5165526353abacffffffff020c1907000000000004abac526a1b490b040000000000df1528f7\", \"5353ab\", 3, -1407529517, \"32154c09174a9906183abf26538c39e78468344ca0848bbd0785e24a3565d932\"],\n\t[\"2e245cf80179e2e95cd1b34995c2aff49fe4519cd7cee93ad7587f7f7e8105fc2dff206cd30200000009006a63516a6553ab52350435a201d5ed2d02000000000352ab6558552c89\", \"00ab53\", 0, -233917810, \"4605ae5fd3d50f9c45d37db7118a81a9ef6eb475d2333f59df5d3e216f150d49\"],\n\t[\"33a98004029d262f951881b20a8d746c8c707ea802cd2c8b02a33b7e907c58699f97e42be80100000007ac53536552abacdee04cc01d205fd8a3687fdf265b064d42ab38046d76c736aad8865ca210824b7c622ecf02000000070065006a536a6affffffff01431c5d010000000000270d48ee\", \"\", 1, 921554116, \"ff9d7394002f3f196ea25472ea6c46f753bd879a7244795157bb7235c9322902\"],\n\t[\"aac18f2b02b144ed481557c53f2146ae523f24fcde40f3445ab0193b6b276c315dc2894d2300000000075165650000636a233526947dbffc76aec7db1e1baa6868ad4799c76e14794dcbaaec9e713a83967f6a65170200000005abac6551ab27d518be01b652a30000000000015300000000\", \"52ac5353\", 1, 1559377136, \"59fc2959bb7bb24576cc8a237961ed95bbb900679d94da6567734c4390cb6ef5\"],\n\t[\"5ab79881033555b65fe58c928883f70ce7057426fbdd5c67d7260da0fe8b1b9e6a2674cb850300000009ac516aac6aac006a6affffffffa5be9223b43c2b1a4d120b5c5b6ec0484f637952a3252181d0f8e813e76e11580200000000e4b5ceb8118cb77215bbeedc9a076a4d087bb9cd1473ea32368b71daeeeacc451ec209010000000005acac5153aced7dc34e02bc5d11030000000005ac5363006a54185803000000000552ab00636a00000000\", \"5100\", 1, 1927062711, \"e9f53d531c12cce1c50abed4ac521a372b4449b6a12f9327c80020df6bff66c0\"],\n\t[\"6c2c8fac0124b0b7d4b610c3c5b91dee32b7c927ac71abdf2d008990ca1ac40de0dfd530660300000006ababac5253656bd7eada01d847ec000000000004ac52006af4232ec8\", \"6a6a6a0051\", 0, -340809707, \"fb51eb9d7e47d32ff2086205214f90c7c139e08c257a64829ae4d2b301071c6a\"],\n\t[\"6e3880af031735a0059c0bb5180574a7dcc88e522c8b56746d130f8d45a52184045f96793e0100000008acabac6a526a6553fffffffffe05f14cdef7d12a9169ec0fd37524b5fcd3295f73f48ca35a36e671da4a2f560000000008006a526a6351ab63ffffffffdfbd869ac9e472640a84caf28bdd82e8c6797f42d03b99817a705a24fde2736600000000010090a090a503db956b04000000000952ac53ab6a536a63ab358390010000000009656a5200525153ac65353ee204000000000763530052526aaba6ad83fb\", \"535151ab6300\", 2, 222014018, \"57a34ddeb1bf36d28c7294dda0432e9228a9c9e5cc5c692db98b6ed2e218d825\"],\n\t[\"8df1cd19027db4240718dcaf70cdee33b26ea3dece49ae6917331a028c85c5a1fb7ee3e475020000000865ab6a00510063636157988bc84d8d55a8ba93cdea001b9bf9d0fa65b5db42be6084b5b1e1556f3602f65d4d0100000005ac00ab0052206c852902b2fb54030000000008ac5252536aacac5378c4a5050000000007acabac535163532784439e\", \"acab6a\", 0, 1105620132, \"edb7c74223d1f10f9b3b9c1db8064bc487321ff7bb346f287c6bc2fad83682de\"],\n\t[\"0e803682024f79337b25c98f276d412bc27e56a300aa422c42994004790cee213008ff1b8303000000080051ac65ac655165f421a331892b19a44c9f88413d057fea03c3c4a6c7de4911fe6fe79cf2e9b3b10184b1910200000005525163630096cb1c670398277204000000000253acf7d5d502000000000963536a6a636a5363ab381092020000000002ac6a911ccf32\", \"6565\", 1, -1492094009, \"f0672638a0e568a919e9d8a9cbd7c0189a3e132940beeb52f111a89dcc2daa2c\"],\n\t[\"7d71669d03022f9dd90edac323cde9e56354c6804c6b8e687e9ae699f46805aafb8bcaa636000000000253abffffffff698a5fdd3d7f2b8b000c68333e4dd58fa8045b3e2f689b889beeb3156cecdb490300000009525353abab0051acabc53f0aa821cdd69b473ec6e6cf45cf9b38996e1c8f52c27878a01ec8bb02e8cb31ad24e500000000055353ab0052ffffffff0447a23401000000000565ab53ab5133aaa0030000000006515163656563057d110300000000056a6aacac52cf13b5000000000003526a5100000000\", \"6a6a51\", 1, -1349253507, \"722efdd69a7d51d3d77bed0ac5544502da67e475ea5857cd5af6bdf640a69945\"],\n\t[\"9ff618e60136f8e6bb7eabaaac7d6e2535f5fba95854be6d2726f986eaa9537cb283c701ff02000000026a65ffffffff012d1c0905000000000865ab00ac6a516a652f9ad240\", \"51515253635351ac\", 0, 1571304387, \"659cd3203095d4a8672646add7d77831a1926fc5b66128801979939383695a79\"],\n\t[\"9fbd43ac025e1462ecd10b1a9182a8e0c542f6d1089322a41822ab94361e214ed7e1dfdd8a020000000263519d0437581538e8e0b6aea765beff5b4f3a4a202fca6e5d19b34c141078c6688f71ba5b8e0100000003ac6552ffffffff02077774050000000009655153655263acab6a0ae4e10100000000035152524c97136b\", \"635152ab\", 0, 1969622955, \"d82d4ccd9b67810f26a378ad9592eb7a30935cbbd27e859b00981aefd0a72e08\"],\n\t[\"0117c92004314b84ed228fc11e2999e657f953b6de3b233331b5f0d0cf40d5cc149b93c7b30300000005515263516a083e8af1bd540e54bf5b309d36ba80ed361d77bbf4a1805c7aa73667ad9df4f97e2da410020000000600ab6351ab524d04f2179455e794b2fcb3d214670001c885f0802e4b5e015ed13a917514a7618f5f332203000000086a536aab51000063ecf029e65a4a009a5d67796c9f1eb358b0d4bd2620c8ad7330fb98f5a802ab92d0038b1002000000036a6551a184a88804b04490000000000009ab6a5152535165526a33d1ab020000000001518e92320000000000002913df04000000000952abac6353525353ac8b19bfdf\", \"000051ab0000\", 0, 489433059, \"8eebac87e60da524bbccaf285a44043e2c9232868dda6c6271a53c153e7f3a55\"],\n\t[\"e7f5482903f98f0299e0984b361efb2fddcd9979869102281e705d3001a9d283fe9f3f3a1e02000000025365ffffffffcc5c7fe82feebad32a22715fc30bc584efc9cd9cadd57e5bc4b6a265547e676e0000000001ab579d21235bc2281e08bf5e7f8f64d3afb552839b9aa5c77cf762ba2366fffd7ebb74e49400000000055263ab63633df82cf40100982e05000000000453ac535300000000\", \"acacab\", 2, -1362931214, \"046de666545330e50d53083eb78c9336416902f9b96c77cc8d8e543da6dfc7e4\"],\n\t[\"09adb2e90175ca0e816326ae2dce7750c1b27941b16f6278023dbc294632ab97977852a09d030000000465ab006affffffff027739cf0100000000075151ab63ac65ab8a5bb601000000000653ac5151520011313cdc\", \"ac\", 0, -76831756, \"478ee06501b4965b40bdba6cbaad9b779b38555a970912bb791b86b7191c54bc\"],\n\t[\"f973867602e30f857855cd0364b5bbb894c049f44abbfd661d7ae5dbfeaafca89fac8959c20100000005ab52536a51ffffffffbeceb68a4715f99ba50e131884d8d20f4a179313691150adf0ebf29d05f8770303000000066352ab00ac63ffffffff021fddb90000000000036a656322a177000000000008526500ac5100acac84839083\", \"52acab53ac\", 0, 1407879325, \"db0329439490efc64b7104d6d009b03fbc6fac597cf54fd786fbbb5fd73b92b4\"],\n\t[\"fd22ebaa03bd588ad16795bea7d4aa7f7d48df163d75ea3afebe7017ce2f350f6a0c1cb0bb00000000086aabac5153526363ffffffff488e0bb22e26a565d77ba07178d17d8f85702630ee665ec35d152fa05af3bda10200000004515163abffffffffeb21035849e85ad84b2805e1069a91bb36c425dc9c212d9bae50a95b6bfde1200300000001ab5df262fd02b69848040000000008ab6363636a6363ace23bf2010000000007655263635253534348c1da\", \"006353526563516a00\", 0, -1491036196, \"92364ba3c7a85d4e88885b8cb9b520dd81fc29e9d2b750d0790690e9c1246673\"],\n\t[\"130b462d01dd49fac019dc4442d0fb54eaa6b1c2d1ad0197590b7df26969a67abd7f3fbb4f0100000008ac65abac53ab6563ffffffff0345f825000000000004ac53acac9d5816020000000002ababeff8e90500000000086aab006552ac6a53a892dc55\", \"ab0065ac530052\", 0, 944483412, \"1f4209fd4ce7f13d175fdd522474ae9b34776fe11a5f17a27d0796c77a2a7a9d\"],\n\t[\"f8e50c2604609be2a95f6d0f31553081f4e1a49a0a30777fe51eb1c596c1a9a92c053cf28c0300000009656a51ac5252630052fffffffff792ed0132ae2bd2f11d4a2aab9d0c4fbdf9a66d9ae2dc4108afccdc14d2b1700100000007ab6a6563ac636a7bfb2fa116122b539dd6a2ab089f88f3bc5923e5050c8262c112ff9ce0a3cd51c6e3e84f02000000066551ac5352650d5e687ddf4cc9a497087cabecf74d236aa4fc3081c3f67b6d323cba795e10e7a171b725000000000852635351ab635100ffffffff02df5409020000000008ac6a53acab5151004156990200000000045163655200000000\", \"ac53abac65005300\", 0, -173065000, \"b596f206d7eba22b7e2d1b7a4f4cf69c7c541b6c84dcc943f84e19a99a923310\"],\n\t[\"18020dd1017f149eec65b2ec23300d8df0a7dd64fc8558b36907723c03cd1ba672bbb0f51d0300000005ab65ab6a63ffffffff037cd7ae000000000009ab516a65005352ac65f1e4360400000000056353530053f118f0040000000009536363ab006500abac00000000\", \"63ab51acab52ac\", 0, -550412404, \"e19b796c14a0373674968e342f2741d8b51092a5f8409e9bff7dcd52e56fcbcb\"],\n\t[\"b04154610363fdade55ceb6942d5e5a723323863b48a0cb04fdcf56210717955763f56b08d0300000009ac526a525151635151ffffffff93a176e76151a9eabdd7af00ef2af72f9e7af5ecb0aa4d45d00618f394cdd03c030000000074d818b332ebe05dc24c44d776cf9d275c61f471cc01efce12fd5a16464157f1842c65cb00000000066a0000ac6352d3c4134f01d8a1c0030000000005520000005200000000\", \"5200656a656351\", 2, -9757957, \"6e3e5ba77f760b6b5b5557b13043f1262418f3dd2ce7f0298b012811fc8ad5bc\"],\n\t[\"9794b3ce033df7b1e32db62d2f0906b589eacdacf5743963dc2255b6b9a6cba211fadd0d41020000000600ab00650065ffffffffaae00687a6a4131152bbcaafedfaed461c86754b0bde39e2bef720e6d1860a0302000000070065516aac6552ffffffff50e4ef784d6230df7486e972e8918d919f005025bc2d9aacba130f58bed7056703000000075265ab52656a52ffffffff02c6f1a9000000000006005251006363cf450c040000000008abab63510053abac00000000\", \"ac0063ababab515353\", 1, 2063905082, \"fad092fc98f17c2c20e10ba9a8eb44cc2bcc964b006f4da45cb9ceb249c69698\"],\n\t[\"94533db7015e70e8df715066efa69dbb9c3a42ff733367c18c22ff070392f988f3b93920820000000006535363636300ce4dac3e03169af80300000000080065ac6a53ac65ac39c050020000000006abacab6aacac708a02050000000005ac5251520000000000\", \"6553\", 0, -360458507, \"5418cf059b5f15774836edd93571e0eed3855ba67b2b08c99dccab69dc87d3e9\"],\n\t[\"c8597ada04f59836f06c224a2640b79f3a8a7b41ef3efa2602592ddda38e7597da6c639fee0300000009005251635351acabacffffffff4c518f347ee694884b9d4072c9e916b1a1f0a7fc74a1c90c63fdf8e5a185b6ae02000000007113af55afb41af7518ea6146786c7c726641c68c8829a52925e8d4afd07d8945f68e7230300000008ab00ab65ab650063ffffffffc28e46d7598312c420e11dfaae12add68b4d85adb182ae5b28f8340185394b63000000000165ffffffff04dbabb7010000000000ee2f6000000000000852ab6500ab6a51acb62a27000000000009ac53515300ac006a6345fb7505000000000752516a0051636a00000000\", \"\", 3, 15199787, \"0d66003aff5bf78cf492ecbc8fd40c92891acd58d0a271be9062e035897f317e\"],\n\t[\"1a28c4f702c8efaad96d879b38ec65c5283b5c084b819ad7db1c086e85e32446c7818dc7a90300000008656351536a525165fa78cef86c982f1aac9c5eb8b707aee8366f74574c8f42ef240599c955ef4401cf578be30200000002ab518893292204c430eb0100000000016503138a0300000000040053abac60e0eb010000000005525200ab63567c2d030000000004abab52006cf81e85\", \"ab51525152\", 1, 2118315905, \"4e4c9a781f626b59b1d3ad8f2c488eb6dee8bb19b9bc138bf0dc33e7799210d4\"],\n\t[\"c6c7a87003f772bcae9f3a0ac5e499000b68703e1804b9ddc3e73099663564d53ddc4e1c6e01000000076a536a6aac63636e3102122f4c30056ef8711a6bf11f641ddfa6984c25ac38c3b3e286e74e839198a80a34010000000165867195cd425821dfa2f279cb1390029834c06f018b1e6af73823c867bf3a0524d1d6923b0300000005acab53ab65ffffffff02fa4c49010000000008ab656a0052650053e001100400000000008836d972\", \"ac526351acab\", 1, 978122815, \"a869c18a0edf563d6e5eddd5d5ae8686f41d07f394f95c9feb8b7e52761531ca\"],\n\t[\"0ea580ac04c9495ab6af3b8d59108bb4194fcb9af90b3511c83f7bb046d87aedbf8423218e02000000085152acac006363ab9063d7dc25704e0caa5edde1c6f2dd137ded379ff597e055b2977b9c559b07a7134fcef2000000000200aca89e50181f86e9854ae3b453f239e2847cf67300fff802707c8e3867ae421df69274449402000000056365abababffffffff47a4760c881a4d7e51c69b69977707bd2fb3bcdc300f0efc61f5840e1ac72cee0000000000ffffffff0460179a020000000004ab53ab52a5250c0500000000096565acac6365ab52ab6c281e02000000000952635100ac006563654e55070400000000046552526500000000\", \"ab526563acac53ab\", 2, 1426964167, \"b1c50d58b753e8f6c7513752158e9802cf0a729ebe432b99acc0fe5d9b4e9980\"],\n\t[\"c33028b301d5093e1e8397270d75a0b009b2a6509a01861061ab022ca122a6ba935b8513320200000000ffffffff013bcf5a0500000000015200000000\", \"\", 0, -513413204, \"6b1459536f51482f5dbf42d7e561896557461e1e3b6bf67871e2b51faae2832c\"],\n\t[\"43b2727901a7dd06dd2abf690a1ccedc0b0739cb551200796669d9a25f24f71d8d101379f50300000000ffffffff0418e031040000000000863d770000000000085352ac526563ac5174929e040000000004ac65ac00ec31ac0100000000066a51ababab5300000000\", \"65\", 0, -492874289, \"154ff7a9f0875edcfb9f8657a0b98dd9600fabee3c43eb88af37cf99286d516c\"],\n\t[\"4763ed4401c3e6ab204bed280528e84d5288f9cac5fb8a2e7bd699c7b98d4df4ac0c40e55303000000066a6aacab5165ffffffff015b57f80400000000046a63535100000000\", \"ac51abab53\", 0, -592611747, \"849033a2321b5755e56ef4527ae6f51e30e3bca50149d5707368479723d744f8\"],\n\t[\"d24f647b02f71708a880e6819a1dc929c1a50b16447e158f8ff62f9ccd644e0ca3c592593702000000050053536a00ffffffff67868cd5414b6ca792030b18d649de5450a456407242b296d936bcf3db79e07b02000000005af6319c016022f50100000000036a516300000000\", \"6aab526353516a6a\", 0, 1350782301, \"8556fe52d1d0782361dc28baaf8774b13f3ce5ed486ae0f124b665111e08e3e3\"],\n\t[\"fe6ddf3a02657e42a7496ef170b4a8caf245b925b91c7840fd28e4a22c03cb459cb498b8d603000000065263656a650071ce6bf8d905106f9f1faf6488164f3decac65bf3c5afe1dcee20e6bc3cb6d052561985a030000000163295b117601343dbb0000000000026563dba521df\", \"\", 1, -1696179931, \"d9684685c99ce48f398fb467a91a1a59629a850c429046fb3071f1fa9a5fe816\"],\n\t[\"c61523ef0129bb3952533cbf22ed797fa2088f307837dd0be1849f20decf709cf98c6f032f03000000026563c0f1d378044338310400000000066363516a5165a14fcb0400000000095163536a6a00ab53657271d60200000000001d953f0500000000010000000000\", \"53516353005153\", 0, 1141615707, \"7e975a72db5adaa3c48d525d9c28ac11cf116d0f8b16ce08f735ad75a80aec66\"],\n\t[\"ba3dac6c0182562b0a26d475fe1e36315f0913b6869bdad0ecf21f1339a5fcbccd32056c840200000000ffffffff04300351050000000000220ed405000000000851abac636565ac53dbbd19020000000007636363ac6a52acbb005a0500000000016abd0c78a8\", \"63006a635151005352\", 0, 1359658828, \"47bc8ab070273e1f4a0789c37b45569a6e16f3f3092d1ce94dddc3c34a28f9f4\"],\n\t[\"ac27e7f5025fc877d1d99f7fc18dd4cadbafa50e34e1676748cc89c202f93abf36ed46362101000000036300abffffffff958cd5381962b765e14d87fc9524d751e4752dd66471f973ed38b9d562e525620100000003006500ffffffff02b67120050000000004ac51516adc330c0300000000015200000000\", \"656352\", 1, 15049991, \"f3374253d64ac264055bdbcc32e27426416bd595b7c7915936c70f839e504010\"],\n\t[\"edb30140029182b80c8c3255b888f7c7f061c4174d1db45879dca98c9aab8c8fed647a6ffc03000000086a53510052ab6300ffffffff82f65f261db62d517362c886c429c8fbbea250bcaad93356be6f86ba573e9d930100000000ffffffff04daaf150400000000016a86d1300100000000096a6353535252ac5165d4ddaf000000000002abab5f1c6201000000000000000000\", \"ab6a6a00ac\", 0, -2058017816, \"8d7794703dad18e2e40d83f3e65269834bb293e2d2b8525932d6921884b8f368\"],\n\t[\"7e50207303146d1f7ad62843ae8017737a698498d4b9118c7a89bb02e8370307fa4fada41d000000000753006300005152b7afefc85674b1104ba33ef2bf37c6ed26316badbc0b4aa6cb8b00722da4f82ff3555a6c020000000900ac656363ac51ac52ffffffff93fab89973bd322c5d7ad7e2b929315453e5f7ada3072a36d8e33ca8bebee6e0020000000300acab930da52b04384b04000000000004650052ac435e380200000000076a6a515263ab6aa9494705000000000600ab6a525252af8ba90100000000096565acab526353536a279b17ad\", \"acac005263536aac63\", 1, -34754133, \"4e6357da0057fb7ff79da2cc0f20c5df27ff8b2f8af4c1709e6530459f7972b0\"],\n\t[\"c05764f40244fb4ebe4c54f2c5298c7c798aa90e62c29709acca0b4c2c6ec08430b26167440100000008acab6a6565005253ffffffffc02c2418f398318e7f34a3cf669d034eef2111ea95b9f0978b01493293293a870100000000e563e2e00238ee8d040000000002acab03fb060200000000076500ac656a516aa37f5534\", \"52ab6a0065\", 1, -2033176648, \"83deef4a698b62a79d4877dd9afebc3011a5275dbe06e89567e9ef84e8a4ee19\"],\n\t[\"5a59e0b9040654a3596d6dab8146462363cd6549898c26e2476b1f6ae42915f73fd9aedfda00000000036363abffffffff9ac9e9ca90be0187be2214251ff08ba118e6bf5e2fd1ba55229d24e50a510d53010000000165ffffffff41d42d799ac4104644969937522873c0834cc2fcdab7cdbecd84d213c0e96fd60000000000ffffffffd838db2c1a4f30e2eaa7876ef778470f8729fcf258ad228b388df2488709f8410300000000fdf2ace002ceb6d903000000000265654c1310040000000003ac00657e91c0ec\", \"536a63ac\", 0, 82144555, \"98ccde2dc14d14f5d8b1eeea5364bd18fc84560fec2fcea8de4d88b49c00695e\"],\n\t[\"156ebc8202065d0b114984ee98c097600c75c859bfee13af75dc93f57c313a877efb09f230010000000463536a51ffffffff81114e8a697be3ead948b43b5005770dd87ffb1d5ccd4089fa6c8b33d3029e9c03000000066a5251656351ffffffff01a87f140000000000050000ac51ac00000000\", \"00\", 0, -362221092, \"a903c84d8c5e71134d1ab6dc1e21ac307c4c1a32c90c90f556f257b8a0ec1bf5\"],\n\t[\"15e37793023c7cbf46e073428908fce0331e49550f2a42b92468827852693f0532a01c29f70200000007005353636351acffffffff38426d9cec036f00eb56ec1dcd193647e56a7577278417b8a86a78ac53199bc403000000056353006a53ffffffff04a25ce103000000000900ab5365656a526a63c8eff7030000000004526353537ab6db0200000000016a11a3fa02000000000651acacab526500000000\", \"53ac6aab6a6551\", 0, 1117532791, \"83c68b3c5a89260ce16ce8b4dbf02e1f573c532d9a72f5ea57ab419fa2630214\"],\n\t[\"f7a09f10027250fc1b70398fb5c6bffd2be9718d3da727e841a73596fdd63810c9e4520a6a010000000963ac516a636a65acac1d2e2c57ab28d311edc4f858c1663972eebc3bbc93ed774801227fda65020a7ec1965f780200000005ac5252516a8299fddc01dcbf7200000000000463ac6551960fda03\", \"65acab51\", 1, 2017321737, \"9c5fa02abfd34d0f9dec32bf3edb1089fca70016debdb41f4f54affcb13a2a2a\"],\n\t[\"6d97a9a5029220e04f4ccc342d8394c751282c328bf1c132167fc05551d4ca4da4795f6d4e02000000076a0052ab525165ffffffff9516a205e555fa2a16b73e6db6c223a9e759a7e09c9a149a8f376c0a7233fa1b0100000007acab51ab63ac6affffffff04868aed04000000000652ac65ac536a396edf01000000000044386c0000000000076aab5363655200894d48010000000001ab8ebefc23\", \"6351526aac51\", 1, 1943666485, \"f0bd4ca8e97203b9b4e86bc24bdc8a1a726db5e99b91000a14519dc83fc55c29\"],\n\t[\"8e3fddfb028d9e566dfdda251cd874cd3ce72e9dde837f95343e90bd2a93fe21c5daeb5eed01000000045151525140517dc818181f1e7564b8b1013fd68a2f9a56bd89469686367a0e72c06be435cf99db750000000003635251ffffffff01c051780300000000096552ababac6a65acab099766eb\", \"5163ab6a52ababab51\", 1, 1296295812, \"5509eba029cc11d7dd2808b8c9eb47a19022b8d8b7778893459bbc19ab7ea820\"],\n\t[\"a603f37b02a35e5f25aae73d0adc0b4b479e68a734cf722723fd4e0267a26644c36faefdab0200000000ffffffff43374ad26838bf733f8302585b0f9c22e5b8179888030de9bdda180160d770650200000001004c7309ce01379099040000000005526552536500000000\", \"abababab005153\", 0, 1409936559, \"4ca73da4fcd5f1b10da07998706ffe16408aa5dff7cec40b52081a6514e3827e\"],\n\t[\"9eeedaa8034471a3a0e3165620d1743237986f060c4434f095c226114dcb4b4ec78274729f03000000086a5365510052ac6afb505af3736e347e3f299a58b1b968fce0d78f7457f4eab69240cbc40872fd61b5bf8b120200000002ac52df8247cf979b95a4c97ecb8edf26b3833f967020cd2fb25146a70e60f82c9ee4b14e88b103000000008459e2fa0125cbcd05000000000000000000\", \"52ab5352006353516a\", 0, -1832576682, \"fb018ae54206fdd20c83ae5873ec82b8e320a27ed0d0662db09cda8a071f9852\"],\n\t[\"05921d7c048cf26f76c1219d0237c226454c2a713c18bf152acc83c8b0647a94b13477c07f0300000003ac526afffffffff2f494453afa0cabffd1ba0a626c56f90681087a5c1bd81d6adeb89184b27b7402000000036a6352ffffffff0ad10e2d3ce355481d1b215030820da411d3f571c3f15e8daf22fe15342fed04000000000095f29f7b93ff814a9836f54dc6852ec414e9c4e16a506636715f569151559100ccfec1d100000000055263656a53ffffffff04f4ffef010000000008ac6a6aabacabab6a0e6689040000000006ab536a5352abe364d005000000000965536363655251ab53807e00010000000004526aab63f18003e3\", \"6363ac51\", 3, -375891099, \"001b0b176f0451dfe2d9787b42097ceb62c70d324e925ead4c58b09eebdf7f67\"],\n\t[\"b9b44d9f04b9f15e787d7704e6797d51bc46382190c36d8845ec68dfd63ee64cf7a467b21e00000000096aac00530052ab636aba1bcb110a80c5cbe073f12c739e3b20836aa217a4507648d133a8eedd3f02cb55c132b203000000076a000063526352b1c288e3a9ff1f2da603f230b32ef7c0d402bdcf652545e2322ac01d725d75f5024048ad0100000000ffffffffffd882d963be559569c94febc0ef241801d09dc69527c9490210f098ed8203c700000000056a006300ab9109298d01719d9a0300000000066a52ab006365d7894c5b\", \"ac6351650063636a\", 3, -622355349, \"ac87b1b93a6baab6b2c6624f10e8ebf6849b0378ef9660a3329073e8f5553c8d\"],\n\t[\"ff60473b02574f46d3e49814c484081d1adb9b15367ba8487291fc6714fd6e3383d5b335f001000000026a6ae0b82da3dc77e5030db23d77b58c3c20fa0b70aa7d341a0f95f3f72912165d751afd57230300000008ac536563516a6363ffffffff04f86c0200000000000553acab636ab13111000000000003510065f0d3f305000000000951ab516a65516aabab730a3a010000000002515200000000\", \"ac6a\", 1, 1895032314, \"0767e09bba8cd66d55915677a1c781acd5054f530d5cf6de2d34320d6c467d80\"],\n\t[\"f218026204f4f4fc3d3bd0eada07c57b88570d544a0436ae9f8b753792c0c239810bb30fbc0200000002536affffffff8a468928d6ec4cc10aa0f73047697970e99fa64ae8a3b4dca7551deb0b639149010000000851ab520052650051ffffffffa98dc5df357289c9f6873d0f5afcb5b030d629e8f23aa082cf06ec9a95f3b0cf0000000000ffffffffea2c2850c5107705fd380d6f29b03f533482fd036db88739122aac9eff04e0aa010000000365536a03bd37db034ac4c4020000000007515152655200ac33b27705000000000151efb71e0000000000007b65425b\", \"515151\", 3, -1772252043, \"de35c84a58f2458c33f564b9e58bc57c3e028d629f961ad1b3c10ee020166e5a\"],\n\t[\"48e7d42103b260b27577b70530d1ac2fed2551e9dd607cbcf66dca34bb8c03862cf8f5fd5401000000075151526aacab00ffffffff1e3d3b841552f7c6a83ee379d9d66636836673ce0b0eda95af8f2d2523c91813030000000665acac006365ffffffff388b3c386cd8c9ef67c83f3eaddc79f1ff910342602c9152ffe8003bce51b28b0100000008636363006a636a52ffffffff04b8f67703000000000852005353ac6552520cef720200000000085151ab6352ab00ab5096d6030000000005516a005100662582020000000001ac6c137280\", \"6a65\", 1, 1513618429, \"e2fa3e1976aed82c0987ab30d4542da2cb1cffc2f73be13480132da8c8558d5c\"],\n\t[\"91ebc4cf01bc1e068d958d72ee6e954b196f1d85b3faf75a521b88a78021c543a06e056279000000000265ab7c12df0503832121030000000000cc41a6010000000005ab5263516540a951050000000006ab63ab65acac00000000\", \"526a0065636a6a6aac\", 0, -614046478, \"7de4ba875b2e584a7b658818c112e51ee5e86226f5a80e5f6b15528c86400573\"],\n\t[\"3cd4474201be7a6c25403bf00ca62e2aa8f8f4f700154e1bb4d18c66f7bb7f9b975649f0dc0100000006535151535153ffffffff01febbeb000000000006005151006aac00000000\", \"\", 0, -1674687131, \"6b77ca70cc452cc89acb83b69857cda98efbfc221688fe816ef4cb4faf152f86\"],\n\t[\"92fc95f00307a6b3e2572e228011b9c9ed41e58ddbaefe3b139343dbfb3b34182e9fcdc3f50200000002acab847bf1935fde8bcfe41c7dd99683289292770e7f163ad09deff0e0665ed473cd2b56b0f40300000006516551ab6351294dab312dd87b9327ce2e95eb44b712cfae0e50fda15b07816c8282e8365b643390eaab01000000026aacffffffff016e0b6b040000000001ac00000000\", \"650065acac005300\", 2, -1885164012, \"bd7d26bb3a98fc8c90c972500618bf894cb1b4fe37bf5481ff60eef439d3b970\"],\n\t[\"4db591ab018adcef5f4f3f2060e41f7829ce3a07ea41d681e8cb70a0e37685561e4767ac3b0000000005000052acabd280e63601ae6ef20000000000036a636326c908f7\", \"ac6a51526300630052\", 0, 862877446, \"355ccaf30697c9c5b966e619a554d3323d7494c3ea280a9b0dfb73f953f5c1cb\"],\n\t[\"503fd5ef029e1beb7b242d10032ac2768f9a1aca0b0faffe51cec24770664ec707ef7ede4f01000000045253ac53375e350cc77741b8e96eb1ce2d3ca91858c052e5f5830a0193200ae2a45b413dda31541f0000000003516553ffffffff0175a5ba0500000000015200000000\", \"6aab65510053ab65\", 1, 1603081205, \"353ca9619ccb0210ae18b24d0e57efa7abf8e58fa6f7102738e51e8e72c9f0c4\"],\n\t[\"c80abebd042cfec3f5c1958ee6970d2b4586e0abec8305e1d99eb9ee69ecc6c2cbd76374380000000007ac53006300ac510acee933b44817db79320df8094af039fd82111c7726da3b33269d3820123694d849ee5001000000056a65ab526562699bea8530dc916f5d61f0babea709dac578774e8a4dcd9c640ec3aceb6cb2443f24f302000000020063ea780e9e57d1e4245c1e5df19b4582f1bf704049c5654f426d783069bcc039f2d8fa659f030000000851ab53635200006a8d00de0b03654e8500000000000463ab635178ebbb0400000000055100636aab239f1d030000000006ab006300536500000000\", \"6565ac515100\", 3, 1460851377, \"b35bb1b72d02fab866ed6bbbea9726ab32d968d33a776686df3ac16aa445871e\"],\n\t[\"0337b2d5043eb6949a76d6632b8bb393efc7fe26130d7409ef248576708e2d7f9d0ced9d3102000000075352636a5163007034384dfa200f52160690fea6ce6c82a475c0ef1caf5c9e5a39f8f9ddc1c8297a5aa0eb02000000026a51ffffffff38e536298799631550f793357795d432fb2d4231f4effa183c4e2f61a816bcf0030000000463ac5300706f1cd3454344e521fde05b59b96e875c8295294da5d81d6cc7efcfe8128f150aa54d6503000000008f4a98c704c1561600000000000072cfa6000000000000e43def01000000000100cf31cc0500000000066365526a6500cbaa8e2e\", \"\", 3, 2029506437, \"7615b4a7b3be865633a31e346bc3db0bcc410502c8358a65b8127089d81b01f8\"],\n\t[\"59f6cffd034733f4616a20fe19ea6aaf6abddb30b408a3a6bd86cd343ab6fe90dc58300cc90200000000ffffffffc835430a04c3882066abe7deeb0fa1fdaef035d3233460c67d9eabdb05e95e5a02000000080065ac535353ab00ffffffff4b9a043e89ad1b4a129c8777b0e8d87a014a0ab6a3d03e131c27337bbdcb43b402000000066a5100abac6ad9e9bf62014bb118010000000001526cbe484f\", \"ab526352ab65\", 0, 2103515652, \"4f2ccf981598639bec57f885b4c3d8ea8db445ea6e61cfd45789c69374862e5e\"],\n\t[\"cbc79b10020b15d605680a24ee11d8098ad94ae5203cb6b0589e432832e20c27b72a926af20300000006ab65516a53acbb854f3146e55c508ece25fa3d99dbfde641a58ed88c051a8a51f3dacdffb1afb827814b02000000026352c43e6ef30302410a020000000000ff4bd90100000000065100ab63000008aa8e0400000000095265526565ac5365abc52c8a77\", \"53526aac0051\", 0, 202662340, \"984efe0d8d12e43827b9e4b27e97b3777ece930fd1f589d616c6f9b71dab710e\"],\n\t[\"7c07419202fa756d29288c57b5c2b83f3c847a807f4a9a651a3f6cd6c46034ae0aa3a7446b0200000004ab6a6365ffffffff9da83cf4219bb96c76f2d77d5df31c1411a421171d9b59ec02e5c1218f29935403000000008c13879002f8b1ac0400000000086a63536a636553653c584f02000000000000000000\", \"abac53ab656363\", 1, -1038419525, \"4a74f365a161bc6c9bddd249cbd70f5dadbe3de70ef4bd745dcb6ee1cd299fbd\"],\n\t[\"351cbb57021346e076d2a2889d491e9bfa28c54388c91b46ee8695874ad9aa576f1241874d0200000008ab6563525300516affffffffe13e61b8880b8cd52be4a59e00f9723a4722ea58013ec579f5b3693b9e115b1100000000096363abac5252635351ffffffff027fee02040000000008ab6a5200ab006a65b85f130200000000086a52630053ab52ab00000000\", \"ab6aab65\", 1, 586415826, \"08bbb746a596991ab7f53a76e19acad087f19cf3e1db54054aab403c43682d09\"],\n\t[\"a8252ea903f1e8ff953adb16c1d1455a5036222c6ea98207fc21818f0ece2e1fac310f9a0100000000095163ac635363ac0000be6619e9fffcde50a0413078821283ce3340b3993ad00b59950bae7a9f931a9b0a3a035f010000000463005300b8b0583fbd6049a1715e7adacf770162811989f2be20af33f5f60f26eba653dc26b024a00000000006525351636552ffffffff046d2acc030000000002636a9a2d430500000000080065005165ab53abecf63204000000000052b9ed050000000008acacac53ab65656500000000\", \"65ab53635253636a51\", 2, 1442639059, \"8ca11838775822f9a5beee57bdb352f4ee548f122de4a5ca61c21b01a1d50325\"],\n\t[\"2f1a425c0471a5239068c4f38f9df135b1d24bf52d730d4461144b97ea637504495aec360801000000055300515365c71801dd1f49f376dd134a9f523e0b4ae611a4bb122d8b26de66d95203f181d09037974300000000025152ffffffff9bdcea7bc72b6e5262e242c94851e3a5bf8f314b3e5de0e389fc9e5b3eadac030000000009525265655151005153ffffffffdbb53ce99b5a2320a4e6e2d13b01e88ed885a0957d222e508e9ec8e4f83496cb0200000007635200abac63ac04c96237020cc5490100000000080000516a51ac6553074a360200000000025152225520ca\", \"6551ab65ac65516a\", 1, -489869549, \"9bc5bb772c553831fb40abe466074e59a469154679c7dee042b8ea3001c20393\"],\n\t[\"ef3acfd4024defb48def411b8f8ba2dc408dc9ee97a4e8bde4d6cb8e10280f29c98a6e8e9103000000035100513d5389e3d67e075469dfd9f204a7d16175653a149bd7851619610d7ca6eece85a516b2df0300000005516aac6552ca678bdf02f477f003000000000057e45b0300000000055252525252af35c20a\", \"5165ac53ab\", 1, -1900839569, \"78eb6b24365ac1edc386aa4ffd15772f601059581c8776c34f92f8a7763c9ccf\"],\n\t[\"ff4468dc0108475fc8d4959a9562879ce4ab4867a419664bf6e065f17ae25043e6016c70480100000000ffffffff02133c6f0400000000000bd0a8020000000004006a520035afa4f6\", \"51ac65ab\", 0, -537664660, \"f6da59b9deac63e83728850ac791de61f5dfcaeed384ebcbb20e44afcd8c8910\"],\n\t[\"4e8594d803b1d0a26911a2bcdd46d7cbc987b7095a763885b1a97ca9cbb747d32c5ab9aa91030000000353ac53a0cc4b215e07f1d648b6eeb5cdbe9fa32b07400aa773b9696f582cebfd9930ade067b2b200000000060065abab6500fc99833216b8e27a02defd9be47fafae4e4a97f52a9d2a210d08148d2a4e5d02730bcd460100000004516351ac37ce3ae1033baa55040000000006006a636a63acc63c990400000000025265eb1919030000000005656a6a516a00000000\", \"\", 1, -75217178, \"04c5ee48514cd033b82a28e336c4d051074f477ef2675ce0ce4bafe565ee9049\"],\n\t[\"a88830a7023f13ed19ab14fd757358eb6af10d6520f9a54923a6d613ac4f2c11e249cda8aa030000000851630065abababacffffffff8f5fe0bc04a33504c4b47e3991d25118947a0261a9fa520356731eeabd561dd3020000000363ababffffffff038404bd010000000008ab5153516aab6a63d33a5601000000000263004642dc020000000009655152acac636352004be6f3af\", \"5253536565006aab6a\", 0, 1174417836, \"2e42ead953c9f4f81b72c27557e6dc7d48c37ff2f5c46c1dbe9778fb0d79f5b2\"],\n\t[\"44e1a2b4010762af23d2027864c784e34ef322b6e24c70308a28c8f2157d90d17b99cd94a401000000085163656565006300ffffffff0198233d020000000002000000000000\", \"52525153656365\", 0, 1119696980, \"d9096de94d70c6337da6202e6e588166f31bff5d51bb5adc9468594559d65695\"],\n\t[\"44ca65b901259245abd50a745037b17eb51d9ce1f41aa7056b4888285f48c6f26cb97b7a25020000000552636363abffffffff047820350400000000040053acab14f3e603000000000652635100ab630ce66c03000000000001bdc704000000000765650065ac51ac3e886381\", \"51\", 0, -263340864, \"ed5622ac642d11f90e68c0feea6a2fe36d880ecae6b8c0d89c4ea4b3d162bd90\"],\n\t[\"cfa147d2017fe84122122b4dda2f0d6318e59e60a7207a2d00737b5d89694d480a2c26324b0000000006006351526552ffffffff0456b5b804000000000800516aab525363ab166633000000000004655363ab254c0e02000000000952ab6a6a00ab525151097c1b020000000009656a52ac6300530065ad0d6e50\", \"6a535165ac6a536500\", 0, -574683184, \"f926d4036eac7f019a2b0b65356c4ee2fe50e089dd7a70f1843a9f7bc6997b35\"],\n\t[\"91c5d5f6022fea6f230cc4ae446ce040d8313071c5ac1749c82982cc1988c94cb1738aa48503000000016a19e204f30cb45dd29e68ff4ae160da037e5fc93538e21a11b92d9dd51cf0b5efacba4dd70000000005656a6aac51ffffffff03db126905000000000953006a53ab6563636a36a273030000000006656a52656552b03ede00000000000352516500000000\", \"530052526a00\", 1, 1437328441, \"255c125b60ee85f4718b2972174c83588ee214958c3627f51f13b5fb56c8c317\"],\n\t[\"03f20dc202c886907b607e278731ebc5d7373c348c8c66cac167560f19b341b782dfb634cb03000000076a51ac6aab63abea3e8de7adb9f599c9caba95aa3fa852e947fc88ed97ee50e0a0ec0d14d164f44c0115c10100000004ab5153516fdd679e0414edbd000000000005ac636a53512021f2040000000007006a0051536a52c73db2050000000005525265ac5369046e000000000003ab006a1ef7bd1e\", \"52656a\", 0, 1360223035, \"5a0a05e32ce4cd0558aabd5d79cd5fcbffa95c07137506e875a9afcba4bef5a2\"],\n\t[\"d9611140036881b61e01627078512bc3378386e1d4761f959d480fdb9d9710bebddba2079d020000000763536aab5153ab819271b41e228f5b04daa1d4e72c8e1955230accd790640b81783cfc165116a9f535a74c000000000163ffffffffa2e7bb9a28e810624c251ff5ba6b0f07a356ac082048cf9f39ec036bba3d431a02000000076a000000ac65acffffffff01678a820000000000085363515153ac635100000000\", \"535353\", 2, -82213851, \"52b9e0778206af68998cbc4ebdaad5a9469e04d0a0a6cef251abfdbb74e2f031\"],\n\t[\"98b3a0bf034233afdcf0df9d46ac65be84ef839e58ee9fa59f32daaa7d684b6bdac30081c60200000007636351acabababffffffffc71cf82ded4d1593e5825618dc1d5752ae30560ecfaa07f192731d68ea768d0f0100000006650052636563f3a2888deb5ddd161430177ce298242c1a86844619bc60ca2590d98243b5385bc52a5b8f00000000095365acacab520052ac50d4722801c3b8a60300000000035165517e563b65\", \"51\", 1, -168940690, \"b6b684e2d2ecec8a8dce4ed3fc1147f8b2e45732444222aa8f52d860c2a27a9d\"],\n\t[\"97be4f7702dc20b087a1fdd533c7de762a3f2867a8f439bddf0dcec9a374dfd0276f9c55cc0300000000cdfb1dbe6582499569127bda6ca4aaff02c132dc73e15dcd91d73da77e92a32a13d1a0ba0200000002ab51ffffffff048cfbe202000000000900516351515363ac535128ce0100000000076aac5365ab6aabc84e8302000000000863536a53ab6a6552f051230500000000066aac535153510848d813\", \"ac51\", 0, 229541474, \"e5da9a416ea883be1f8b8b2d178463633f19de3fa82ae25d44ffb531e35bdbc8\"],\n\t[\"085b6e04040b5bff81e29b646f0ed4a45e05890a8d32780c49d09643e69cdccb5bd81357670100000001abffffffffa5c981fe758307648e783217e3b4349e31a557602225e237f62b636ec26df1a80300000004650052ab4792e1da2930cc90822a8d2a0a91ea343317bce5356b6aa8aae6c3956076aa33a5351a9c0300000004abac5265e27ddbcd472a2f13325cc6be40049d53f3e266ac082172f17f6df817db1936d9ff48c02b000000000152ffffffff021aa7670500000000085353635163ab51ac14d584000000000001aca4d136cc\", \"6a525300536352536a\", 0, -1398925877, \"41ecca1e8152ec55074f4c39f8f2a7204dda48e9ec1e7f99d5e7e4044d159d43\"],\n\t[\"eec32fff03c6a18b12cd7b60b7bdc2dd74a08977e53fdd756000af221228fe736bd9c42d870100000007005353ac515265ffffffff037929791a188e9980e8b9cc154ad1b0d05fb322932501698195ab5b219488fc02000000070063510065ab6a0bfc176aa7e84f771ea3d45a6b9c24887ceea715a0ff10ede63db8f089e97d927075b4f1000000000551abab63abffffffff02eb933c000000000000262c420000000000036563632549c2b6\", \"6352\", 2, 1480445874, \"ff8a4016dfdd918f53a45d3a1f62b12c407cd147d68ca5c92b7520e12c353ff5\"],\n\t[\"98ea7eac0313d9fb03573fb2b8e718180c70ce647bebcf49b97a8403837a2556cb8c9377f30000000004ac53ac65ffffffff8caac77a5e52f0d8213ef6ce998bedbb50cfdf108954771031c0e0cd2a78423900000000010066e99a44937ebb37015be3693761078ad5c73aa73ec623ac7300b45375cc8eef36087eb80000000007515352acac5100ffffffff0114a51b02000000000000000000\", \"6aacab\", 0, 243527074, \"bad77967f98941af4dd52a8517d5ad1e32307c0d511e15461e86465e1b8b5273\"],\n\t[\"3ab70f4604e8fc7f9de395ec3e4c3de0d560212e84a63f8d75333b604237aa52a10da17196000000000763526a6553ac63a25de6fd66563d71471716fe59087be0dde98e969e2b359282cf11f82f14b00f1c0ac70f02000000050052516aacdffed6bb6889a13e46956f4b8af20752f10185838fd4654e3191bf49579c961f5597c36c0100000005ac636363abc3a1785bae5b8a1b4be5d0cbfadc240b4f7acaa7dfed6a66e852835df5eb9ac3c553766801000000036a65630733b7530218569602000000000952006a6a6a51acab52777f06030000000007ac0063530052abc08267c9\", \"000000536aac0000\", 1, 1919096509, \"df1c87cf3ba70e754d19618a39fdbd2970def0c1bfc4576260cba5f025b87532\"],\n\t[\"bdb6b4d704af0b7234ced671c04ba57421aba7ead0a117d925d7ebd6ca078ec6e7b93eea6600000000026565ffffffff3270f5ad8f46495d69b9d71d4ab0238cbf86cc4908927fbb70a71fa3043108e6010000000700516a65655152ffffffff6085a0fdc03ae8567d0562c584e8bfe13a1bd1094c518690ebcb2b7c6ce5f04502000000095251530052536a53aba576a37f2c516aad9911f687fe83d0ae7983686b6269b4dd54701cb5ce9ec91f0e6828390300000000ffffffff04cc76cc020000000002656a01ffb702000000000253ab534610040000000009acab006565516a00521f55f5040000000000389dfee9\", \"6a525165\", 0, 1336204763, \"71c294523c48fd7747eebefbf3ca06e25db7b36bff6d95b41c522fecb264a919\"],\n\t[\"54258edd017d22b274fbf0317555aaf11318affef5a5f0ae45a43d9ca4aa652c6e85f8a040010000000953ac65ab5251656500ffffffff03321d450000000000085265526a51526a529ede8b030000000003635151ce6065020000000001534c56ec1b\", \"acac\", 0, 2094130012, \"110d90fea9470dfe6c5048f45c3af5e8cc0cb77dd58fd13d338268e1c24b1ccc\"],\n\t[\"ce0d322e04f0ffc7774218b251530a7b64ebefca55c90db3d0624c0ff4b3f03f918e8cf6f60300000003656500ffffffff9cce943872da8d8af29022d0b6321af5fefc004a281d07b598b95f6dcc07b1830200000007abab515351acab8d926410e69d76b7e584aad1470a97b14b9c879c8b43f9a9238e52a2c2fefc2001c56af8010000000400ab5253cd2cd1fe192ce3a93b5478af82fa250c27064df82ba416dfb0debf4f0eb307a746b6928901000000096500abacac6a0063514214524502947efc0200000000035251652c40340100000000096a6aab52000052656a5231c54c\", \"51\", 2, -2090320538, \"0322ca570446869ec7ec6ad66d9838cff95405002d474c0d3c17708c7ee039c6\"],\n\t[\"47ac54940313430712ebb32004679d3a512242c2b33d549bf5bbc8420ec1fd0850ed50eb6d0300000009536aac6a65acacab51ffffffffb843e44266ce2462f92e6bff54316661048c8c17ecb092cb493b39bfca9117850000000001519ab348c05e74ebc3f67423724a3371dd99e3bceb4f098f8860148f48ad70000313c4c223000000000653006565656512c2d8dc033f3c97010000000002636aa993aa010000000006526365ab526ab7cf560300000000076a0065ac6a526500000000\", \"005352535300ab6a\", 2, 59531991, \"8b5b3d00d9c658f062fe6c5298e54b1fe4ed3a3eab2a87af4f3119edc47b1691\"],\n\t[\"233cd90b043916fc41eb870c64543f0111fb31f3c486dc72457689dea58f75c16ae59e9eb2000000000500536a6a6affffffff9ae30de76be7cd57fb81220fce78d74a13b2dbcad4d023f3cadb3c9a0e45a3ce000000000965ac6353ac5165515130834512dfb293f87cb1879d8d1b20ebad9d7d3d5c3e399a291ce86a3b4d30e4e32368a9020000000453005165ffffffff26d84ae93eb58c81158c9b3c3cbc24a84614d731094f38d0eea8686dec02824d0300000005636a65abacf02c784001a0bd5d03000000000900655351ab65ac516a416ef503\", \"\", 1, -295106477, \"b79f31c289e95d9dadec48ebf88e27c1d920661e50d090e422957f90ff94cb6e\"],\n\t[\"9200e26b03ff36bc4bf908143de5f97d4d02358db642bd5a8541e6ff709c420d1482d471b70000000008abab65536a636553ffffffff61ba6d15f5453b5079fb494af4c48de713a0c3e7f6454d7450074a2a80cb6d880300000007ac6a00ab5165515dfb7574fbce822892c2acb5d978188b1d65f969e4fe874b08db4c791d176113272a5cc10100000000ffffffff0420958d000000000009ac63516a0063516353dd885505000000000465ac00007b79e901000000000066d8bf010000000005525252006a00000000\", \"ac5152\", 0, 2089531339, \"89ec7fab7cfe7d8d7d96956613c49dc48bf295269cfb4ea44f7333d88c170e62\"],\n\t[\"45f335ba01ce2073a8b0273884eb5b48f56df474fc3dff310d9706a8ac7202cf5ac188272103000000025363ffffffff049d859502000000000365ab6a8e98b1030000000002ac51f3a80603000000000752535151ac00000306e30300000000020051b58b2b3a\", \"\", 0, 1899564574, \"78e01310a228f645c23a2ad0acbb8d91cedff4ecdf7ca997662c6031eb702b11\"],\n\t[\"d8f652a6043b4faeada05e14b81756cd6920cfcf332e97f4086961d49232ad6ffb6bc6c097000000000453526563ffffffff1ea4d60e5e91193fbbc1a476c8785a79a4c11ec5e5d6c9950c668ceacfe07a15020000000352ab51fffffffffe029a374595c4edd382875a8dd3f20b9820abb3e93f877b622598d11d0b09e503000000095351000052ac515152ffffffff9d65fea491b979699ceb13caf2479cd42a354bd674ded3925e760758e85a756803000000046365acabffffffff0169001d00000000000651636a65656300000000\", \"ab0063630000ac\", 3, 1050965951, \"4cc85cbc2863ee7dbce15490d8ca2c5ded61998257b9eeaff968fe38e9f009ae\"],\n\t[\"718662be026e1dcf672869ac658fd0c87d6835cfbb34bd854c44e577d5708a7faecda96e260300000004526a636a489493073353b678549adc7640281b9cbcb225037f84007c57e55b874366bb7b0fa03bdc00000000095165ababac65ac00008ab7f2a802eaa53d000000000007acac516aac526ae92f380100000000056aac00536500000000\", \"ab00\", 1, 43296088, \"2d642ceee910abff0af2116af75b2e117ffb7469b2f19ad8fef08f558416d8f7\"],\n\t[\"94083c840288d40a6983faca876d452f7c52a07de9268ad892e70a81e150d602a773c175ad03000000007ec3637d7e1103e2e7e0c61896cbbf8d7e205b2ecc93dd0d6d7527d39cdbf6d335789f660300000000ffffffff019e1f7b03000000000800ac0051acac0053539cb363\", \"\", 1, -183614058, \"a17b66d6bb427f42653d08207a22b02353dd19ccf2c7de6a9a3a2bdb7c49c9e7\"],\n\t[\"30e0d4d20493d0cd0e640b757c9c47a823120e012b3b64c9c1890f9a087ae4f2001ca22a61010000000152f8f05468303b8fcfaad1fb60534a08fe90daa79bff51675472528ebe1438b6f60e7f60c10100000009526aab6551ac510053ffffffffaaab73957ea2133e32329795221ed44548a0d3a54d1cf9c96827e7cffd1706df0200000009ab00526a005265526affffffffd19a6fe54352015bf170119742821696f64083b5f14fb5c7d1b5a721a3d7786801000000085265abababac53abffffffff020f39bd030000000004ab6aac52049f6c050000000004ab52516aba5b4c60\", \"6a6365516a6a655253\", 0, -624256405, \"8e221a6c4bf81ca0d8a0464562674dcd14a76a32a4b7baf99450dd9195d411e6\"],\n\t[\"f9c69d940276ec00f65f9fe08120fc89385d7350388508fd80f4a6ba2b5d4597a9e21c884f010000000663ab63ababab15473ae6d82c744c07fc876ecd53bd0f3018b2dbedad77d757d5bdf3811b23d294e8c0170000000001abafababe00157ede2050000000006ac6a5263635300000000\", \"ab53\", 1, 606547088, \"714d8b14699835b26b2f94c58b6ea4c53da3f7adf0c62ea9966b1e1758272c47\"],\n\t[\"5c0ac112032d6885b7a9071d3c5f493aa16c610a4a57228b2491258c38de8302014276e8be030000000300ab6a17468315215262ad5c7393bb5e0c5a6429fd1911f78f6f72dafbbbb78f3149a5073e24740300000003ac5100ffffffff33c7a14a062bdea1be3c9c8e973f54ade53fe4a69dcb5ab019df5f3345050be00100000008ac63655163526aab428defc0033ec36203000000000765516365536a00ae55b2000000000002ab53f4c0080400000000095265516a536563536a00000000\", \"6a005151006a\", 2, 272749594, \"91082410630337a5d89ff19145097090f25d4a20bdd657b4b953927b2f62c73b\"],\n\t[\"e3683329026720010b08d4bec0faa244f159ae10aa582252dd0f3f80046a4e145207d54d31000000000852acac52656aacac3aaf2a5017438ad6adfa3f9d05f53ebed9ceb1b10d809d507bcf75e0604254a8259fc29c020000000653526552ab51f926e52c04b44918030000000000f7679c0100000000090000525152005365539e3f48050000000009516500ab635363ab008396c905000000000253650591024f\", \"6a6365\", 0, 908746924, \"458aec3b5089a585b6bad9f99fd37a2b443dc5a2eefac2b7e8c5b06705efc9db\"],\n\t[\"48c4afb204204209e1df6805f0697edaa42c0450bbbd767941fe125b9bc40614d63d757e2203000000066a5363005152dc8b6a605a6d1088e631af3c94b8164e36e61445e2c60130292d81dabd30d15f54b355a802000000036a6353ffffffff1d05dcec4f3dedcfd02c042ce5d230587ee92cb22b52b1e59863f3717df2362f0300000005536552ac52ffffffffd4d71c4f0a7d53ba47bb0289ca79b1e33d4c569c1e951dd611fc9c9c1ca8bc6c030000000865536a65ab51abacffffffff042f9aa905000000000753655153656351ab93d8010000000002655337440e0300000000005d4c690000000000015278587acb\", \"ab006565526a51\", 0, 1502064227, \"bbed77ff0f808aa8abd946ba9e7ec1ddb003a969fa223dee0af779643cb841a9\"],\n\t[\"00b20fd104dd59705b84d67441019fa26c4c3dec5fd3b50eca1aa549e750ef9ddb774dcabe000000000651ac656aac65ffffffff52d4246f2db568fc9eea143e4d260c698a319f0d0670f84c9c83341204fde48b0200000000ffffffffb8aeabb85d3bcbc67b132f1fd815b451ea12dcf7fc169c1bc2e2cf433eb6777a03000000086a51ac6aab6563acd510d209f413da2cf036a31b0def1e4dcd8115abf2e511afbcccb5ddf41d9702f28c52900100000006ac52ab6a0065ffffffff039c8276000000000008ab53655200656a52401561010000000003acab0082b7160100000000035100ab00000000\", \"535265\", 1, -947367579, \"3212c6d6dd8d9d3b2ac959dec11f4638ccde9be6ed5d36955769294e23343da0\"],\n\t[\"455131860220abbaa72015519090a666faf137a0febce7edd49da1eada41feab1505a0028b02000000036365ab453ead4225724eb69beb590f2ec56a7693a608871e0ab0c34f5e96157f90e0a96148f3c502000000085251ab51535163acffffffff022d1249040000000009abac00acac6565630088b310040000000000e3920e59\", \"5152ab6a52ac5152\", 0, 294375737, \"c40fd7dfa72321ac79516502500478d09a35cc22cc264d652c7d18b14400b739\"],\n\t[\"624d28cb02c8747915e9af2b13c79b417eb34d2fa2a73547897770ace08c6dd9de528848d3030000000651ab63abab533c69d3f9b75b6ef8ed2df50c2210fd0bf4e889c42477d58682f711cbaece1a626194bb85030000000765acab53ac5353ffffffff018cc280040000000009abacabac52636352ac6859409e\", \"ac51ac\", 1, 1005144875, \"919144aada50db8675b7f9a6849c9d263b86450570293a03c245bd1e3095e292\"],\n\t[\"8f28471d02f7d41b2e70e9b4c804f2d90d23fb24d53426fa746bcdcfffea864925bdeabe3e0200000001acffffffff76d1d35d04db0e64d65810c808fe40168f8d1f2143902a1cc551034fd193be0e0000000001acffffffff048a5565000000000005005151516afafb610400000000045263ac53648bb30500000000086363516a6a5165513245de01000000000000000000\", \"6a0053510053\", 1, -1525137460, \"305fc8ff5dc04ebd9b6448b03c9a3d945a11567206c8d5214666b30ec6d0d6cc\"],\n\t[\"10ec50d7046b8b40e4222a3c6449490ebe41513aad2eca7848284a08f3069f3352c2a9954f0000000009526aac656352acac53ffffffff0d979f236155aa972472d43ee6f8ce22a2d052c740f10b59211454ff22cb7fd00200000007acacacab63ab53ffffffffbbf97ebde8969b35725b2e240092a986a2cbfd58de48c4475fe077bdd493a20c010000000663ab5365ababffffffff4600722d33b8dba300d3ad037bcfc6038b1db8abfe8008a15a1de2da2264007302000000035351ac6dbdafaf020d0ccf04000000000663ab6a51ab6ae06e5e0200000000036aabab00000000\", \"\", 0, -1658960232, \"2420dd722e229eccafae8508e7b8d75c6920bfdb3b5bac7cb8e23419480637c2\"],\n\t[\"fef98b7101bf99277b08a6eff17d08f3fcb862e20e13138a77d66fba55d54f26304143e5360100000006515365abab00ffffffff04265965030000000004655252ace2c775010000000001002b23b4040000000007516a5153ab53ac456a7a00000000000753ab525251acacba521291\", \"526aacacab00abab53\", 0, -1614097109, \"4370d05c07e231d6515c7e454a4e401000b99329d22ed7def323976fa1d2eeb5\"],\n\t[\"34a2b8830253661b373b519546552a2c3bff7414ea0060df183b1052683d78d8f54e842442000000000152ffffffffd961a8e34cf374151058dfcddc86509b33832bc57267c63489f69ff01199697c0300000002abacba856cfb01b17c2f050000000008515365ac53ab000000000000\", \"5263ab656a\", 1, -2104480987, \"2f9993e0a84a6ca560d6d1cc2b63ffe7fd71236d9cfe7d809491cef62bbfad84\"],\n\t[\"43559290038f32fda86580dd8a4bc4422db88dd22a626b8bd4f10f1c9dd325c8dc49bf479f01000000026351ffffffff401339530e1ed3ffe996578a17c3ec9d6fccb0723dd63e7b3f39e2c44b976b7b0300000006ab6a65656a51ffffffff6fb9ba041c96b886482009f56c09c22e7b0d33091f2ac5418d05708951816ce7000000000551ac525100ffffffff020921e40500000000035365533986f40500000000016a00000000\", \"52ac51\", 0, 1769771809, \"02040283ef2291d8e1f79bb71bdabe7c1546c40d7ed615c375643000a8b9600d\"],\n\t[\"6878a6bd02e7e1c8082d5e3ee1b746cfebfac9e8b97e61caa9e0759d8a8ecb3743e36a30de0100000002ab532a911b0f12b73e0071f5d50b6bdaf783f4b9a6ce90ec0cad9eecca27d5abae188241ddec0200000001651c7758d803f7457b0500000000036551515f4e90000000000001007022080200000000035365acc86b6946\", \"6351ab\", 0, -1929374995, \"f24be499c58295f3a07f5f1c6e5084496ae160450bd61fdb2934e615289448f1\"],\n\t[\"35b6fc06047ebad04783a5167ab5fc9878a00c4eb5e7d70ef297c33d5abd5137a2dea9912402000000036aacacffffffff21dc291763419a584bdb3ed4f6f8c60b218aaa5b99784e4ba8acfec04993e50c03000000046a00ac6affffffff69e04d77e4b662a82db71a68dd72ef0af48ca5bebdcb40f5edf0caf591bb41020200000000b5db78a16d93f5f24d7d932f93a29bb4b784febd0cbb1943f90216dc80bba15a0567684b000000000853ab52ab5100006a1be2208a02f6bdc103000000000265ab8550ea04000000000365636a00000000\", \"\", 0, -1114114836, \"1c8655969b241e717b841526f87e6bd68b2329905ba3fc9e9f72526c0b3ea20c\"],\n\t[\"bebb90c302bf91fd4501d33555a5fc5f2e1be281d9b7743680979b65c3c919108cc2f517510100000003abab00ffffffff969c30053f1276550532d0aa33cfe80ca63758cd215b740448a9c08a84826f3303000000056565ab5153ffffffff04bf6f2a04000000000565ab5265ab903e760100000000026a6a7103fa020000000006526553525365b05b2c000000000006ab000000535300000000\", \"51510053ab63635153\", 1, 1081291172, \"94338cd47a4639be30a71e21a7103cee4c99ef7297e0edd56aaf57a068b004de\"],\n\t[\"af48319f031b4eeb4319714a285f44244f283cbff30dcb9275b06f2348ccd0d7f015b54f8500000000066363ac65ac6affffffff2560a9817ebbc738ad01d0c9b9cf657b8f9179b1a7f073eb0b67517409d108180200000005ac6365ab52ffffffff0bdd67cd4ecae96249a2e2a96db1490ee645f042fd9d5579de945e22b799f4d003000000086552ab515153ab00cf187c8202e51abf0300000000066552006a00abadf37d000000000004ac6a535100000000\", \"63ab65\", 1, -1855554446, \"60caf46a7625f303c04706cec515a44b68ec319ee92273acb566cca4f66861c1\"],\n\t[\"f35befbc03faf8c25cc4bc0b92f6239f477e663b44b83065c9cb7cf231243032cf367ce3130000000005ab65526a517c4c334149a9c9edc39e29276a4b3ffbbab337de7908ea6f88af331228bd90086a6900ba020000000151279d19950d2fe81979b72ce3a33c6d82ebb92f9a2e164b6471ac857f3bbd3c0ea213b542010000000953ab51635363520065052657c20300a9ba04000000000452636a6a0516ea020000000008535253656365ababcfdd3f01000000000865ac516aac00530000000000\", \"\", 2, -99793521, \"c834a5485e68dc13edb6c79948784712122440d7fa5bbaa5cd2fc3d4dac8185d\"],\n\t[\"d3da18520216601acf885414538ce2fb4d910997eeb91582cac42eb6982c9381589587794f0300000000fffffffff1b1c9880356852e10cf41c02e928748dd8fae2e988be4e1c4cb32d0bfaea6f7000000000465ab6aabffffffff02fb0d69050000000002ababeda8580500000000085163526565ac52522b913c95\", \"ac\", 1, -1247973017, \"99b32b5679d91e0f9cdd6737afeb07459806e5acd7630c6a3b9ab5d550d0c003\"],\n\t[\"8218eb740229c695c252e3630fc6257c42624f974bc856b7af8208df643a6c520ef681bfd00000000002510066f30f270a09b2b420e274c14d07430008e7886ec621ba45665057120afce58befca96010300000004525153ab84c380a9015d96100000000000076a5300acac526500000000\", \"ac005263\", 0, -1855679695, \"5071f8acf96aea41c7518bd1b5b6bbe16258b529df0c03f9e374b83c66b742c6\"],\n\t[\"1123e7010240310013c74e5def60d8e14dd67aedff5a57d07a24abc84d933483431b8cf8ea0300000003530051fc6775ff1a23c627a2e605dd2560e84e27f4208300071e90f4589e762ad9c9fe8d0da95e020000000465655200ffffffff04251598030000000004ab65ab639d28d90400000000096563636aacac525153474df801000000000851525165ac51006a75e23b040000000000e5bd3a4a\", \"6363636565\", 0, -467124448, \"9cb0dd04e9fe287b112e94a1647590d27e8b164ca13c4fe70c610fd13f82c2fd\"],\n\t[\"fd92fe1003083c5179f97e77bf7d71975788138147adbdb283306802e261c0aee080fa22630200000000860c643ba9a1816b9badf36077b4554d11720e284e395a1121bc45279e148b2064c65e49020000000651ab6a53636a2c713088d20f4bc4001264d972cce05b9fe004dc33376ad24d0d013e417b91a5f1b6734e000000000100ffffffff02e3064c0500000000066552006a5165b86e8705000000000665ab65ab53522052eadb\", \"00ab53525265\", 0, 776203277, \"47207b48777727532f62e09afcd4104ea6687e723c7657c30504fa2081331cc8\"],\n\t[\"d1b6a703038f14d41fcc5cc45455faa135a5322be4bf0f5cbcd526578fc270a236cacb853f0200000001abffffffff135aeff902fa38f202ccf5bd34437ff89c9dc57a028b62447a0a38579383e8ef0000000000ffffffffadf398d2c818d0b90bc474f540c3618a4a643482eeab73d36101987e2ec0335900000000004bd3323504e69fc10000000000055151535251790ada02000000000563ab6aab521337a704000000000963ac63abacac52656a1e9862010000000007656500ac51ab6a8f4ee672\", \"ab5251656565ac63\", 2, 82008394, \"b8f3d255549909c07588ecba10a02e55a2d6f2206d831af9da1a7dae64cfbc8b\"],\n\t[\"81dadaa7011556683db3fe95262f4fdb20391b7e75b7ffcee51b176af64d83c06f85545d620200000005ab5151ab52ffffffff044805ef0300000000065353516352639702c802000000000900516351515252ab5270db08040000000009ac516aab526553abac4aabc90500000000096365ab0052636a525100000000\", \"6565ab6a5152\", 0, -2126294159, \"ad01ec9d6dbae325ec3a8e1fd98e2d03b1188378210efef093dd8b0b0ef3f19d\"],\n\t[\"3b937e05032b8895d2f4945cb7e3679be2fbd15311e2414f4184706dbfc0558cf7de7b4d000000000001638b91a12668a3c3ce349788c961c26aa893c862f1e630f18d80e7843686b6e1e6fc396310000000000852635353ab65ac51eeb09dd1c9605391258ee6f74b9ae17b5e8c2ef010dc721c5433dcdc6e93a1593e3b6d1700000000085365ac6553526351ffffffff0308b18e04000000000253acb6dd00040000000008536aac5153ac516ab0a88201000000000500ac006500804e3ff2\", \"\", 0, 416167343, \"595a3c02254564634e8085283ec4ea7c23808da97ce9c5da7aecd7b553e7fd7f\"],\n\t[\"a48f27ca047997470da74c8ee086ddad82f36d9c22e790bd6f8603ee6e27ad4d3174ea875403000000095153ac636aab6aacabffffffffefc936294e468d2c9a99e09909ba599978a8c0891ad47dc00ba424761627cef202000000056a51630053ffffffff304cae7ed2d3dbb4f2fbd679da442aed06221ffda9aee460a28ceec5a9399f4e0200000000f5bddf82c9c25fc29c5729274c1ff0b43934303e5f595ce86316fc66ad263b96ca46ab8d0100000003536500d7cf226b0146b00c04000000000200ac5c2014ce\", \"515100636563\", 0, 1991799059, \"9c051a7092fe17fa62b1720bc2c4cb2ffc1527d9fb0b006d2e142bb8fe07bf3c\"],\n\t[\"180cd53101c5074cf0b7f089d139e837fe49932791f73fa2342bd823c6df6a2f72fe6dba1303000000076a6a63ac53acabffffffff03853bc1020000000007ac526a6a6a6a003c4a8903000000000453515163a0fbbd030000000005ab656a5253253d64cf\", \"ac65\", 0, -1548453970, \"4d8efb3b99b9064d2f6be33b194a903ffabb9d0e7baa97a48fcec038072aac06\"],\n\t[\"c21ec8b60376c47e057f2c71caa90269888d0ffd5c46a471649144a920d0b409e56f190b700000000008acac6a526a536365ffffffff5d315d9da8bf643a9ba11299450b1f87272e6030fdb0c8adc04e6c1bfc87de9a0000000000ea43a9a142e5830c96b0ce827663af36b23b0277244658f8f606e95384574b91750b8e940000000007516a63ac0063acffffffff023c61be0400000000055165ab5263313cc8020000000006006a53526551ed8c3d56\", \"6a\", 1, 1160627414, \"a638cc17fd91f4b1e77877e8d82448c84b2a4e100df1373f779de7ad32695112\"],\n\t[\"128cd90f04b66a4cbc78bf48748f6eec0f08d5193ee8d0a6f2e8d3e5f138ed12c2c87d01a301000000085200ab6aac00ab00ffffffff09fc88bb1851e3dfb3d30179c38e15aeb1b39929c7c74f6acd071994ed4806490300000000e7fc5ea12ec56f56c0d758ecf4bb88aa95f3b08176b336db3b9bec2f6e27336dce28adbe030000000400530051fffffffffd6ff1adcf1fbe0d883451ee46904f1b7e8820243d395559b2d4ee8190a6e891000000000080fb1ae702f85b400000000000035200ab8d9651010000000006ab6a52536aab00000000\", \"ab\", 1, 1667598199, \"c10ccc9db8a92d7d4b133a2980782dab9d9d1d633d0dde9f9612ada57771fd89\"],\n\t[\"da9695a403493d3511c10e1fe1286f954db0366b7667c91ef18ae4578056c1bf752114ac5901000000035351519788d91dd1f9c62dc005d80ea54eb13f7131ca5aace3d5d29f9b58ccc5fbc9a27e779950010000000453ac6a00ffffffffe2556ff29ebe83eb42a32c7a8d93bc598043578f491b5935805a33608538845a030000000252ab65d21b3b018f26c4030000000006acab51535352e1cbcb10\", \"006565ab52\", 2, -1550927794, \"0ca673a1ee66f9625ceb9ab278ebef772c113c188112b02824570c17fdf48194\"],\n\t[\"b240517501334021240427adb0b413433641555424f6d24647211e3e6bfbb22a8045cbda2f000000000071bac8630112717802000000000000000000\", \"6a5165abac52656551\", 0, 1790414254, \"2c8be597620d95abd88f9c1cf4967c1ae3ca2309f3afec8928058c9598660e9e\"],\n\t[\"96bac43903044a199b4b3efeeec5d196ee23fb05495541fa2cd6fb6405a9432d1723363660010000000151ffffffffe6ce2b66ce1488918a3e880bebb0e750123f007c7bcbac8fcd67ce75cb6fbae80300000000ffffffff9c0955aa07f506455834895c0c56be5a095398f47c62a3d431fe125b161d666a0200000005520000abac7ffdbc540216f2f004000000000165a26dce010000000001ab00000000\", \"5151ab656a656a6a63\", 0, -707123065, \"26b22e18d5d9081fde9631594a4f7c49069ed2e429f3d08caf9d834f685ccab2\"],\n\t[\"b8fd394001ed255f49ad491fecc990b7f38688e9c837ccbc7714ddbbf5404f42524e68c18f0000000007ab6353535363ab081e15ee02706f7d050000000008515200535351526364c7ec040000000005636a53acac9206cbe1\", \"655352ac\", 0, -1251578838, \"8e0697d8cd8a9ccea837fd798cc6c5ed29f6fbd1892ee9bcb6c944772778af19\"],\n\t[\"e42a76740264677829e30ed610864160c7f97232c16528fe5610fc08814b21c34eefcea69d010000000653006a6a0052ffffffff647046cf44f217d040e6a8ff3f295312ab4dd5a0df231c66968ad1c6d8f4428000000000025352ffffffff0199a7f900000000000000000000\", \"655263006a005163\", 1, 1122505713, \"7cda43f1ff9191c646c56a4e29b1a8c6cb3f7b331da6883ef2f0480a515d0861\"],\n\t[\"0f034f32027a8e094119443aa9cfe11737c6d7dda9a52b839bc073dcc0235b847b28e0fab60200000006ac53ac536a63eee63447dfdad80476994b68706e916df1bd9d7cb4f3a4f6b14369de84564bea2e8688bd030000000565636a65acf8434663020b35fe01000000000800abab655163acabb3d6a103000000000353acab345eeda0\", \"526a51ac63ab51\", 1, 66020215, \"4435e62ff6531ac73529aac9cf878a7219e0b6e6cac79af8487c5355d1ad6d43\"],\n\t[\"a2dfa4690214c1ab25331815a5128f143219de51a47abdc7ce2d367e683eeb93960a31af9f010000000363636affffffff8be0628abb1861b078fcc19c236bc4cc726fa49068b88ad170adb2a97862e7460200000004ac655363ffffffff0441f11103000000000153dbab0c000000000009ab53ac5365526aab63abbb95050000000004ab52516a29a029040000000003ac526a00000000\", \"6a52ac63\", 1, -1302210567, \"913060c7454e6c80f5ba3835454b54db2188e37dc4ce72a16b37d11a430b3d23\"],\n\t[\"9dbc591f04521670af83fb3bb591c5d4da99206f5d38e020289f7db95414390dddbbeb56680100000004ac5100acffffffffb6a40b5e29d5e459f8e72d39f800089529f0889006cad3d734011991da8ef09d0100000009526a5100acab536a515fc427436df97cc51dc8497642ffc868857ee245314d28b356bd70adba671bd6071301fc0000000000ffffffff487efde2f620566a9b017b2e6e6d42525e4070f73a602f85c6dfd58304518db30000000005516353006a8d8090180244904a0200000000046a65656ab1e9c203000000000451ab63aba06a5449\", \"\", 0, -1414953913, \"bae189eb3d64aedbc28a6c28f6c0ccbd58472caaf0cf45a5aabae3e031dd1fea\"],\n\t[\"1345fb2c04bb21a35ae33a3f9f295bece34650308a9d8984a989dfe4c977790b0c21ff9a7f0000000006ac52ac6a0053ffffffff7baee9e8717d81d375a43b691e91579be53875350dfe23ba0058ea950029fcb7020000000753ab53ab63ab52ffffffff684b6b3828dfb4c8a92043b49b8cb15dd3a7c98b978da1d314dce5b9570dadd202000000086353ab6a5200ac63d1a8647bf667ceb2eae7ec75569ca249fbfd5d1b582acfbd7e1fcf5886121fca699c011d0100000003ac006affffffff049b1eb00300000000001e46dc0100000000080065ab6a6a630065ca95b40300000000030051520c8499010000000006ab6aac526a6500000000\", \"53526aac636300\", 2, 1809978100, \"cfeaa36790bc398783d4ca45e6354e1ea52ee74e005df7f9ebd10a680e9607bf\"],\n\t[\"7d75dc8f011e5f9f7313ba6aedef8dbe10d0a471aca88bbfc0c4a448ce424a2c5580cda1560300000003ab5152ffffffff01997f8e0200000000096552ac6a65656563530d93bbcc\", \"00656a6563\", 0, 1414485913, \"ec91eda1149f75bffb97612569a78855498c5d5386d473752a2c81454f297fa7\"],\n\t[\"1459179504b69f01c066e8ade5e124c748ae5652566b34ed673eea38568c483a5a4c4836ca0100000008ac5352006563656affffffff5d4e037880ab1975ce95ea378d2874dcd49d5e01e1cdbfae3343a01f383fa35800000000095251ac52ac6aac6500ffffffff7de3ae7d97373b7f2aeb4c55137b5e947b2d5fb325e892530cb589bc4f92abd503000000086563ac53ab520052ffffffffb4db36a32d6e543ef49f4bafde46053cb85b2a6c4f0e19fa0860d9083901a1190300000003ab51531bbcfe5504a6dbda040000000008536a5365abac6500d660c80300000000096565abab6a53536a6a54e84e010000000003acac52df2ccf0500000000025351220c857e\", \"\", 2, 1879181631, \"3aad18a209fab8db44954eb55fd3cc7689b5ec9c77373a4d5f4dae8f7ae58d14\"],\n\t[\"d98b777f04b1b3f4de16b07a05c31d79965579d0edda05600c118908d7cf642c9cd670093f020000000953005351ac65ab5363a268caad6733b7d1718008997f249e1375eb3ab9fe68ab0fe170d8e745ea24f54ce67f9b00000000066500516a5151ffffffff7ef8040dfcc86a0651f5907e8bfd1017c940f51cf8d57e3d3fe78d57e40b1e610200000003535263ffffffff39846cfed4babc098ff465256ba3820c30d710581316afcb67cd31c623b703360300000001acffffffff03d405120100000000056300006a5201a73d050000000004ab636a6a294c8c000000000006ac65536553ac00000000\", \"63525351abac\", 1, 2018694761, \"86970af23c89b72a4f9d6281e46b9ef5220816bed71ebf1ae20df53f38fe16ff\"],\n\t[\"cabb1b06045a895e6dcfc0c1e971e94130c46feace286759f69a16d298c8b0f6fd0afef8f20300000004ac006352ffffffffa299f5edac903072bfb7d29b663c1dd1345c2a33546a508ba5cf17aab911234602000000056a65515365ffffffff89a20dc2ee0524b361231092a070ace03343b162e7162479c96b757739c8394a0300000002abab92ec524daf73fabee63f95c1b79fa8b84e92d0e8bac57295e1d0adc55dc7af5534ebea410200000001534d70e79b04674f6f00000000000600abacab53517d60cc0200000000035265ab96c51d040000000004ac6300ac62a787050000000008006a516563ab63639e2e7ff7\", \"6551ac6351ac\", 3, 1942663262, \"d0c4a780e4e0bc22e2f231e23f01c9d536b09f6e5be51c123d218e906ec518be\"],\n\t[\"8b96d7a30132f6005b5bd33ea82aa325e2bcb441f46f63b5fca159ac7094499f380f6b7e2e00000000076aacabac6300acffffffff0158056700000000000465005100c319e6d0\", \"52006a\", 0, -1100733473, \"fb4bd26a91b5cf225dd3f170eb09bad0eac314bc1e74503cc2a3f376833f183e\"],\n\t[\"112191b7013cfbe18a175eaf09af7a43cbac2c396f3695bbe050e1e5f4250603056d60910e02000000001c8a5bba03738a22010000000005525352656a77a149010000000002510003b52302000000000351ac52722be8e6\", \"65ac6565\", 0, -1847972737, \"8e795aeef18f510d117dfa2b9f4a2bd2e2847a343205276cedd2ba14548fd63f\"],\n\t[\"ce6e1a9e04b4c746318424705ea69517e5e0343357d131ad55d071562d0b6ebfedafd6cb840100000003656553ffffffff67bd2fa78e2f52d9f8900c58b84c27ef9d7679f67a0a6f78645ce61b883fb8de000000000100d699a56b9861d99be2838e8504884af4d30b909b1911639dd0c5ad47c557a0773155d4d303000000046a5151abffffffff9fdb84b77c326921a8266854f7bbd5a71305b54385e747fe41af8a397e78b7fa010000000863acac6a51ab00ac0d2e9b9d049b8173010000000007ac53526a650063ba9b7e010000000008526a00525263acac0ab3fd030000000000ea8a0303000000000200aca61a97b9\", \"\", 1, -1276952681, \"b6ed4a3721be3c3c7305a5128c9d418efa58e419580cec0d83f133a93e3a22c5\"],\n\t[\"a7721d94021652d90c79aaf5022d98219337d50f836382403ed313adb1116ba507ac28b0b0010000000551ac6300ab89e6d64a7aa81fb9595368f04d1b36d7020e7adf5807535c80d015f994cce29554fe869b01000000065353ab636500ffffffff024944c90100000000046300635369df9f01000000000000000000\", \"656a536551ab\", 0, -1740151687, \"935892c6f02948f3b08bcd463b6acb769b02c1912be4450126768b055e8f183a\"],\n\t[\"2f7353dd02e395b0a4d16da0f7472db618857cd3de5b9e2789232952a9b154d249102245fd030000000151617fd88f103280b85b0a198198e438e7cab1a4c92ba58409709997cc7a65a619eb9eec3c0200000003636aabffffffff0397481c0200000000045300636a0dc97803000000000009d389030000000003ac6a53134007bb\", \"0000536552526a\", 0, -1912746174, \"30c4cd4bd6b291f7e9489cc4b4440a083f93a7664ea1f93e77a9597dab8ded9c\"],\n\t[\"7d95473604fd5267d0e1bb8c9b8be06d7e83ff18ad597e7a568a0aa033fa5b4e1e2b6f1007020000000465006a6affffffffaee008503bfc5708bd557c7e78d2eab4878216a9f19daa87555f175490c40aaf000000000263abffffffffabd74f0cff6e7ceb9acc2ee25e65af1abcebb50c08306e6c78fa8171c37613dd010000000552acacababffffffff54a3069393f7930fa1b331cdff0cb945ec21c11d4605d8eedba1d3e094c6ae1f01000000026300ffffffff0182edeb050000000009526353ab5153530065a247e8cd\", \"51516aab00\", 2, -426210430, \"2707ca714af09494bb4cf0794abe33c6cba5f29891d619e76070269d1fa8e690\"],\n\t[\"221d4718023d9ca9fe1af178dbfce02b2b369bf823ea3f43f00891b7fef98e215c06b94fdd000000000951005153ab000051acffffffffb1c7ad1c64b7441bf5e70cd0f6eb4ec96821d67fc4997d9e6dfdceadecd36dde01000000070051536a635153ffffffff04e883cd00000000000851ab536553ab0052bbb2f70400000000002f1b2e03000000000165259fcb00000000000010dbde99\", \"ab\", 1, 665721280, \"4abce77432a86dfe608e7c1646c18b5253a373392ff962e288e3ab96bba1ba1d\"],\n\t[\"6f66c0b3013e6ae6aabae9382a4326df31c981eac169b6bc4f746edaa7fc1f8c796ef4e374000000000665ab6aabac6affffffff0191c8d6030000000002525300000000\", \"6a5352516a635352ab\", 0, -1299629906, \"48411efeb133c6b7fec4e7bdbe613f827093cb06ea0dbcc2ffcfde3a9ac4356c\"],\n\t[\"89e7928c04363cb520eff4465251fd8e41550cbd0d2cdf18c456a0be3d634382abcfd4a2130200000006ac516a6a656355042a796061ed72db52ae47d1607b1ceef6ca6aea3b7eea48e7e02429f382b378c4e51901000000085351ab6352ab5252ffffffff53631cbda79b40183000d6ede011c778f70147dc6fa1aed3395d4ce9f7a8e69701000000096a6553ab52516a52abad0de418d80afe059aab5da73237e0beb60af4ac490c3394c12d66665d1bac13bdf29aa8000000000153f2b59ab6027a33eb040000000007005351ac5100ac88b941030000000003ab0052e1e8a143\", \"63656a\", 0, 1258533326, \"b575a04b0bb56e38bbf26e1a396a76b99fb09db01527651673a073a75f0a7a34\"],\n\t[\"ca356e2004bea08ec2dd2df203dc275765dc3f6073f55c46513a588a7abcc4cbde2ff011c7020000000553525100003aefec4860ef5d6c1c6be93e13bd2d2a40c6fb7361694136a7620b020ecbaca9413bcd2a030000000965ac00536352535100ace4289e00e97caaea741f2b89c1143060011a1f93090dc230bee3f05e34fbd8d8b6c399010000000365526affffffff48fc444238bda7a757cb6a98cb89fb44338829d3e24e46a60a36d4e24ba05d9002000000026a53ffffffff03d70b440200000000056a6a526aac853c97010000000002515335552202000000000351635300000000\", \"0052\", 3, -528192467, \"fc93cc056c70d5e033933d730965f36ad81ef64f1762e57f0bc5506c5b507e24\"],\n\t[\"82d4fa65017958d53e562fac073df233ab154bd0cf6e5a18f57f4badea8200b217975e31030200000004636aab51ac0891a204227cc9050000000006635200655365bfef8802000000000865650051635252acfc2d09050000000006ab65ac51516380195e030000000007ac52525352510063d50572\", \"53\", 0, -713567171, \"e095003ca82af89738c1863f0f5488ec56a96fb81ea7df334f9344fcb1d0cf40\"],\n\t[\"75f6949503e0e47dd70426ef32002d6cdb564a45abedc1575425a18a8828bf385fa8e808e600000000036aabab82f9fd14e9647d7a1b5284e6c55169c8bd228a7ea335987cef0195841e83da45ec28aa2e0300000002516350dc6fe239d150efdb1b51aa288fe85f9b9f741c72956c11d9dcd176889963d699abd63f0000000001ab429a63f502777d20010000000007abac52ac516a53d081d9020000000003acac630c3cc3a8\", \"535152516551510000\", 1, 973814968, \"c6ec1b7cb5c16a1bfd8a3790db227d2acc836300534564252b57bd66acf95092\"],\n\t[\"24f24cd90132b2162f938f1c22d3ca5e7daa83515883f31a61a5177aebf99d7db6bdfc398c010000000163ffffffff01d5562d0100000000016300000000\", \"5265ac5165ac5252ab\", 0, 1055129103, \"5eeb03e03806cd7bfd44bbba69c30f84c2c5120df9e68cd8facc605fcfbc9693\"],\n\t[\"5ff2cac201423064a4d87a96b88f1669b33adddc6fa9acdc840c0d8a243671e0e6de49a5b00300000005ac6353655353b91db50180db5a03000000000663535151006a047a3aff\", \"52ab51ab5365005163\", 0, -1336626596, \"b8db8d57fe40ab3a99cf2f8ed57da7a65050fcc1d34d4280e25faf10108d3110\"],\n\t[\"10011f150220ad76a50ccc7bb1a015eda0ff987e64cd447f84b0afb8dc3060bdae5b36a6900200000000ffffffff1e92dd814dfafa830187bc8e5b9258de2445ec07b02c420ee5181d0b203bb334000000000565ab536a65ffffffff0124e65401000000000800ab636553ab53ac00000000\", \"53abab0051\", 0, 440222748, \"c6675bf229737e005b5c8ffa6f81d9e2c4396840921b6151316f67c4315a4270\"],\n\t[\"8b95ec900456648d820a9b8df1d8f816db647df8a8dc9f6e7151ebf6079d90ee3f6861352a02000000085200ab00ac535151ffffffff039b10b845f961225ac0bcaac4f5fe1991029a051aa3d06a3811b5762977a67403000000035252abffffffff8559d65f40d5e261f45aec8aad3d2c56c6114b22b26f7ee54a06f0881be3a7f5010000000765635252536363ffffffff38f8b003b50f6412feb2322b06b270197f81ad69c36af02ca5008b94eee5f650020000000165ffffffff01ae2b00010000000001638eb153a2\", \"0053ab5300ac53\", 2, 1266056769, \"205f3653f0142b35ce3ef39625442efebae98cde8cbf0516b97b51073bb0479f\"],\n\t[\"babbb7ea01ab5d584727cb44393b17cf66521606dc81e25d85273be0d57bad43e8f6b6d43501000000036a656aba83a68803fb0f4a000000000005536353ab633fcfe4020000000009ac00acab6351006a65182a0c03000000000453ac5363bee74f44\", \"536a6a6a6365ac51ab\", 0, -799187625, \"3275e98dca37243b977525a07b5d8e369d6c3bdc08cb948029a635547d0d1a4e\"],\n\t[\"e86a24bc03e4fae784cdf81b24d120348cb5e52d937cd9055402fdba7e43281e482e77a1c100000000046363006affffffffa5447e9bdcdab22bd20d88b19795d4c8fb263fbbf7ce8f4f9a85f865953a6325020000000663ac53535253ffffffff9f8b693bc84e0101fc73748e0513a8cecdc264270d8a4ee1a1b6717607ee1eaa00000000026a513417bf980158d82c020000000009005253005351acac5200000000\", \"6353516365536a6a\", 2, -563792735, \"508129278ef07b43112ac32faf00170ad38a500eed97615a860fd58baaad174b\"],\n\t[\"53bd749603798ed78798ef0f1861b498fc61dcee2ee0f2b37cddb115b118e73bc6a5a47a0201000000096a63656a6aab6a000007ff674a0d74f8b4be9d2e8e654840e99d533263adbdd0cf083fa1d5dd38e44d2d163d900100000007abab5251ac6a51c8b6b63f744a9b9273ccfdd47ceb05d3be6400c1ed0f7283d32b34a7f4f0889cccf06be30000000009516a52636551ab516a9ac1fe63030c677e05000000000027bc610000000000086565636a635100526e2dc60200000000015300000000\", \"6552536a515351ab\", 1, -1617066878, \"fe516df92299e995b8e6489be824c6839543071ec5e9286060b2600935bf1f20\"],\n\t[\"691bf9fc028ca3099020b79184e70039cf53b3c7b3fe695d661fd62d7b433e65feda2150610000000003ac63abffffffff2c814c15b142bc944192bddccb90a392cd05b968b599c1d8cd99a55a28a243fd0100000009ab5300526a5200abac98516a5803dfd3540500000000046552ac522838120100000000040053ab6a4409a903000000000665636a5300658759621b\", \"65ac5165ab\", 0, -359941441, \"d582c442e0ecc400c7ba33a56c93ad9c8cfd45af820350a13623594b793486f0\"],\n\t[\"536bc5e60232eb60954587667d6bcdd19a49048d67a027383cc0c2a29a48b960dc38c5a0370300000005ac636300abffffffff8f1cfc102f39b1c9348a2195d496e602c77d9f57e0769dabde7eaaedf9c69e250100000006acabab6a6351ffffffff0432f56f0400000000046a5365517fd54b0400000000035265539484e4050000000003536a5376dc25020000000008ac536aab6aab536ab978e686\", \"ac0051006a006a006a\", 0, -273074082, \"f151f1ec305f698d9fdce18ea292b145a58d931f1518cf2a4c83484d9a429638\"],\n\t[\"74606eba01c2f98b86c29ba5a32dc7a7807c2abe6ed8d89435b3da875d87c12ae05329e6070200000003510052ffffffff02a1e2c4020000000006516563526a63c68bae04000000000952ab6363ab00006363fe19ae4f\", \"63ababacac5365\", 0, 112323400, \"d1b1d79001b4a0324962607b739972d6f39c1493c4500ce814fd3bd72d32a5a0\"],\n\t[\"2ed805e20399e52b5bcc9dc075dad5cf19049ff5d7f3de1a77aee9288e59c5f4986751483f020000000165ffffffff967531a5726e7a653a9db75bd3d5208fa3e2c5e6cd5970c4d3aba84eb644c72c0300000000ffffffffd79030d20c65e5f8d3c55b5692e5bdaa2ae78cfa1935a0282efb97515feac43f030000000400006365261ab88c02bdf66a000000000003ab6351d6ad8b000000000005525152abac00000000\", \"630053ab5265\", 0, 2072814938, \"1d25d16d84d5793be1ad5cda2de9c9cf70e04a66c3dae618f1a7ca4026198e7f\"],\n\t[\"fab796ee03f737f07669160d1f1c8bf0800041157e3ac7961fea33a293f976d79ce49c02ab0200000003ac5252eb097ea1a6d1a7ae9dace338505ba559e579a1ee98a2e9ad96f30696d6337adcda5a85f403000000096500abab656a6a656396d5d41a9b11f571d91e4242ddc0cf2420eca796ad4882ef1251e84e42b930398ec69dd80100000005526551ac6a8e5d0de804f763bb0400000000015288271a010000000001acf2bf2905000000000300ab51c9641500000000000952655363636365ac5100000000\", \"00ac536552\", 0, -1854521113, \"f3bbab70b759fe6cfae1bf349ce10716dbc64f6e9b32916904be4386eb461f1f\"],\n\t[\"f2b539a401e4e8402869d5e1502dbc3156dbce93583f516a4947b333260d5af1a34810c6a00200000003525363ffffffff01d305e2000000000005acab535200a265fe77\", \"\", 0, -1435650456, \"41617b27321a830c712638dbb156dae23d4ef181c7a06728ccbf3153ec53d7dd\"],\n\t[\"9f10b1d8033aee81ac04d84ceee0c03416a784d1017a2af8f8a34d2f56b767aea28ff88c8f02000000025352ffffffff748cb29843bea8e9c44ed5ff258df1faf55fbb9146870b8d76454786c4549de100000000016a5ba089417305424d05112c0ca445bc7107339083e7da15e430050d578f034ec0c589223b0200000007abac53ac6565abffffffff025a4ecd010000000006636563ab65ab40d2700000000000056a6553526333fa296c\", \"\", 0, -395044364, \"20fd0eee5b5716d6cbc0ddf852614b686e7a1534693570809f6719b6fcb0a626\"],\n\t[\"ab81755f02b325cbd2377acd416374806aa51482f9cc5c3b72991e64f459a25d0ddb52e66703000000036a00ab8727056d48c00cc6e6222be6608c721bc2b1e69d0ffbadd51d131f05ec54bcd83003aac5000000000003f2cdb60454630e020000000007526aac63000000e9e25c040000000003516a0088c97e0000000000076a535265655263771b5805000000000851ab00ac6565515100000000\", \"5151ab00ac\", 0, -230931127, \"ba0a2c987fcdd74b6915f6462f62c3f126a0750aa70048f7aa20f70726e6a20b\"],\n\t[\"7a17e0ef0378dab4c601240639139335da3b7d684600fa682f59b7346ef39386fe9abd69350000000004ac5252ab807f26fb3249326813e18260a603b9ad66f41f05eaa8146f66bcca452162a502aac4aa8b02000000026a534ea460faa7e3d7854ec6c70d7e797025697b547ec500b2c09c873b4d5517767d3f3720660300000000ffffffff01b12e7a02000000000900ab006aab65656a63991c03e2\", \"6aab6a\", 1, -1577994103, \"62cd3413d9d819fb7355336365cf8a2a997f7436cc050a7143972044343b3281\"],\n\t[\"ff2ecc09041b4cf5abb7b760e910b775268abee2792c7f21cc5301dd3fecc1b4233ee70a2c0200000009acac5300006a51526affffffffeb39c195a5426afff38379fc85369771e4933587218ef4968f3f05c51d6b7c92000000000165453a5f039b8dbef7c1ffdc70ac383b481f72f99f52b0b3a5903c825c45cfa5d2c0642cd50200000001654b5038e6c49daea8c0a9ac8611cfe904fc206dad03a41fb4e5b1d6d85b1ecad73ecd4c0102000000096a51000053ab656565bdb5548302cc719200000000000452655265214a3603000000000300ab6a00000000\", \"52516a006a63\", 1, -2113289251, \"37ed6fae36fcb3360c69cac8b359daa62230fc1419b2cf992a32d8f3e079dcff\"],\n\t[\"70a8577804e553e462a859375957db68cfdf724d68caeacf08995e80d7fa93db7ebc04519d02000000045352ab53619f4f2a428109c5fcf9fee634a2ab92f4a09dc01a5015e8ecb3fc0d9279c4a77fb27e900000000006ab6a51006a6affffffff3ed1a0a0d03f25c5e8d279bb5d931b7eb7e99c8203306a6c310db113419a69ad010000000565516300abffffffff6bf668d4ff5005ef73a1b0c51f32e8235e67ab31fe019bf131e1382050b39a630000000004536a6563ffffffff02faf0bb00000000000163cf2b4b05000000000752ac635363acac15ab369f\", \"ac\", 0, -1175809030, \"1c9d6816c20865849078f9777544b5ddf37c8620fe7bd1618e4b72fb72dddca1\"],\n\t[\"a3604e5304caa5a6ba3c257c20b45dcd468f2c732a8ca59016e77b6476ac741ce8b16ca8360200000004acac6553ffffffff695e7006495517e0b79bd4770f955040610e74d35f01e41c9932ab8ccfa3b55d0300000007ac5253515365acffffffff6153120efc5d73cd959d72566fc829a4eb00b3ef1a5bd3559677fb5aae116e38000000000400abab52c29e7abd06ff98372a3a06227386609adc7665a602e511cadcb06377cc6ac0b8f63d4fdb03000000055100acabacffffffff04209073050000000009ab5163ac525253ab6514462e05000000000952abacab636300656a20672c0400000000025153b276990000000000056565ab6a5300000000\", \"5351\", 0, 1460890590, \"249c4513a49076c6618aabf736dfd5ae2172be4311844a62cf313950b4ba94be\"],\n\t[\"c6a72ed403313b7d027f6864e705ec6b5fa52eb99169f8ea7cd884f5cdb830a150cebade870100000009ac63ab516565ab6a51ffffffff398d5838735ff43c390ca418593dbe43f3445ba69394a6d665b5dc3b4769b5d700000000075265acab515365ffffffff7ee5616a1ee105fd18189806a477300e2a9cf836bf8035464e8192a0d785eea3030000000700ac6a51516a52ffffffff018075fd0000000000015100000000\", \"005251acac5252\", 2, -656067295, \"2cc1c7514fdc512fd45ca7ba4f7be8a9fe6d3318328bc1a61ae6e7675047e654\"],\n\t[\"93c12cc30270fc4370c960665b8f774e07942a627c83e58e860e38bd6b0aa2cb7a2c1e060901000000036300abffffffff4d9b618035f9175f564837f733a2b108c0f462f28818093372eec070d9f0a5440300000001acffffffff039c2137020000000001525500990100000000055265ab636a07980e0300000000005ba0e9d1\", \"656a5100\", 1, 18954182, \"6beca0e0388f824ca33bf3589087a3c8ad0857f9fe7b7609ae3704bef0eb83e2\"],\n\t[\"97bddc63015f1767619d56598ad0eb5c7e9f880b24a928fea1e040e95429c930c1dc653bdb0100000008ac53acac00005152aaa94eb90235ed10040000000000287bdd0400000000016a8077673a\", \"acac6a536352655252\", 0, -813649781, \"5990b139451847343c9bb89cdba0e6daee6850b60e5b7ea505b04efba15f5d92\"],\n\t[\"cc3c9dd303637839fb727270261d8e9ddb8a21b7f6cbdcf07015ba1e5cf01dc3c3a327745d0300000000d2d7804fe20a9fca9659a0e49f258800304580499e8753046276062f69dbbde85d17cd2201000000096352536a520000acabffffffffbc75dfa9b5f81f3552e4143e08f485dfb97ae6187330e6cd6752de6c21bdfd21030000000600ab53650063ffffffff0313d0140400000000096565515253526aacac167f0a040000000008acab00535263536a9a52f8030000000006abab5151ab63f75b66f2\", \"6a635353636a65ac65\", 1, 377286607, \"dbc7935d718328d23d73f8a6dc4f53a267b8d4d9816d0091f33823bd1f0233e9\"],\n\t[\"236f91b702b8ffea3b890700b6f91af713480769dda5a085ae219c8737ebae90ff25915a3203000000056300ac6300811a6a10230f12c9faa28dae5be2ebe93f37c06a79e76214feba49bb017fb25305ff84eb020000000100ffffffff041e351703000000000351ac004ff53e050000000003ab53636c1460010000000000cb55f701000000000651520051ab0000000000\", \"acac636a6aac5300\", 0, 406448919, \"793a3d3c37f6494fab79ff10c16702de002f63e34be25dd8561f424b0ea938c4\"],\n\t[\"22e10d2003ab4ea9849a2801921113583b7c35c3710ff49a6003489395789a7cfb1e6051900100000006526a65535151ffffffff82f21e249ec60db33831d33b9ead0d56f6496db64337dcb7f1c3327c47729c4a020000000253abffffffff138f098f0e6a4cf51dc3e7a3b749f487d1ebde71b73b731d1d02ad1180ac7b8c02000000036563acda215011027a9484020000000007635165530000ac4bf6cb0400000000066aacabab65ab3ce3f32c\", \"ab0052ab\", 2, 1136359457, \"b5bd080bbcb8cd652f440484311d7a3cb6a973cd48f03c5c00fd6beb52dfc061\"],\n\t[\"c47d5ad60485cb2f7a825587b95ea665a593769191382852f3514a486d7a7a11d220b62c54000000000663655253acab8c3cf32b0285b040e50dcf6987ddf7c385b3665048ad2f9317b9e0c5ba0405d8fde4129b00000000095251ab00ac65635300ffffffff549fe963ee410d6435bb2ed3042a7c294d0c7382a83edefba8582a2064af3265000000000152fffffffff7737a85e0e94c2d19cd1cde47328ece04b3e33cd60f24a8a345da7f2a96a6d0000000000865ab6a0051656aab28ff30d5049613ea020000000005ac51000063f06df1050000000008ac63516aabac5153afef5901000000000700656500655253688bc00000000000086aab5352526a53521ff1d5ff\", \"51ac52\", 2, -1296011911, \"0c1fd44476ff28bf603ad4f306e8b6c7f0135a441dc3194a6f227cb54598642a\"],\n\t[\"0b43f122032f182366541e7ee18562eb5f39bc7a8e5e0d3c398f7e306e551cdef773941918030000000863006351ac51acabffffffffae586660c8ff43355b685dfa8676a370799865fbc4b641c5a962f0849a13d8250100000005abab63acabffffffff0b2b6b800d8e77807cf130de6286b237717957658443674df047a2ab18e413860100000008ab6aac655200ab63ffffffff04f1dbca03000000000800635253ab656a52a6eefd0300000000036365655d8ca90200000000005a0d530400000000015300000000\", \"65ac65acac\", 0, 351448685, \"86f26e23822afd1bdfc9fff92840fc1e60089f12f54439e3ab9e5167d0361dcf\"],\n\t[\"4b0ecc0c03ba35700d2a30a71f28e432ff6ac7e357533b49f4e97cf28f1071119ad6b97f3e0300000008acab516363ac63acffffffffcd6a2019d99b5c2d639ddca0b1aa5ea7c1326a071255ea226960bd88f45ca57d00000000085253655363005353ffffffffba257635191c9f216de3277be548cb5a2313114cb1a4c563b03b4ef6c0f4f7040300000001abda542edf0495cdc40100000000026353c049e903000000000752516a53ab65512b0f9304000000000963ab516aac65516552fa9ece050000000009acab6500005152530000000000\", \"65ab51525352510052\", 1, -1355414590, \"3cd85f84aae6d702436f3f9b8980adcc1f8f202e957759540a27da0a32fc6c87\"],\n\t[\"adaac0a803f66811346271c733036d6e0d45e15a9b602092e2e04ad93564f196e7f020b088000000000600526a636a00700ec3f9db07a3a6ce910bf318c7ec87a876e1f2a3366cc69f20cde09203b99c1cb9d15800000000050000ac636a4d0de554ebe95c6cc14faf5ff6361d1deba9474b8b0fd3b93c011cd96aec783abb3f36830200000005ab65005251ffffffff0464eb10050000000007520000ab6a65ab1beaa80300000000005a2f31050000000006526aab65ac52ba7db10000000000045251ab6a0cfb46e7\", \"ab0051ac52636a\", 1, -184733716, \"961ff413850336d3987c550404fc1d923266ca36cc9ffee7113edb3a9fea7f30\"],\n\t[\"af1c4ab301ec462f76ee69ba419b1b2557b7ded639f3442a3522d4f9170b2d6859765c3df402000000016affffffff01a5ca6c000000000008ab52536aab00005300000000\", \"6a6351\", 0, 110304602, \"e88ed2eea9143f2517b15c03db00767eb01a5ce12193b99b964a35700607e5f4\"],\n\t[\"0bfd34210451c92cdfa02125a62ba365448e11ff1db3fb8bc84f1c7e5615da40233a8cd368010000000252ac9a070cd88dec5cf9aed1eab10d19529720e12c52d3a21b92c6fdb589d056908e43ea910e0200000009ac516a52656a6a5165ffffffffc3edcca8d2f61f34a5296c405c5f6bc58276416c720c956ff277f1fb81541ddd00000000030063abffffffff811247905cdfc973d179c03014c01e37d44e78f087233444dfdce1d1389d97c302000000065163000063ab1724a26e02ca37c902000000000851ab53525352ac529012a90100000000085200525253535353fa32575b\", \"5352ac6351\", 1, -1087700448, \"b8f1e1f35e3e1368bd17008c756e59cced216b3c699bcd7bebdb5b6c8eec4697\"],\n\t[\"2c84c0640487a4a695751d3e4be48019dbaea85a6e854f796881697383ea455347d2b2769001000000055265526500ffffffff6aac176d8aa00778d496a7231eeb7d3334f20c512d3db1683276402100d98de5030000000700536a5263526ac1ee9ceb171c0c984ebaf12c234fd1487fbf3b3d73aa0756907f26837efba78d1bed33200300000001ab4d9e8ec0bed837cb929bbed76ee848959cec59de44bd7667b7631a744f880d5c71a20cfd0100000007005363515300abffffffff023753fb0000000000036565532d3873050000000009005152ab6a63acab5200000000\", \"ab650053ab\", 0, -877941183, \"c49af297dffe2d80deddf10ceea84b99f8554bd2d55bbdc34e449728c31f0835\"],\n\t[\"1f7e4b1b045d3efa6cd7a11d7873a8bab886c19bd11fcb6712f0948f2db3a7be76ff76c8f100000000095265ab6a0065ac5363ffffffffdaafcfa6029336c997680a541725190f09a6f6da21e54560eca4b5b8ae987da1000000000952ac52acac52515165ffffffff825a38d3b1e5bb4d10f33653ab3ab6882c7abdaec74460257d1528ce7be3f98e0100000007526a006a656a63c14adc8f04953a5d3d3f89237f38b857dd357713896d36215f7e8b77b11d98ea3cdc93df02000000015212484f6104bfafae0300000000025263a2b0120000000000056563ab00516c4d2605000000000653ac6500655301cc93030000000002acab14643b1f\", \"63acac53ab\", 0, 333824258, \"18da6ceb011cd36f15ad7dd6c55ef07e6f6ed48881ce3bb31416d3c290d9a0e9\"],\n\t[\"467a3e7602e6d1a7a531106791845ec3908a29b833598e41f610ef83d02a7da3a1900bf2960000000005ab6a636353ffffffff031db6dac6f0bafafe723b9199420217ad2c94221b6880654f2b35114f44b1df010000000965ab52636a63ac6352ffffffff02b3b95c0100000000026300703216030000000001ab3261c0aa\", \"6a\", 0, 2110869267, \"3078b1d1a7713c6d101c64afe35adfae0977a5ab4c7e07a0b170b041258adbf2\"],\n\t[\"8713bc4f01b411149d575ebae575f5dd7e456198d61d238695df459dd9b86c4e3b2734b62e0300000004abac6363ffffffff03b58049050000000002ac653c714c04000000000953656a005151526a527b5a9e03000000000652ac5100525300000000\", \"52\", 0, -647281251, \"0e0bed1bf2ff255aef6e5c587f879ae0be6222ab33bd75ee365ec6fbb8acbe38\"],\n\t[\"f2ba8a8701b9c401efe3dd0695d655e20532b90ac0142768cee4a3bb0a89646758f544aa8102000000036a52527899f4e4040c6f0b030000000008636565ab530051ab52b60c000000000009515200ab630053ac53a49c5f040000000008ab53ab516300ab63fa27340300000000015100000000\", \"ac63abab5251\", 0, -1328936437, \"ab61497afd39e61fe06bc5677326919716f9b20083c9f3417dcea905090e0411\"],\n\t[\"b5a7df6102107beded33ae7f1dec0531d4829dff7477260925aa2cba54119b7a07d92d5a1d02000000046a516a52803b625c334c1d2107a326538a3db92c6c6ae3f7c3516cd90a09b619ec6f58d10e77bd6703000000056563006a63ffffffff0117484b03000000000853acab52526a65abc1b548a1\", \"ac006a525100\", 0, 2074359913, \"680336db57347d8183b8898cd27a83f1ba5884155aeae5ce20b4840b75e12871\"],\n\t[\"278cb16204b9dadf400266106392c4aa9df01ba03af988c8139dae4c1818ac009f13fc5f1a00000000065200ac656a52ffffffffd006bbebd8cbd7bdead24cddc9badfcc6bc0c2e63c037e5c29aa858f5d0f3e7d01000000046a0051acffffffffbc62a5f57e58da0b67956003ae81ac97cb4cbd1d694c914fc41515c008c4d8fd020000000165e329c844bcc16164be64b64a81cbf4ffd41ed2934e0daa0040ccb8365bab0b2a9e401c180300000003ab52abffffffff02588460030000000000a25a12030000000005535100005300000000\", \"6553ab6a5300acab51\", 3, 989407546, \"1c29f110576f4a3b257f67454d99dfc0dee62ef5517ca702848ce4bd2ea1a1d7\"],\n\t[\"49eb2178020a04fca08612c34959fd41447319c190fb7ffed9f71c235aa77bec28703aa1820200000003ac6353abaff326071f07ec6b77fb651af06e8e8bd171068ec96b52ed584de1d71437fed186aecf0300000001acffffffff03da3dbe02000000000652ac63ac6aab8f3b680400000000096a536a65636a53516a5175470100000000016500000000\", \"6a536365\", 0, 1283691249, \"c670219a93234929f662ecb9aa148a85a2d281e83f4e53d10509461cdea47979\"],\n\t[\"0f96cea9019b4b3233c0485d5b1bad770c246fe8d4a58fb24c3b7dfdb3b0fd90ea4e8e947f0300000006006a5163515303571e1e01906956030000000005ab635353abadc0fbbe\", \"acac\", 0, -1491469027, \"716a8180e417228f769dcb49e0491e3fda63badf3d5ea0ceeac7970d483dd7e2\"],\n\t[\"9a7d858604577171f5fe3f3fd3e5e039c4b0a06717a5381e9977d80e9f53e025e0f16d2877020000000752636565536353ffffffff5862bd028e8276e63f044be1dddcbb8d0c3fa097678308abf2b0f45104a93dbd0100000001531200667ba8fdd3b28e98a35da73d3ddfe51e210303d8eb580f923de988ee632d77793892030000000752526363526563ffffffffe9744eb44db2658f120847c77f47786d268c302120d269e6004455aa3ea5f5e20200000009ab6300636aab656551ffffffff03c61a3c020000000009ab516a6aab6aab53ab737f1a05000000000853acabab655365ab92a4a00400000000016367edf6c8\", \"535352ab\", 3, 659348595, \"d36ee79fc80db2e63e05cdc50357d186181b40ae20e3720878284228a13ee8b3\"],\n\t[\"148e68480196eb52529af8e83e14127cbfdbd4a174e60a86ac2d86eac9665f46f4447cf7aa01000000045200ac538f8f871401cf240c0300000000065252ab52656a5266cf61\", \"\", 0, -344314825, \"eacc47c5a53734d6ae3aedbc6a7c0a75a1565310851b29ef0342dc4745ceb607\"],\n\t[\"e2bc29d4013660631ba14ecf75c60ec5e9bed7237524d8c10f66d0675daa66d1492cb834530200000004ac510065e42d0c9e04f2b26c01000000000951525152acac65ababa35b7504000000000953ac6aac00650053ab94688c0400000000056365526553a1bced0300000000016a00000000\", \"65ab0063655353\", 0, -888431789, \"59a34b3ed3a1cce0b104de8f7d733f2d386ffc7445efae67680cd90bc915f7e0\"],\n\t[\"0c8a70d70494dca6ab05b2bc941b5b431c43a292bd8f2f02eab5e240a408ca73a676044a4103000000056a51ab006affffffff84496004e54836c035821f14439149f22e1db834f315b24588ba2f031511926c0100000000ffffffffbbc5e70ed1c3060ba1bfe99c1656a3158a7307c3ce8eb362ec32c668596d2bd30000000009636563635351abab00b039344c6fc4f9bec24322e45407af271b2d3dfec5f259ee2fc7227bc5285e22b3be85b40100000009ac00ab53abac6a5352e5ddfcff02d50231020000000005006a51536ab086d9020000000006ababac51ac6a00000000\", \"abab636565acac6a\", 3, 241546088, \"643a7b4c8d832e14d5c10762e74ec84f2c3f7ed96c03053157f1bed226614911\"],\n\t[\"f98f79cf0274b745e1d6f36da7cbe205a79132a7ad462bdc434cfb1dcd62a6977c3d2a5dbc010000000553516a5365ffffffff4f89f485b53cdad7fb80cc1b7e314b9735b9383bc92c1248bb0e5c6173a55c0d010000000353655293f9b014045ad96d02000000000963ac526a53ac636365f4c27904000000000952536563635152526a2788f0030000000002516aff5add01000000000863530051655351abd04716ba\", \"ab6552536a53\", 1, -2128899945, \"56d29f5e300ddfed2cd8dcce5d79826e193981d0b70dc7487772c8a0b3b8d7b1\"],\n\t[\"6c7913f902aa3f5f939dd1615114ce961beda7c1e0dd195be36a2f0d9d047c28ac62738c3a020000000453abac00ffffffff477bf2c5b5c6733881447ac1ecaff3a6f80d7016eee3513f382ad7f554015b970100000007ab6563acab5152ffffffff04e58fe1040000000009ab00526aabab526553e59790010000000002ab525a834b03000000000035fdaf0200000000086551ac65515200ab00000000\", \"63ac53\", 1, 1285478169, \"1536da582a0b6de017862445e91ba14181bd6bf953f4de2f46b040d351a747c9\"],\n\t[\"4624aa9204584f06a8a325c84e3b108cafb97a387af62dc9eab9afd85ae5e2c71e593a3b690200000003636a005eb2b44eabbaeca6257c442fea00107c80e32e8715a1293cc164a42e62ce14fea146220c020000000090b9ee38106e3310037bfc519fd209bdbd21c588522a0e96df5fba4e979392bc993bfe9f01000000086363636a635353ab6f1907d218ef6f3c729d9200e23c1dbff2df58b8b1282c6717b26cf760ee4c880d23f4d100000000086a516a536a525163ffffffff01d6f162050000000000ebbab208\", \"525365ab0053\", 1, -1515409325, \"6cf9cd409b7185b1f118171f0a34217af5b612ea54195ea186505b667c19337f\"],\n\t[\"16562fc503f1cf9113987040c408bfd4523f1512da699a2ca6ba122dc65677a4c9bf7763830000000003636552ffffffff1ec1fab5ff099d1c8e6b068156f4e39b5543286bab53c6d61e2582d1e07c96cf02000000045163656affffffffd0ef40003524d54c08cb4d13a5ee61c84fbb28cde9eca7a6d11ba3a9335d8c620100000007635153536a6300fbb84fc2012003a601000000000363ab6a00000000\", \"63636a006a6aab\", 0, -1310262675, \"1efbf3d37a92bc03d9eb950b792f307e95504f7c4998f668aa250707ebb752ac\"],\n\t[\"531665d701f86bacbdb881c317ef60d9cd1baeffb2475e57d3b282cd9225e2a3bf9cbe0ded01000000086300ac515263acabffffffff0453a8500100000000086353acab516a6565e5e9200500000000026a52a44caa00000000000453ac000065e41b0500000000076500ac0065526ab4476f4d\", \"006563006aab00636a\", 0, 1770013777, \"0898b26dd3ca08632a5131fa48eb55b44386d0c5070c24d6e329673d5e3693b8\"],\n\t[\"0f1227a20140655a3da36e413b9b5d108a866f6f147eb4940f032f5a89854eae6d7c3a91600100000009525363515153515253e37a79480161ab61020000000001ab00000000\", \"ab65005200\", 0, -1996383599, \"979782dc3f36d908d37d7e4046a38d306b4b08ddc60a5eba355fe3d6da1b29a9\"],\n\t[\"063ff6eb01aff98d0d2a6db224475010edb634c2f3b46257084676adeb84165a4ff8558d7601000000066353006a5165deb3262c042d109c0000000000076363ab52ac005200b9c4050000000007516300ac510063cfffc800000000000200639e815501000000000700526a52ac6365ac7b07b8\", \"656552abac6500\", 0, -1559847112, \"674a4bcb04247f8dc98780f1792cac86b8aee41a800fc1e6f5032f6e1dccde65\"],\n\t[\"3320f6730132f830c4681d0cae542188e4177cad5d526fae84565c60ceb5c0118e844f90bd030000000163ffffffff0257ec5a040000000005525251ac6538344d000000000002515200000000\", \"5352656a53ac516a65\", 0, 788050308, \"3afacaca0ef6be9d39e71d7b1b118994f99e4ea5973c9107ca687d28d8eba485\"],\n\t[\"c13aa4b702eedd7cde09d0416e649a890d40e675aa9b5b6d6912686e20e9b9e10dbd40abb1000000000863ab6353515351ac11d24dc4cc22ded7cdbc13edd3f87bd4b226eda3e4408853a57bcd1becf2df2a1671fd1600000000045165516affffffff01baea300100000000076aab52ab53005300000000\", \"0065\", 0, -1195908377, \"241a23e7b1982d5f78917ed97a8678087acbbffe7f624b81df78a5fe5e41e754\"],\n\t[\"d9a6f20e019dd1b5fae897fb472843903f9c3c2293a0ffb59cff2b413bae6eceab574aaf9d030000000663ab006a515102f54939032df5100100000000056a51ab65530ec28f010000000004ac5100007e874905000000000651005265ac6a00000000\", \"abacab63acacabab\", 0, 271463254, \"1326a46f4c21e7619f30a992719a905aa1632aaf481a57e1cbd7d7c22139b41e\"],\n\t[\"157c81bf0490432b3fcb3f9a5b79e5f91f67f05efb89fa1c8740a3fe7e9bdc18d7cb6acd2203000000026351ffffffff912e48e72bbcf8a540b693cf8b028e532a950e6e63a28801f6eaad1afcc52ad00000000000b1a4b170a2b9e60e0cad88a0085137309f6807d25d5afb5c1e1d32aa10ba1cdf7df596dd0000000009525165656a51ab65ab3674fba32a76fe09b273618d5f14124465933f4190ba4e0fd09d838daafc6223b31642ac00000000086a53536551ac6565ffffffff01fe9fb6030000000008ab51656a5165636a00000000\", \"ab00ab6a6551\", 3, -64357617, \"1ddaab7f973551d71f16bd70c4c4edbf7225e64e784a6da0ee7f7a9fe4f12a0b\"],\n\t[\"a2692fff03b2387f5bacd5640c86ba7df574a0ee9ed7f66f22c73cccaef3907eae791cbd230200000004536363abffffffff4d9fe7e5b375de88ba48925d9b2005447a69ea2e00495a96eafb2f144ad475b40000000008000053000052636537259bee3cedd3dcc07c8f423739690c590dc195274a7d398fa196af37f3e9b4a1413f810000000006ac63acac52abffffffff04c65fe60200000000075151536365ab657236fc020000000009005263ab00656a6a5195b8b6030000000007ac5165636aac6a7d7b66010000000002acab00000000\", \"51\", 2, -826546582, \"925037c7dc7625f3f12dc83904755a37016560de8e1cdd153c88270a7201cf15\"],\n\t[\"2c5b003201b88654ac2d02ff6762446cb5a4af77586f05e65ee5d54680cea13291efcf930d0100000005ab536a006a37423d2504100367000000000004536a515335149800000000000152166aeb03000000000452510063226c8e03000000000000000000\", \"635251\", 0, 1060344799, \"7e058ca5dd07640e4aae7dea731cfb7d7fef1bfd0d6d7b6ce109d041f4ca2a31\"],\n\t[\"f981b9e104acb93b9a7e2375080f3ea0e7a94ce54cd8fb25c57992fa8042bdf4378572859f0100000002630008604febba7e4837da77084d5d1b81965e0ea0deb6d61278b6be8627b0d9a2ecd7aeb06a0300000005ac5353536a42af3ef15ce7a2cd60482fc0d191c4236e66b4b48c9018d7dbe4db820f5925aad0e8b52a0300000008ab0063510052516301863715efc8608bf69c0343f18fb81a8b0c720898a3563eca8fe630736c0440a179129d03000000086aac6a52ac6a63ac44fec4c00408320a03000000000062c21c030000000007ac6a655263006553835f0100000000015303cd60000000000005535263536558b596e0\", \"00\", 0, -2140385880, \"49870a961263354c9baf108c6979b28261f99b374e97605baa532d9fa3848797\"],\n\t[\"e7416df901269b7af14a13d9d0507709b3cd751f586ce9d5da8d16a121e1bd481f5a086e1103000000056aab005200ffffffff01aa269c040000000006acac6a6a5263ee718de6\", \"ab525363\", 0, 1309186551, \"eea7d2212bda2d408fff146f9ae5e85e6b640a93b9362622bb9d5e6e36798389\"],\n\t[\"402a815902193073625ab13d876190d1bbb72aecb0ea733c3330f2a4c2fe6146f322d8843a0300000008656aab0000535363fffffffff9dccdec5d8509d9297d26dfcb1e789cf02236c77dc4b90ebccbf94d1b5821150300000001510bf1f96a03c5c145000000000002ac6ae11b1c0100000000055163516a5239c8a600000000000365636300000000\", \"63536aacab\", 0, -1811424955, \"0090803a20102a778ab967a74532faee13e03b702083b090b1497bc2267ee2fe\"],\n\t[\"c4b702e502f1a54f235224f0e6de961d2e53b506ab45b9a40805d1dacd35148f0acf24ca5e00000000085200ac65ac53acabf34ba6099135658460de9d9b433b84a8562032723635baf21ca1db561dce1c13a06f4407000000000851ac006a63516aabffffffff02a853a603000000000163d17a67030000000005ab63006a5200000000\", \"ac5363515153\", 1, 480734903, \"5c46f7ac3d6460af0da28468fcc5b3c87f2b9093d0f837954b7c8174b4d7b6e7\"],\n\t[\"9b83f78704f492b9b353a3faad8d93f688e885030c274856e4037818848b99e490afef27770200000000ffffffff36b60675a5888c0ef4d9e11744ecd90d9fe9e6d8abb4cff5666c898fdce98d9e00000000056aab656352596370fca7a7c139752971e169a1af3e67d7656fc4fc7fd3b98408e607c2f2c836c9f27c030000000653ac51ab6300a0761de7e158947f401b3595b7dc0fe7b75fa9c833d13f1af57b9206e4012de0c41b8124030000000953656a53ab53510052242e5f5601bf83b301000000000465516a6300000000\", \"63515200ac656365\", 3, -150879312, \"9cf05990421ea853782e4a2c67118e03434629e7d52ab3f1d55c37cf7d72cdc4\"],\n\t[\"f492a9da04f80b679708c01224f68203d5ea2668b1f442ebba16b1aa4301d2fe5b4e2568f3010000000953005351525263ab65ffffffff93b34c3f37d4a66df255b514419105b56d7d60c24bf395415eda3d3d8aa5cd0101000000020065ffffffff9dba34dabdc4f1643b372b6b77fdf2b482b33ed425914bb4b1a61e4fad33cf390000000002ab52ffffffffbbf3dc82f397ef3ee902c5146c8a80d9a1344fa6e38b7abce0f157be7adaefae0000000009515351005365006a51ffffffff021359ba010000000000403fea0200000000095200ac6353abac635300000000\", \"00ac51acacac\", 0, -2115078404, \"fd44fc98639ca32c927929196fc3f3594578f4c4bd248156a25c04a65bf3a9f3\"],\n\t[\"2f73e0b304f154d3a00fde2fdd40e791295e28d6cb76af9c0fd8547acf3771a02e3a92ba37030000000852ac6351ab6565639aa95467b065cec61b6e7dc4d6192b5536a7c569315fb43f470078b31ed22a55dab8265f02000000080065636a6aab6a53ffffffff9e3addbff52b2aaf9fe49c67017395198a9b71f0aa668c5cb354d06c295a691a0100000000ffffffff45c2b4019abaf05c5e484df982a4a07459204d1343a6ee5badade358141f8f990300000007ac516a6aacac6308655cd601f3bc2f0000000000015200000000\", \"\", 0, -2082053939, \"9a95e692e1f78efd3e46bb98f178a1e3a0ef60bd0301d9f064c0e5703dc879c2\"],\n\t[\"5a60b9b503553f3c099f775db56af3456330f1e44e67355c4ab290d22764b9144a7b5f959003000000030052acbd63e0564decc8659aa53868be48c1bfcda0a8c9857b0db32a217bc8b46d9e7323fe9649020000000553ac6551abd0ecf806211db989bead96c09c7f3ec5f73c1411d3329d47d12f9e46678f09bac0dc383e0200000000ffffffff01494bb202000000000500516551ac00000000\", \"ac\", 0, 1169947809, \"62a36c6e8da037202fa8aeae03e533665376d5a4e0a854fc4624a75ec52e4eb1\"],\n\t[\"7e98d353045569c52347ca0ff2fdba608829e744f61eb779ffdb5830aae0e6d6857ab2690e03000000075365acab656352ffffffffa890dd37818776d12da8dca53d02d243ef23b4535c67016f4c58103eed85360f030000000093dbacdc25ca65d2951e047d6102c4a7da5e37f3d5e3c8b87c29b489360725dcd117ee2003000000056a6300ac53c7e99fa1dc2b8b51733034e6555f6d6de47dbbf1026effac7db80cb2080678687380dc1e02000000075352005263516affffffff04423272040000000008ab6353ab65510051e0f53b0500000000086300516552635152f74a5f04000000000853acab0053ab52ab0e8e5f00000000000951ac5363516a6aabab00000000\", \"6a5163ab52\", 3, 890006103, \"476868cecd1763c91dade98f17defa42d31049547df45acffa1cc5ae5c3d75d6\"],\n\t[\"e3649aa40405e6ffe377dbb1bbbb672a40d8424c430fa6512c6165273a2b9b6afa9949ec430200000007630052ab655153a365f62f2792fa90c784efe3f0981134d72aac0b1e1578097132c7f0406671457c332b84020000000353ab6ad780f40cf51be22bb4ff755434779c7f1def4999e4f289d2bd23d142f36b66fbe5cfbb4b01000000076a5252abac52ab1430ffdc67127c9c0fc97dcd4b578dab64f4fb9550d2b59d599773962077a563e8b6732c02000000016affffffff04cb2687000000000002ab636e320904000000000252acf70e9401000000000100dc3393050000000006ab0063536aacbc231765\", \"65520053\", 3, -2016196547, \"f64f805f0ff7f237359fa6b0e58085f3c766d1859003332223444fd29144112a\"],\n\t[\"1d033569040700441686672832b531ab55db89b50dc1f9fc00fb72218b652da9dcfbc83be901000000066551ac526a632b390f9ad068e5fdee6563e88e2a8e4e09763c861072713dc069893dc6bbc9db3f00e26502000000096a5363526565525252ffffffff8a36bdd0aaf38f6707592d203e14476ca9f259021e487135c7e8324244057ed90300000000ed3fb2a3dfd4d46b5f3603fe0148653911988457bd0ed7f742b07c452f5476c228ff9f600200000007526aac00525152ffffffff04b88e48030000000000c753d602000000000853510000006553518fda2603000000000853ac52acac5263534839f1030000000006ac006aacac5300000000\", \"516553635300ab0052\", 1, 2075958316, \"c2cefaec2293134acbcf6d2a8bf2b3eb42e4ec04ee8f8bf30ff23e65680677c1\"],\n\t[\"4c4be7540344050e3044f0f1d628039a334a7c1f7b4573469cfea46101d6888bb6161fe9710200000000ffffffffac85a4fdad641d8e28523f78cf5b0f4dc74e6c5d903c10b358dd13a5a1fd8a06000000000163e0ae75d05616b72467b691dc207fe2e65ea35e2eadb7e06ea442b2adb9715f212c0924f10200000000ffffffff0194ddfe02000000000265ac00000000\", \"00006500\", 1, -479922562, \"d66924d49f03a6960d3ca479f3415d638c45889ce9ab05e25b65ac260b51d634\"],\n\t[\"202c18eb012bc0a987e69e205aea63f0f0c089f96dd8f0e9fcde199f2f37892b1d4e6da90302000000055352ac6565ffffffff0257e5450100000000025300ad257203000000000000000000\", \"520052ac6a005265\", 0, 168054797, \"502967a6f999f7ee25610a443caf8653dda288e6d644a77537bcc115a8a29894\"],\n\t[\"32fa0b0804e6ea101e137665a041cc2350b794e59bf42d9b09088b01cde806ec1bbea077df0200000008515153650000006506a11c55904258fa418e57b88b12724b81153260d3f4c9f080439789a391ab147aabb0fa0000000007000052ac51ab510986f2a15c0d5e05d20dc876dd2dafa435276d53da7b47c393f20900e55f163b97ce0b800000000008ab526a520065636a8087df7d4d9c985fb42308fb09dce704650719140aa6050e8955fa5d2ea46b464a333f870000000009636300636a6565006affffffff01994a0d040000000002536500000000\", \"516563530065\", 2, -163068286, \"f58637277d2bc42e18358dc55f7e87e7043f5e33f4ce1fc974e715ef0d3d1c2a\"],\n\t[\"ae23424d040cd884ebfb9a815d8f17176980ab8015285e03fdde899449f4ae71e04275e9a80100000007ab006553530053ffffffff018e06db6af519dadc5280c07791c0fd33251500955e43fe4ac747a4df5c54df020000000251ac330e977c0fec6149a1768e0d312fdb53ed9953a3737d7b5d06aad4d86e9970346a4feeb5030000000951ab51ac6563ab526a67cabc431ee3d8111224d5ecdbb7d717aa8fe82ce4a63842c9bd1aa848f111910e5ae1eb0100000004ac515300bfb7e0d7048acddc030000000009636a5253636a655363a3428e040000000001525b99c6050000000004655265ab717e6e020000000000d99011eb\", \"ac6a6a516565\", 1, -716251549, \"b098eb9aff1bbd375c70a0cbb9497882ab51f3abfebbf4e1f8d74c0739dc7717\"],\n\t[\"030f44fc01b4a9267335a95677bd190c1c12655e64df74addc53b753641259af1a54146baa020000000152e004b56c04ba11780300000000026a53f125f001000000000251acd2cc7c03000000000763536563655363c9b9e50500000000015200000000\", \"ac\", 0, -1351818298, \"19dd32190ed2a37be22f0224a9b55b91e37290577c6c346d36d32774db0219a3\"],\n\t[\"c05f448f02817740b30652c5681a3b128322f9dc97d166bd4402d39c37c0b14506d8adb5890300000003536353ffffffffa188b430357055ba291c648f951cd2f9b28a2e76353bef391b71a889ba68d5fc02000000056565526a6affffffff02745f73010000000001ab3ec34c0400000000036aac5200000000\", \"516551510053\", 0, -267877178, \"3a1c6742d4c374f061b1ebe330b1e169a113a19792a1fdde979b53e094cc4a3c\"],\n\t[\"163ba45703dd8c2c5a1c1f8b806afdc710a2a8fc40c0138e2d83e329e0e02a9b6c837ff6b8000000000700655151ab6a522b48b8f134eb1a7e6f5a6fa319ce9d11b36327ba427b7d65ead3b4a6a69f85cda8bbcd22030000000563656552acffffffffdbcf4955232bd11eef0cc6954f3f6279675b2956b9bcc24f08c360894027a60201000000066500006500abffffffff04d0ce9d0200000000008380650000000000015233f360040000000003006aabedcf0801000000000000000000\", \"000065006500ac\", 0, 216965323, \"9afe3f4978df6a86e9a8ebd62ef6a9d48a2203f02629349f1864ef2b8b92fd55\"],\n\t[\"07f7f5530453a12ad0c7eb8fbc3f140c7ab6818144d67d2d8752600ca5d9a9358e2dff87d4000000000663526aab526a9e599c379d455e2da36d0cde88d931a863a3e97e01e93b9edb65856f3d958dc08b92b720000000000165bbc8d66dae3b1b170a6e2457f5b161465cb8706e0e6ffc6af55deb918365f14c5f40d4890100000000a7bd77c069ee4b48638e2363fcf2a86b02bea022047bd9fcb16d2b94ad068308d19b31cb00000000066aab5300ab529672aa8f01dbd8a205000000000663536353006a02e99901\", \"ac006351006a63ab63\", 1, 119789359, \"6629a1e75c6ae8f4f9d5f734246b6a71682a5ea57246040ef0584f6b97916175\"],\n\t[\"fe647f950311bf8f3a4d90afd7517df306e04a344d2b2a2fea368935faf11fa6882505890d0000000005ab5100516affffffff43c140947d9778718919c49c0535667fc6cc727f5876851cb8f7b6460710c7f60100000000ffffffffce4aa5d90d7ab93cbec2e9626a435afcf2a68dd693c15b0e1ece81a9fcbe025e0300000000ffffffff02f34806020000000002515262e54403000000000965635151ac655363636de5ce24\", \"6a005100ac516351\", 2, 989643518, \"818a7ceaf963f52b5c48a7f01681ac6653c26b63a9f491856f090d9d60f2ffe3\"],\n\t[\"a1050f8604d0f9d2feefcdb5051ae0052f38e21bf39daf583fd0c3900faa3eab5d431c0bbe030000000653536a005151683d27e5c6e0da8f22125823f32d5d98477d8098ef36263b9694d61d4d85d3f2ac02b7570200000007000052005165abffffffff0cad981542bcb54a87d9400aa63e514c7c6fab7158c2b1fb37821ea755eb162a0200000000b94feb5100e5ef3bf8ed8d43356c8a8d5ac6c7e80d7ff6040f4f0aa19abbe783f4f461240200000007636500000052655686fd70042be3ad02000000000465ab636a15680b000000000004acac53511277c705000000000452635252d27a0102000000000000000000\", \"6a6aacab65655251\", 1, -982144648, \"dfcf484111801989eb6df8dc2bafb944d7365ffeb36a575a08f3270d3ef24c9f\"],\n\t[\"cef7316804c3e77fe67fc6207a1ea6ae6eb06b3bf1b3a4010a45ae5c7ad677bb8a4ebd16d90200000009ac536a5152ac5263005301ab8a0da2b3e0654d31a30264f9356ba1851c820a403be2948d35cafc7f9fe67a06960300000006526a63636a53ffffffffbada0d85465199fa4232c6e4222df790470c5b7afd54704595a48eedd7a4916b030000000865ab63ac006a006ab28dba4ad55e58b5375053f78b8cdf4879f723ea4068aed3dd4138766cb4d80aab0aff3d0300000003ac6a00ffffffff010f5dd6010000000006ab006aab51ab00000000\", \"\", 1, 889284257, \"d0f32a6db43378af84b063a6706d614e2d647031cf066997c48c04de3b493a94\"],\n\t[\"7b3ff28004ba3c7590ed6e36f45453ebb3f16636fe716acb2418bb2963df596a50ed954d2e03000000065251515265abffffffff706ee16e32e22179400c9841013971645dabf63a3a6d2d5feb42f83aa468983e030000000653ac51ac5152ffffffffa03a16e5e5de65dfa848b9a64ee8bf8656cc1f96b06a15d35bd5f3d32629876e020000000043c1a3965448b3b46f0f0689f1368f3b2981208a368ec5c30defb35595ef9cf95ffd10e902000000036aac65253a5bbe042e907204000000000800006565656352634203b4020000000002656336b3b7010000000001ab7a063f0100000000026500a233cb76\", \"006551636a53ac5251\", 1, -1144216171, \"68c7bd717b399b1ee33a6562a916825a2fed3019cdf4920418bb72ffd7403c8c\"],\n\t[\"d5c1b16f0248c60a3ddccf7ebd1b3f260360bbdf2230577d1c236891a1993725e262e1b6cb000000000363636affffffff0a32362cfe68d25b243a015fc9aa172ea9c6b087c9e231474bb01824fd6bd8bc0300000005ab52ab516affffffff0420d9a70200000000045152656a45765d0000000000055252536a5277bad100000000000252ab3f3f3803000000000463acac5200000000\", \"52636a52ab65\", 1, 1305123906, \"978dc178ecd03d403b048213d904653979d11c51730381c96c4208e3ea24243a\"],\n\t[\"1be8ee5604a9937ebecffc832155d9ba7860d0ca451eaced58ca3688945a31d93420c27c460100000006abac5300535288b65458af2f17cbbf7c5fbcdcfb334ffd84c1510d5500dc7d25a43c36679b702e850f7c0200000003005300ffffffff7c237281cb859653eb5bb0a66dbb7aeb2ac11d99ba9ed0f12c766a8ae2a2157203000000086aabac526365acabfffffffff09d3d6639849f442a6a52ad10a5d0e4cb1f4a6b22a98a8f442f60280c9e5be80200000007ab00ab6565ab52ffffffff0398fe83030000000005526aababacbdd6ec010000000005535252ab6a82c1e6040000000001652b71c40c\", \"6563526353656351\", 2, -853634888, \"0d936cceda2f56c7bb87d90a7b508f6208577014ff280910a710580357df25f3\"],\n\t[\"9e0f99c504fbca858c209c6d9371ddd78985be1ab52845db0720af9ae5e2664d352f5037d4010000000552ac53636affffffff0e0ce866bc3f5b0a49748f597c18fa47a2483b8a94cef1d7295d9a5d36d31ae7030000000663515263ac635bb5d1698325164cdd3f7f3f7831635a3588f26d47cc30bf0fefd56cd87dc4e84f162ab702000000036a6365ffffffff85c2b1a61de4bcbd1d5332d5f59f338dd5e8accbc466fd860f96eef1f54c28ec030000000165ffffffff04f5cabd010000000007000052ac526563c18f1502000000000465510051dc9157050000000008655363ac525253ac506bb600000000000865656a53ab63006a00000000\", \"006a6a0052\", 0, 1186324483, \"2f9b7348600336512686e7271c53015d1cb096ab1a5e0bce49acd35bceb42bc8\"],\n\t[\"11ce51f90164b4b54b9278f0337d95c50d16f6828fcb641df9c7a041a2b274aa70b1250f2b0000000008ab6a6a65006551524c9fe7f604af44be050000000005525365006521f79a0300000000015306bb4e04000000000265ac99611a05000000000765acab656500006dc866d0\", \"\", 0, -1710478768, \"cfa4b7573559b3b199478880c8013fa713ca81ca8754a3fd68a6d7ee6147dc5a\"],\n\t[\"86bc233e02ba3c647e356558e7252481a7769491fb46e883dd547a4ce9898fc9a1ca1b77790000000006ab5351abab51f0c1d09c37696d5c7c257788f5dff5583f4700687bcb7d4acfb48521dc953659e325fa390300000003acac5280f29523027225af03000000000963abac0065ab65acab7e59d90400000000016549dac846\", \"53006aac52acac\", 0, 711159875, \"880330ccde00991503ea598a6dfd81135c6cda9d317820352781417f89134d85\"],\n\t[\"beac155d03a853bf18cd5c490bb2a245b3b2a501a3ce5967945b0bf388fec2ba9f04c03d68030000000012fe96283aec4d3aafed8f888b0f1534bd903f9cd1af86a7e64006a2fa0d2d30711af770010000000163ffffffffd963a19d19a292104b9021c535d3e302925543fb3b5ed39fb2124ee23a9db00302000000056500ac63acffffffff01ad67f503000000000300ac5189f78db2\", \"53536a636500\", 2, 748992863, \"bde3dd0575164d7ece3b5783ce0783ffddb7df98f178fe6468683230314f285a\"],\n\t[\"81dab34a039c9e225ba8ef421ec8e0e9d46b5172e892058a9ade579fe0eb239f7d9c97d45b0300000009ac65655351ab526363ffffffff10c0faaf7f597fc8b00bbc67c3fd4c6b70ca6b22718d15946bf6b032e62dae570000000005536a00ab6a02cddec3acf985bbe62c96fccf17012a87026ed63fc6756fa39e286eb4c2dd79b59d37400300000002516affffffff04f18b8d03000000000753abab5152636564411c02000000000400ab6300e965750300000000001bd2cf02000000000565ab526aab00000000\", \"006551ab\", 0, -1488174485, \"a3d65a8cd0c1eea8558d01396b929520a2221c29d9f25f29035b8abae874447f\"],\n\t[\"489ebbf10478e260ba88c0168bd7509a651b36aaee983e400c7063da39c93bf28100011f280100000004abab63ab2fc856f05f59b257a4445253e0d91b6dffe32302d520ac8e7f6f2467f7f6b4b65f2f59e903000000096353abacab6351656affffffff0122d9480db6c45a2c6fd68b7bc57246edffbf6330c39ccd36aa3aa45ec108fc030000000265ab9a7e78a69aadd6b030b12602dff0739bbc346b466c7c0129b34f50ae1f61e634e11e9f3d0000000006516a53525100ffffffff011271070000000000086563ab6353536352c4dd0e2c\", \"\", 0, -293358504, \"4eba3055bc2b58765593ec6e11775cea4b6493d8f785e28d01e2d5470ea71575\"],\n\t[\"6911195d04f449e8eade3bc49fd09b6fb4b7b7ec86529918b8593a9f6c34c2f2d301ec378b000000000263ab49162266af054643505b572c24ff6f8e4c920e601b23b3c42095881857d00caf56b28acd030000000565525200ac3ac4d24cb59ee8cfec0950312dcdcc14d1b360ab343e834004a5628d629642422f3c5acc02000000035100accf99b663e3c74787aba1272129a34130668a877cc6516bfb7574af9fa6d07f9b4197303400000000085351ab5152635252ffffffff042b3c95000000000000ff92330200000000046a5252ab884a2402000000000853530065520063000d78be03000000000953abab52ab53ac65aba72cb34b\", \"6a\", 2, -637739405, \"6b80d74eb0e7ee59d14f06f30ba7d72a48d3a8ff2d68d3b99e770dec23e9284f\"],\n\t[\"746347cf03faa548f4c0b9d2bd96504d2e780292730f690bf0475b188493fb67ca58dcca4f0000000002005336e3521bfb94c254058e852a32fc4cf50d99f9cc7215f7c632b251922104f638aa0b9d080100000008656aac5351635251ffffffff4da22a678bb5bb3ad1a29f97f6f7e5b5de11bb80bcf2f7bb96b67b9f1ac44d09030000000365ababffffffff036f02b30000000000076353ab6aac63ac50b72a050000000002acaba8abf804000000000663006a6a6353797eb999\", \"acac5100\", 1, -1484493812, \"164c32a263f357e385bd744619b91c3f9e3ce6c256d6a827d6defcbdff38fa75\"],\n\t[\"e17149010239dd33f847bf1f57896db60e955117d8cf013e7553fae6baa9acd3d0f1412ad90200000006516500516500cb7b32a8a67d58dddfb6ceb5897e75ef1c1ff812d8cd73875856487826dec4a4e2d2422a0100000004ac525365196dbb69039229270400000000070000535351636a8b7596020000000006ab51ac52655131e99d040000000003516551ee437f5c\", \"ac656a53\", 1, 1102662601, \"8858bb47a042243f369f27d9ab4a9cd6216adeac1c1ac413ed0890e46f23d3f3\"],\n\t[\"144971940223597a2d1dec49c7d4ec557e4f4bd207428618bafa3c96c411752d494249e1fb0100000004526a5151ffffffff340a545b1080d4f7e2225ff1c9831f283a7d4ca4d3d0a29d12e07d86d6826f7f0200000003006553ffffffff03c36965000000000000dfa9af00000000000451636aac7f7d140300000000016300000000\", \"\", 1, -108117779, \"c84fcaf9d779df736a26cc3cabd04d0e61150d4d5472dd5358d6626e610be57f\"],\n\t[\"b11b6752044e650b9c4744fb9c930819227d2ac4040d8c91a133080e090b042a142e93906e0000000003650053ffffffff6b9ce7e29550d3c1676b702e5e1537567354b002c8b7bb3d3535e63ad03b50ea01000000055100516300fffffffffcf7b252fea3ad5a108af3640a9bc2cd724a7a3ce22a760fba95496e88e2f2e801000000036a00ac7c58df5efba193d33d9549547f6ca839f93e14fa0e111f780c28c60cc938f785b363941b000000000863ab51516552ac5265e51fcd0308e9830400000000036a00abab72190300000000016a63d0710000000000050051ab6a6300000000\", \"53005165ac51ab65\", 0, 229563932, \"e562579d1a2b10d1c5e45c06513456002a6bec157d7eb42511d30b118103c052\"],\n\t[\"2aee6b9a02172a8288e02fac654520c9dd9ab93cf514d73163701f4788b4caeeb9297d2e250300000004ab6363008fb36695528d7482710ea2926412f877a3b20acae31e9d3091406bfa6b62ebf9d9d2a6470100000009535165536a63520065ffffffff03f7b560050000000003acab6a9a8338050000000000206ce90000000000056552516a5100000000\", \"5252\", 1, -1102319963, \"fa4676c374ae3a417124b4c970d1ed3319dc3ac91fb36efca1aa9ed981a8aa1b\"],\n\t[\"9554595203ad5d687f34474685425c1919e3d2cd05cf2dac89d5f33cd3963e5bb43f8706480100000000ffffffff9de2539c2fe3000d59afbd376cb46cefa8bd01dbc43938ff6089b63d68acdc2b02000000096553655251536a6500fffffffff9695e4016cd4dfeb5f7dadf00968e6a409ef048f81922cec231efed4ac78f5d010000000763abab6a5365006caaf0070162cc640200000000045163ab5100000000\", \"\", 0, -1105256289, \"e8e10ed162b1a43bfd23bd06b74a6c2f138b8dc1ab094ffb2fa11d5b22869bee\"],\n\t[\"04f51f2a0484cba53d63de1cb0efdcb222999cdf2dd9d19b3542a896ca96e23a643dfc45f00200000007acac53510063002b091fd0bfc0cfb386edf7b9e694f1927d7a3cf4e1d2ce937c1e01610313729ef6419ae7030000000165a3372a913c59b8b3da458335dc1714805c0db98992fd0d93f16a7f28c55dc747fe66a5b503000000095351ab65ab52536351ffffffff5650b318b3e236802a4e41ed9bc0a19c32b7aa3f9b2cda1178f84499963a0cde000000000165ffffffff0383954f04000000000553ac536363a8fc90030000000000a2e315000000000005acab00ab5100000000\", \"0053\", 2, -1424653648, \"a5bc0356f56b2b41a2314ec05bee7b91ef57f1074bcd2efc4da442222269d1a3\"],\n\t[\"5e4fab42024a27f0544fe11abc781f46596f75086730be9d16ce948b04cc36f86db7ad50fd01000000026a00613330f4916285b5305cc2d3de6f0293946aa6362fc087727e5203e558c676b314ef8dd401000000001af590d202ba496f040000000001009e3c9604000000000351ac51943d64d3\", \"51acabab5100ab52\", 1, -129301207, \"556c3f90aa81f9b4df5b92a23399fe6432cf8fecf7bba66fd8fdb0246440036c\"],\n\t[\"a115284704b88b45a5f060af429a3a8eab10b26b7c15ed421258f5320fa22f4882817d6c2b0300000003005300ffffffff4162f4d738e973e5d26991452769b2e1be4b2b5b7e8cbeab79b9cf9df2882c040000000006636aac63ac5194abc8aa22f8ddc8a7ab102a58e39671683d1891799d19bd1308d24ea6d365e571172f1e030000000700515352515153ffffffff4da7ad75ce6d8541acbb0226e9818a1784e9c97c54b7d1ff82f791df1c6578f60000000000ffffffff01b1f265040000000009ab0051ac656a516a5300000000\", \"51abab6352535265\", 0, -1269106800, \"0ef7b6e87c782fa33fe109aab157a2d9cddc4472864f629510a1c92fa1fe7fc1\"],\n\t[\"f3f771ae02939752bfe309d6c652c0d271b7cab14107e98032f269d92b2a8c8853ab057da8010000000563ab6a6365670c305c38f458e30a7c0ab45ee9abd9a8dc03bae1860f965ffced879cb2e5d0bb156821020000000153ffffffff025dc619050000000002ac51ec0d250100000000076a5200636a6363333aecd8\", \"650053ac515100ab\", 1, 1812404608, \"a7aa34bf8a5644f03c6dd8801f9b15ba2e07e07256dbf1e02dad59f0d3e17ea9\"],\n\t[\"fd3e267203ae7d6d3975e738ca84f12540229bb237dd228d5f688e9d5ba53fce4302b0334d01000000026353ffffffff602a3ab75af7aa951d93093e345ef0037a2863f3f580a9b1a575fffe68e677450300000000239e476d1e8f81e8b6313880d8a49b27c1b00af467f29756e76f675f084a5676539636ab030000000765ab6351acac52d9217747044d773204000000000752ac51526353acc33e45050000000005516500005115d889040000000004ab5163510cbbbd0200000000016500000000\", \"65ac526aac6a53ab52\", 2, -886179388, \"bc46f3f83058ddf5bebd9e1f2c117a673847c4dc5e31cfb24bac91adf30877cf\"],\n\t[\"f380ae23033646af5dfc186f6599098015139e961919aea28502ea2d69474413d94a555ea2000000000853635265abacac5314da394b99b07733341ddba9e86022637be3b76492992fb0f58f23c915098979250a96620300000003ab6300ffffffff4bb6d1c0a0d84eac7f770d3ad0fdc5369ae42a21bbe4c06e0b5060d5990776220300000000ffffffff0486fd70020000000007ac6500635252acf3fd72010000000005656a6a6551212de90500000000096365006a63635153000fa33100000000000600535151656300000000\", \"ab52\", 2, -740890152, \"f804fc4d81f039009ed1f2cccb5c91da797543f235ac71b214c20e763a6d86d7\"],\n\t[\"5c45d09801bb4d8e7679d857b86b97697472d514f8b76d862460e7421e8617b15a2df217c6010000000863acacab6565006affffffff01156dbc03000000000952ac63516551ac6aac00000000\", \"6aabac\", 0, 1310125891, \"270445ab77258ced2e5e22a6d0d8c36ac7c30fff9beefa4b3e981867b03fa0ad\"],\n\t[\"4ecc6bde030ca0f83c0ed3d4b777f94c0c88708c6c933fe1df6874f296d425cac95355c23d0000000006ac6a51536a52f286a0969d6170e20f2a8000193807f5bc556770e9d82341ef8e17b0035eace89c76edd50200000007ac65525100656affffffff5bade6e462fac1927f078d69d3a981f5b4c1e59311a38efcb9a910aa436afaa80000000007ac6a006352ab52ffffffff0331e58902000000000763ac53636352abb8b3ca000000000001637a1d26040000000009535263ac6a5352ab655ae34a39\", \"6a65ab\", 2, 2142728517, \"4a3415eb1677ae4e0c939644a4cfd5dc6299780b55cd0dc735967057b6b1526a\"],\n\t[\"a59484b501eb50114be0fc79e72ab9bc9f4a5f7acdf274a56d6b68684eb68cf8b07ec5d1c2000000000765abab00ab00639e09aa940141e3530200000000046500ac6500000000\", \"00516565ab\", 0, -1561622405, \"d60bbadd2cc0674100baa08d0e0493ee4248f0304b3eb778da942041f503a896\"],\n\t[\"53dc1a88046531c7b57a35f4d9adf101d068bf8d63fbbedaf4741dba8bc5e92c8725def571030000000453655251fcdf116a226b3ec240739c4c7493800e4edfe67275234e371a227721eac43d3d9ecaf1b50300000003ac0052ffffffff2c9279ffeea4718d167e9499bd067600715c14484e373ef93ae4a31d2f5671ab0000000009516553ac636a6a65001977752eeba95a8f16b88c571a459c2f2a204e23d48cc7090e4f4cc35846ca7fc0a455ce00000000055165ac0063188143f80205972902000000000765ac63ac516353c7b6a50000000000036a510000000000\", \"655351536a\", 0, 103806788, \"b276584d3514e5b4e058167c41dc02915b9d97f6795936a51f40e894ed8508bc\"],\n\t[\"53f8959f01ddb36afdcd20167edcbb75a63d18654fdcf10bc0004c761ab450fe236d79cb2702000000065151650063653435003a033a5e34050000000009ac52516a630000516ab86db3030000000002006344ac090500000000046363ab00f3644537\", \"5263abab63ac656353\", 0, -218513553, \"f1f2a489682e42a6fc20025dfc89584d17f150b2d7ae3ddedd2bf43d5e24f37f\"],\n\t[\"5a06cb4602dcfc85f49b8d14513f33c48f67146f2ee44959bbca092788e6823b2719f3160b0200000001ab3c013f2518035b9ea635f9a1c74ec1a3fb7496a160f46aae2e09bfc5cd5111a0f20969e003000000015158c89ab7049f20d6010000000008ac6a52abac53515349765e00000000000300ab638292630100000000045351ab0086da09010000000006656a6365525300000000\", \"526a63\", 1, 1502936586, \"bdfaff8a4e775379c5dc26e024968efa805f923de53fa8272dd53ec582afa0c5\"],\n\t[\"ca9d84fa0129011e1bf27d7cb71819650b59fb292b053d625c6f02b0339249b498ff7fd4b601000000025352ffffffff032173a0040000000008525253abab5152639473bb030000000009005153526a53535151d085bd0000000000086a5365ab5165655300000000\", \"005152ac51\", 0, 580353445, \"c629d93b02037f40aa110e46d903edb34107f64806aa0c418d435926feef68b8\"],\n\t[\"e3cdbfb4014d90ae6a4401e85f7ac717adc2c035858bf6ff48979dd399d155bce1f150daea0300000002ac51a67a0d39017f6c71040000000005535200535200000000\", \"\", 0, -1899950911, \"c1c7df8206e661d593f6455db1d61a364a249407f88e99ecad05346e495b38d7\"],\n\t[\"b2b6b9ab0283d9d73eeae3d847f41439cd88279c166aa805e44f8243adeb3b09e584efb1df00000000026300ffffffff7dfe653bd67ca094f8dab51007c6adaced09de2af745e175b9714ca1f5c68d050000000003ac6500aa8e596903fd3f3204000000000553ac6a6a533a2e210500000000075253acabab526392d0ee020000000008520065635200ab5200000000\", \"65acacac65005365\", 0, 28298553, \"39c2aaa2496212b3ab120ab7d7f37c5e852bfe38d20f5226413a2268663eeae8\"],\n\t[\"f30c5c3d01a6edb9e10fafaf7e85db14e7fec558b9dca4a80b05d7c3a2944d282c5018f4680200000003005263ffffffff04aac3530300000000026551bc2419010000000009005163acab6a5100658e7085050000000000c5e4ec050000000007656a6a635365ab2d8e8882\", \"abac53ab005251ac52\", 0, -490287546, \"877e347ec7487497769e2581142276d1a8d813b652e4483cf9cc993d16354417\"],\n\t[\"4314339e01de40faabcb1b970245a7f19eedbc17c507dac86cf986c2973715035cf95736ae0200000007abababababab65bde67b900151510b04000000000853ac00655200535300000000\", \"52\", 0, 399070095, \"47585dc25469d04ff3a60939d0a03779e3e81a411bf0ca18b91bb925ebd30718\"],\n\t[\"2d4cf4e9031b3e175b2ff18cd933151379d9cfac4713d8bd0e63b70bd4a92277aa7af901ab000000000565515353abffffffff557666c7f3be9cdecdad44c3df206eb63a2da4ed1f159d21193882a9f0340081020000000963ab53ab5252ac63abffffffff8a8c897bdb87e93886aad5ded9d82a13101d5476554386373646ca5e23612e450300000009006a526552abab6a635ac03fc00198bb02040000000009525100526a6563636a1d052834\", \"ab52ac00acac6a\", 0, -1469882480, \"09ed6563a454814ab7e3b4c28d56d8751162b77df1825b37ba66c6147750b2a3\"],\n\t[\"f063171b03e1830fdc1d685a30a377537363ccafdc68b42bf2e3acb908dac61ee24b37595c020000000765ac5100ab6aacf447bc8e037b89d6cadd62d960cc442d5ced901d188867b5122b42a862929ce45e7b628d010000000253aba009a1ba42b00f1490b0b857052820976c675f335491cda838fb7934d5eea0257684a2a202000000001e83cf2401a7f777030000000008ab6553526a53526a00000000\", \"\", 2, 1984790332, \"c19caada8e71535e29a86fa29cfd9b74a0c7412003fc722a121005e461e01636\"],\n\t[\"cf7bdc250249e22cbe23baf6b648328d31773ea0e771b3b76a48b4748d7fbd390e88a004d30000000003ac536a4ab8cce0e097136c90b2037f231b7fde2063017facd40ed4e5896da7ad00e9c71dd70ae600000000096a0063516352525365ffffffff01b71e3e00000000000300536a00000000\", \"\", 1, 546970113, \"6a815ba155270af102322c882f26d22da11c5330a751f520807936b320b9af5d\"],\n\t[\"ac7a125a0269d35f5dbdab9948c48674616e7507413cd10e1acebeaf85b369cd8c88301b7c030000000963656aac6a530053abffffffffed94c39a582e1a46ce4c6bffda2ccdb16cda485f3a0d94b06206066da12aecfe010000000752abab63536363ef71dcfb02ee07fa0400000000016a6908c802000000000751656a6551abac688c2c2d\", \"6a6351526551\", 0, 858400684, \"552ff97d7924f51cda6d1b94be53483153ef725cc0a3a107adbef220c753f9a6\"],\n\t[\"3a1f454a03a4591e46cf1f7605a3a130b631bf4dfd81bd2443dc4fac1e0a224e74112884fe0000000005516aac6a53a87e78b55548601ffc941f91d75eab263aa79cd498c88c37fdf275a64feff89fc1710efe03000000016a39d7ef6f2a52c00378b4f8f8301853b61c54792c0f1c4e2cd18a08cb97a7668caa008d970200000002656affffffff017642b20100000000096a63535253abac6a6528271998\", \"51\", 2, 1459585400, \"e9a7f21fc2d38be7be47095fbc8f1bf8923660aa4d71df6d797ae0ba5ca4d5b0\"],\n\t[\"f59366cc0114c2a18e6bd1347ed9470f2522284e9e835dd5c5f7ef243639ebea95d9b232b6020000000153474b62eb045c00170500000000096352ab516352ab5200038a520400000000086aab5253656a63005b968904000000000963536353ac0053635387106002000000000000000000\", \"ab52526300ab51\", 0, 1834116153, \"cdf51f6e3a9dc2be5a59ea4c00f5aac1e1426a5202c325e6cf2567d07d8d8de4\"],\n\t[\"6269e0fa0173e76e89657ca495913f1b86af5b8f1c1586bcd6c960aede9bc759718dfd5044000000000352ac530e2c7bd90219849b000000000007ab00ab6a53006319f281000000000007ab00515165ac5200000000\", \"6a\", 0, -2039568300, \"62094f98234a05bf1b9c7078c5275ed085656856fb5bdfd1b48090e86b53dd85\"],\n\t[\"eb2bc00604815b9ced1c604960d54beea4a3a74b5c0035d4a8b6bfec5d0c9108f143c0e99a0000000000ffffffff22645b6e8da5f11d90e5130fd0a0df8cf79829b2647957471d881c2372c527d8010000000263acffffffff1179dbaf17404109f706ae27ad7ba61e860346f63f0c81cb235d2b05d14f2c1003000000025300264cb23aaffdc4d6fa8ec0bb94eff3a2e50a83418a8e9473a16aaa4ef8b855625ed77ef40100000003ac51acf8414ad404dd328901000000000652526500006ab6261c000000000002526a72a4c9020000000006ac526500656586d2e7000000000006656aac00ac5279cd8908\", \"51\", 1, -399279379, \"d37532e7b2b8e7db5c7c534197600397ebcc15a750e3af07a3e2d2e4f84b024f\"],\n\t[\"dc9fe6a8038b84209bbdae5d848e8c040433237f415437592907aa798bf30d9dbbddf0ff85010000000153ffffffff23269a7ea29fcf788db483b8d4c4b35669e582608644259e950ce152b0fa6e050000000003acababffffffff65de94857897ae9ea3aa0b938ba6e5adf374d48469922d2b36dbb83d3b8c8261010000000452ac5200ffffffff02856e9b0300000000026a51980c8e02000000000365ab63d2648db4\", \"00ab0051ac526565\", 2, 1562581941, \"5cef9d8e18a2d5a70448f17b465d411a19dab78f0ddf1672ffd518b188f52433\"],\n\t[\"eba8b0de04ac276293c272d0d3636e81400b1aaa60db5f11561480592f99e6f6fa13ad387002000000070053acab536563bebb23d66fd17d98271b182019864a90e60a54f5a615e40b643a54f8408fa8512cfac927030000000963ac6a6aabac65ababffffffff890a72192bc01255058314f376bab1dc72b5fea104c154a15d6faee75dfa5dba020000000100592b3559b0085387ac7575c05b29b1f35d9a2c26a0c27903cc0f43e7e6e37d5a60d8305a030000000252abffffffff0126518f05000000000000000000\", \"005300635252635351\", 1, 664344756, \"26dc2cba4bd5334e5c0b3a520b44cc1640c6b923d10e576062f1197171724097\"],\n\t[\"91bd040802c92f6fe97411b159df2cd60fb9571764b001f31657f2d616964637605875c2a901000000055263006a65ffffffff3651df372645f50cf4e32fdf6e61c766e912e16335db2b40c5d52fe89eefe7cd00000000040065ab65ffffffff03ca8625030000000009ab51ac63530052ab52c6bf14020000000006ab00ab52005167d270000000000007ab53525351636a00000000\", \"5151ab63005252ac\", 1, 1983087664, \"3e5aa0200248d8d86ede3b315ca1b857018b89184a4bd023bd88ab12e499f6e1\"],\n\t[\"185cda1a01ecf7a8a8c28466725b60431545fc7a3367ab68e34d486e8ea85ee3128e0d8384000000000465ac63abec88b7bb031c56eb04000000000965636a51005252006a7c78d5040000000007acac63abac51ac3024a40500000000086300526a51abac51464c0e8c\", \"0065535265515352\", 0, 1594558917, \"b5280b9610c0625a65b36a8c2402a95019a7bbb9dd3de77f7c3cb1d82c3263ba\"],\n\t[\"a9531f07034091668b65fea8b1a79700d586ac9e2f42ca0455a26abe41f9e1805d009a0f5702000000096365516365ac5263ab3619bac643a9e28ee47855118cf80c3a74531cdf198835d206d0fe41804e325a4f9f105e03000000016a58e3ab0d46375d98994daf0fa7c600d2bb4669e726fca0e3a3f21ea0d9e777396740328f0100000008636a5363ab526a538d3ea7700304cb66030000000007515163ab52ab510184030500000000085353636565ac0051d9cff402000000000751ab52ab5352abf0e36254\", \"ab5353ac5365acab\", 2, 1633101834, \"04c9ef72f33668ca449c0415becf62cc0b8e0c75f9c8813852d42a58acf107c8\"],\n\t[\"6b5ecc7903fe0ba37ea551df92a59e12bad0a3065846ba69179a8f4a741a2b4fcf679aac810200000004535263529a3d343293b99ab425e7ef8529549d84f480bcd92472bab972ea380a302128ae14dfcd0200000000025163ffffffff24636e4545cab9bf87009119b7fc3ec4d5ee9e206b90f35d1df8a563b6cd097a010000000852abac53005153abc64467860406e832020000000009526300006a53ac6352ac1395010000000002ac53b117f300000000000863655351acab00651edf02030000000008ab51ac6353535252628ef71d\", \"ab63ab6a52ac526563\", 2, -1559697626, \"8f07ece7d65e509f1e0780584ef8d271c1c61a13b10335d5faafc7afc8b5b8ec\"],\n\t[\"92c9fb780138abc472e589d5b59489303f234acc838ca66ffcdf0164517a8679bb622a4267020000000153468e373d04de03fa020000000009ac006a5265ab5163006af649050000000007515153006a00658ceb59030000000001ac36afa0020000000009ab53006351ab51000000000000\", \"6a\", 0, 2059357502, \"e2358dfb51831ee81d7b0bc602a65287d6cd2dbfacf55106e2bf597e22a4b573\"],\n\t[\"6f62138301436f33a00b84a26a0457ccbfc0f82403288b9cbae39986b34357cb2ff9b889b302000000045253655335a7ff6701bac9960400000000086552ab656352635200000000\", \"6aac51\", 0, 1444414211, \"502a2435fd02898d2ff3ab08a3c19078414b32ec9b73d64a944834efc9dae10c\"],\n\t[\"9981143a040a88c2484ac3abe053849e72d04862120f424f373753161997dd40505dcb4783030000000700536365536565a2e10da3f4b1c1ad049d97b33f0ae0ea48c5d7c30cc8810e144ad93be97789706a5ead180100000003636a00ffffffffbdcbac84c4bcc87f03d0ad83fbe13b369d7e42ddb3aecf40870a37e814ad8bb5010000000963536a5100636a53abffffffff883609905a80e34202101544f69b58a0b4576fb7391e12a769f890eef90ffb72020000000651656352526affffffff04243660000000000004ab5352534a9ce001000000000863656363ab6a53652df19d030000000003ac65acedc51700000000000000000000\", \"ac6300acac\", 2, 293672388, \"7ba99b289c04718a7283f150d831175ed6303081e191a0608ea81f78926c5bdf\"],\n\t[\"a2bb630b01989bc5d643f2da4fb9b55c0cdf846ba06d1dbe372893024dbbe5b9b8a1900af802000000055265ac63aca7a68d2f04916c74010000000003abac007077f0040000000001007d4127010000000005ac516aac000f31e8030000000000571079c9\", \"65ab0051ac\", 0, -1103627693, \"92d53b4390262e6b288e8a32e0cfc36cd5adfdfabfe96c7bfd4a19d65e233761\"],\n\t[\"49f7d0b6037bba276e910ad3cd74966c7b3bc197ffbcfefd6108d6587006947e97789835ea0300000008526a52006a650053ffffffff8d7b6c07cd10f4c4010eac7946f61aff7fb5f3920bdf3467e939e58a1d4100ab03000000076aac63ac535351ffffffff8f48c3ba2d52ad67fbcdc90d8778f3c8a3894e3c35b9730562d7176b81af23c80100000003ab5265ffffffff0301e3ef0300000000046a525353e899ac0500000000075153ab6a65abac259bea0400000000007b739972\", \"53516aacac6aac\", 1, 955403557, \"5d366a7f4346ae18aeb7c9fc4dab5af71173184aa20ed22fcb4ea8511ad25449\"],\n\t[\"58a4fed801fbd8d92db9dfcb2e26b6ff10b120204243fee954d7dcb3b4b9b53380e7bb8fb60100000003006351ffffffff02a0795b050000000006536351ac6aac2718d00200000000075151acabac515354d21ba1\", \"005363515351\", 0, -1322430665, \"bbee941bbad950424bf40e3623457db47f60ed29deaa43c99dec702317cb3326\"],\n\t[\"32765a0b02e455793d9ce530e9f6a44bcbc612e893a875b5da61d822dc56d8245166c398b403000000085353abac6300006a6bdee2a78d0d0b6a5ea666eed70b9bfea99d1d612ba3878f615c4da10d4a521cba27155002000000035363abffffffff043cd42401000000000551656a53653685320100000000030000511881bc0500000000065165abab636a20169f010000000007acab656aac63acdb0706a8\", \"65ac53ab53\", 0, 1936499176, \"5c5a9c3a5de7dc7a82bc171c9d3505913b8bcc450bc8b2d11772c1a1d781210b\"],\n\t[\"17fad0d303da0d764fedf9f2887a91ea625331b28704940f41e39adf3903d8e75683ef6d46020000000151ffffffffff376eea4e880bcf0f03d33999104aafed2b3daf4907950bb06496af6b51720a020000000900636a63525253525196521684f3b08497bad2c660b00b43a6a517edc58217876eb5e478aa3b5fda0f29ee1bea00000000046aacab6affffffff03dde8e2050000000007ac5365ac51516a14772e000000000005630000abacbbb360010000000006ab5251ab656a50f180f0\", \"0053\", 0, -1043701251, \"a3bdf8771c8990971bff9b4e7d59b7829b067ed0b8d3ac1ec203429811384668\"],\n\t[\"236c32850300045e292c84ede2b9ab5733ba08315a2bb09ab234c4b4e8894808edbdac0d3b020000000653635363abacffffffffd3f696bb31fdd18a72f3fc2bb9ae54b416a253fc37c1a0f0180b52d35bad49440100000004650053abffffffffa85c75a2406d82a93b12e555b66641c1896a4e83ae41ef1038218311e38ace060200000006abab006a51ac104b5e6701e2842c04000000000800630051ac0000ab00000000\", \"ab63ac6a516a\", 1, -1709887524, \"8c29ea8ef60c5a927fccdba8ea385db6b6b84d98e891db45f5d4ee3148d3f5a7\"],\n\t[\"b78d5fd601345f3100af494cdf447e7d4076179f940035b0ebe8962587d4d0c9c6c9fc34ee0300000003516a6affffffff03dc5c890100000000085353ac53ac6a52534ac941040000000007ac63656a51ab51d4266b0100000000036aacac70731f2d\", \"005351ab0053\", 0, -1789071265, \"d5f1c1cb35956a5711d67bfb4cedbc67e77c089b912d688ad440ff735adb390d\"],\n\t[\"5a2257df03554550b774e677f348939b37f8e765a212e566ce6b60b4ea8fed4c9504b7f7d1000000000653655265ab5258b67bb931df15b041177cf9599b0604160b79e30f3d7a594e7826bae2c29700f6d8f8f40300000005515300ac6a159cf8808a41f504eb5c2e0e8a9279f3801a5b5d7bc6a70515fbf1c5edc875bb4c9ffac500000000050063510052ffffffff0422a90105000000000965006a650000516a006417d2020000000006526363ab00524d969d0100000000035153acc4f077040000000005ac5200636500000000\", \"6a52\", 1, -1482463464, \"37b794b05d0687c9b93d5917ab068f6b2f0e38406ff04e7154d104fc1fb14cdc\"],\n\t[\"e0032ad601269154b3fa72d3888a3151da0aed32fb2e1a15b3ae7bee57c3ddcffff76a1321010000000100110d93ae03f5bd080100000000075263516a6551002871e60100000000046a005252eaa753040000000004ab6aab526e325c71\", \"630052\", 0, -1857873018, \"ea117348e94de86381bb8ad1c7f93b8c623f0272104341701bb54e6cb433596c\"],\n\t[\"014b2a5304d46764817aca180dca50f5ab25f2e0d5749f21bb74a2f8bf6b8b7b3fa8189cb7030000000965ac5165ab6a51ac6360ecd91e8abc7e700a4c36c1a708a494c94bb20cbe695c408543146566ab22be43beae9103000000045163ab00ffffffffffa48066012829629a9ec06ccd4905a05df0e2b745b966f6a269c9c8e13451fc00000000026565ffffffffc40ccadc21e65fe8a4b1e072f4994738ccaf4881ae6fede2a2844d7da4d199ab02000000065152ab536aabffffffff01b6e054030000000004515352ab3e063432\", \"\", 0, 1056459916, \"a7aff48f3b8aeb7a4bfe2e6017c80a84168487a69b69e46681e0d0d8e63a84b6\"],\n\t[\"c4ef04c103c5dde65410fced19bf6a569549ecf01ceb0db4867db11f2a3a3eef0320c9e8e001000000085100536a53516aabffffffff2a0354fa5bd96f1e28835ffe30f52e19bd7d5150c687d255021a6bec03cf4cfd03000000056a006300514900c5b01d3d4ae1b97370ff1155b9dd0510e198d266c356d6168109c54c11b4c283dca00300000002ababffffffff02e19e3003000000000451655351fa5c0003000000000163ef1fc64b\", \"51636a51ab630065\", 1, -1754709177, \"0a281172d306b6a32e166e6fb2a2cc52c505c5d60ea448e9ba7029aa0a2211e1\"],\n\t[\"29083fe00398bd2bb76ceb178f22c51b49b5c029336a51357442ed1bac35b67e1ae6fdf13100000000066a6500acab51ffffffffe4ca45c9dc84fd2c9c47c7281575c2ba4bf33b0b45c7eca8a2a483f9e3ebe4b3010000000200abffffffffdf47ad2b8c263fafb1e3908158b18146357c3a6e0832f718cd464518a219d18303000000096352ac656351ac0052daddfb3b0231c36f00000000000400526a5275c7e0020000000001ab00000000\", \"acab536aac52\", 2, 300802386, \"82ebc07b16cff0077e9c1a279373185b3494e39d08fd3194aae6a4a019377509\"],\n\t[\"1201ab5d04f89f07c0077abd009762e59db4bb0d86048383ba9e1dad2c9c2ad96ef660e6d00200000007ab6a65ac5200652466fa5143ab13d55886b6cdc3d0f226f47ec1c3020c1c6e32602cd3428aceab544ef43e00000000086a6a6a526a6a5263ffffffffd5be0b0be13ab75001243749c839d779716f46687e2e9978bd6c9e2fe457ee48020000000365abab1e1bac0f72005cf638f71a3df2e3bbc0fa35bf00f32d9c7dc9c39a5e8909f7d53170c8ae0200000008ab6a51516363516affffffff02f0a6210500000000036300ac867356010000000009acab65ac6353536a659356d367\", \"ac53535252\", 0, 917543338, \"418acc156c2bc76a5d7baa58db29f1b4cf6c266c9222ed167ef5b4d47f0e0f41\"],\n\t[\"344fa11e01c19c4dd232c77742f0dd0aeb3695f18f76da627628741d0ee362b0ea1fb3a2180200000007635151005100529bab25af01937c1f0500000000055153ab53656e7630af\", \"6351005163ac51\", 0, -629732125, \"228ca52a0a376fe0527a61cfa8da6d7baf87486bba92d49dfd3899cac8a1034f\"],\n\t[\"b2fda1950191358a2b855f5626a0ebc830ab625bea7480f09f9cd3b388102e35c0f303124c030000000565ac65ab53ffffffff03f9c5ec04000000000765ab51516551650e2b9f0500000000045365525284e8f6040000000001ac00000000\", \"ac51655253\", 0, 1433027632, \"d2fa7e13c34cecda5105156bd2424c9b84ee0a07162642b0706f83243ff811a8\"],\n\t[\"a4a6bbd201aa5d882957ac94f2c74d4747ae32d69fdc765add4acc2b68abd1bdb8ee333d6e0300000008516a6552515152abffffffff02c353cb040000000007ac6351ab51536588bd320500000000066552525253ac00000000\", \"\", 0, 1702060459, \"499da7d74032388f820645191ac3c8d20f9dba8e8ded7fa3a5401ea2942392a1\"],\n\t[\"584e8d6c035a6b2f9dac2791b980a485994bf38e876d9dda9b77ad156eee02fa39e19224a60300000003ab636529db326cc8686a339b79ab6b6e82794a18e0aabc19d9ad13f31dee9d7aad8eff38288588020000000452530052ffffffff09a41f07755c16cea1c7e193c765807d18cadddca6ec1c2ed7f5dcdca99e90e80000000001acffffffff01cba62305000000000451ac63acccdf1f67\", \"ab536a6363\", 2, -27393461, \"1125645b49202dca2df2d76dae51877387903a096a9d3f66b5ac80e042c95788\"],\n\t[\"83a583d204d926f2ee587a83dd526cf1e25a44bb668e45370798f91a2907d184f7cddcbbc7030000000700ab6565536a539f71d3776300dffdfa0cdd1c3784c9a1f773e34041ca400193612341a9c42df64e3f550e01000000050052515251ffffffff52dab2034ab0648553a1bb8fc4e924b2c89ed97c18dfc8a63e248b454035564b01000000015139ab54708c7d4d2c2886290f08a5221cf69592a810fd1979d7b63d35c271961e710424fd0300000005ac65ac5251ffffffff01168f7c030000000000a85e5fb0\", \"6a536353656a00\", 0, 179595345, \"5350a31ac954a0b49931239d0ecafbf34d035a537fd0c545816b8fdc355e9961\"],\n\t[\"ffd35d51042f290108fcb6ea49a560ba0a6560f9181da7453a55dfdbdfe672dc800b39e7320200000006630065516a65f2166db2e3827f44457e86dddfd27a8af3a19074e216348daa0204717d61825f198ec0030100000006ab51abab00abffffffffdf41807adb7dff7db9f14d95fd6dc4e65f8402c002d009a3f1ddedf6f4895fc8030000000500ab006a65a5a848345052f860620abd5fcd074195548ce3bd0839fa9ad8642ed80627bf43a0d47dbd010000000765ab006a656a53b38cdd6502a186da05000000000765ab00ab006a53527c0e0100000000085365ab51acacac52534bd1b1\", \"6a635253ac0000\", 0, 1095082149, \"3c05473a816621a3613f0e903faa1a1e44891dd40862b029e41fc520776350fa\"],\n\t[\"6c9a4b98013c8f1cae1b1df9f0f2de518d0c50206a0ab871603ac682155504c0e0ce946f460100000000ffffffff04e9266305000000000753535100ac6aacded39e04000000000365ac6ab93ccd010000000002515397bf3d050000000003ab636300000000\", \"63520052ac656353\", 0, -352633155, \"936eff8cdfd771be24124da87c7b24feb48da7cbc2c25fb5ba13d1a23255d902\"],\n\t[\"e01dc7f0021dc07928906b2946ca3e9ac95f14ad4026887101e2d722c26982c27dc2b59fdb0000000005ac5200516ab5a31ffadcbe74957a5a3f97d7f1475cc6423fc6dbc4f96471bd44c70cc736e7dec0d1ea020000000951636a526a52abac53ffffffff04bc2edd05000000000252ab528c7b02000000000952ac51526500525353324820040000000002005380c713000000000009630065ab00ac525252451bbb48\", \"53ab65ac\", 0, -552384418, \"69c0b30f4c630a6c878fde6ea6b74dae94f4eb3bcfbde2dc3649e1a9ada00757\"],\n\t[\"009046a1023f266d0113556d604931374d7932b4d6a7952d08fbd9c9b87cbd83f4f4c178b4030000000452ac526346e73b438c4516c60edd5488023131f07acb5f9ea1540b3e84de92f4e3c432289781ea4900000000046500655357dfd6da02baef910100000000026a007d101703000000000800516500abacac5100000000\", \"6aab6553ac\", 0, -802456605, \"f8757fbb4448ca34e0cd41b997685b37238d331e70316659a9cc9087d116169d\"],\n\t[\"df76ec0801a3fcf3d18862c5f686b878266dd5083f16cf655facab888b4cb3123b3ce5db7e01000000010010e7ac6a0233c83803000000000365ac51faf14a040000000004ac51655100000000\", \"6353acab\", 0, 15705861, \"e7d873aa079a19ec712b269a37d2670f60d8cb334c4f97e2e3fd10eeb8ee5f5e\"],\n\t[\"828fd3e0031084051ccef9cfdd97fae4d9cc50c0dae36bd22a3ff332881f17e9756c3e288e0200000004ab535363961a2ccccaf0218ec6a16ba0c1d8b5e93cfd025c95b6e72bc629ec0a3f47da7a4c396dad01000000025353ffffffff19ad28747fb32b4caf7b5dbd9b2da5a264bedb6c86d3a4805cd294ae53a86ac40200000009ab53535351ab6551abffffffff04a41650030000000005656aab6aab8331a304000000000700516365ac516a0d2a47010000000007abac516353abacdebc19040000000006ab5300636a6300000000\", \"51ab52ab53ac52\", 0, 1866105980, \"311094b4d73e31aefc77e97859ef07ca2f07a7b7e4d7def80c69d3f5d58527e5\"],\n\t[\"c4b80f850323022205b3e1582f1ed097911a81be593471a8dce93d5c3a7bded92ef6c7c1260100000002006affffffff70294d62f37c3da7c5eae5d67dce6e1b28fedd7316d03f4f48e1829f78a88ae801000000096a5200530000516351f6b7b544f7c39189d3a2106ca58ce4130605328ce7795204be592a90acd81bef517d6f170200000000ffffffff012ab8080000000000075100006365006335454c1e\", \"53ac6a536aacac\", 0, -1124103895, \"06277201504e6bf8b8c94136fad81b6e3dadacb9d4a2c21a8e10017bfa929e0e\"],\n\t[\"8ab69ed50351b47b6e04ac05e12320984a63801716739ed7a940b3429c9c9fed44d3398ad40300000006536a516a52638171ef3a46a2adb8025a4884b453889bc457d63499971307a7e834b0e76eec69c943038a0300000000ffffffff566bb96f94904ed8d43d9d44a4a6301073cef2c011bf5a12a89bedbaa03e4724030000000265acb606affd01edea38050000000008515252516aacac6300000000\", \"65000000006365ac53\", 0, -1338942849, \"7912573937824058103cb921a59a7f910a854bf2682f4116a393a2045045a8c3\"],\n\t[\"2484991e047f1cf3cfe38eab071f915fe86ebd45d111463b315217bf9481daf0e0d10902a402000000006e71a424eb1347ffa638363604c0d5eccbc90447ff371e000bf52fc743ec832851bb564a0100000001abffffffffef7d014fad3ae7927948edbbb3afe247c1bcbe7c4c8f5d6cf97c799696412612020000000851536a5353006a001dfee0d7a0dd46ada63b925709e141863f7338f34f7aebde85d39268ae21b77c3068c01d0000000008535151ab00636563ffffffff018478070200000000095200635365ac52ab5341b08cd3\", \"\", 3, 265623923, \"24cb420a53b4f8bb477f7cbb293caabfd2fc47cc400ce37dbbab07f92d3a9575\"],\n\t[\"54839ef9026f65db30fc9cfcb71f5f84d7bb3c48731ab9d63351a1b3c7bc1e7da22bbd508e0300000000442ad138f170e446d427d1f64040016032f36d8325c3b2f7a4078766bdd8fb106e52e8d20000000003656500ffffffff02219aa101000000000851ababac52ab00659646bd02000000000552acacabac24c394a5\", \"ac\", 0, 906807497, \"69264faadcd1a581f7000570a239a0a26b82f2ad40374c5b9c1f58730514de96\"],\n\t[\"5036d7080434eb4eef93efda86b9131b0b4c6a0c421e1e5feb099a28ff9dd8477728639f77030000000951516aab535152ab5391429be9cce85d9f3d358c5605cf8c3666f034af42740e94d495e28b9aaa1001ba0c87580300000008006552ab00ab006affffffffd838978e10c0c78f1cd0a0830d6815f38cdcc631408649c32a25170099669daa0000000002acab8984227e804ad268b5b367285edcdf102d382d027789250a2c0641892b480c21bf84e3fb0100000000b518041e023d8653010000000001004040fb0100000000080051ac5200636a6300000000\", \"52ac\", 0, 366357656, \"bd0e88829afa6bdc1e192bb8b2d9d14db69298a4d81d464cbd34df0302c634c6\"],\n\t[\"9ad5ccf503fa4facf6a27b538bc910cce83c118d6dfd82f3fb1b8ae364a1aff4dcefabd38f03000000096365655263ac655300807c48130c5937190a996105a69a8eba585e0bd32fadfc57d24029cbed6446d30ebc1f100100000004000053650f0ccfca1356768df7f9210cbf078a53c72e0712736d9a7a238e0115faac0ca383f219d0010000000600ab536552002799982b0221b8280000000000000c41320000000000086552ac6365636a6595f233a3\", \"6a5152\", 2, 553208588, \"f99c29a79f1d73d2a69c59abbb5798e987639e36d4c44125d8dc78a94ddcfb13\"],\n\t[\"669538a204047214ce058aed6a07ca5ad4866c821c41ac1642c7d63ed0054f84677077a84f030000000853abacab6a655353ffffffff70c2a071c115282924e3cb678b13800c1d29b6a028b3c989a598c491bc7c76c5030000000752ac52ac5163ac80420e8a6e43d39af0163271580df6b936237f15de998e9589ec39fe717553d415ac02a4030000000463635153184ad8a5a4e69a8969f71288c331aff3c2b7d1b677d2ebafad47234840454b624bf7ac1d03000000056a63abab63df38c24a02fbc63a040000000002ab535ec3dc050000000002536500000000\", \"635153\", 3, -190399351, \"9615541884dfb1feeb08073a6a6aa73ef694bc5076e52187fdf4138a369f94d9\"],\n\t[\"a7f139e502af5894be88158853b7cbea49ba08417fbbca876ca6614b5a41432be34499987b000000000765635165abac63ffffffff8b8d70e96c7f54eb70da0229b548ced438e1ca2ba5ddd648a027f72277ee1efc0100000001abffffffff044f2c4204000000000165e93f550100000000050000526a6a94550304000000000365536aadc21c0300000000016300000000\", \"6aacac6363ab5265ac\", 1, 2143189425, \"6e3f97955490d93d6a107c18d7fe402f1cada79993bb0ff0d096357261b3a724\"],\n\t[\"3b94438f0366f9f53579a9989b86a95d134256ce271da63ca7cd16f7dd5e4bffa17d35133f010000000100ffffffff1aaad0c721e06ec00d07e61a84fb6dc840b9a968002ce7e142f943f06fd143a10100000008535151ac51ab0053b68b8e9c672daf66041332163e04db3f6048534bd718e1940b3fc3811c4eef5b7a56888b01000000001d58e38c012e38e700000000000852ab53ac6365536a00000000\", \"ab655352\", 1, -935223304, \"b3b336de141d4f071313a2207b2a0c7cf54a070dd8d234a511b7f1d13e23b0c4\"],\n\t[\"e5dca8a20456de0a67e185fa6ea94085ceae478d2c15c73cb931a500db3a1b6735dd1649ec0200000005ab536aabab32d11bbdcb81361202681df06a6b824b12b5cb40bb1a672cf9af8f2a836e4d95b7839327030000000951005365ab65abacabb345085932939eef0c724adef8a57f9e1bf5813852d957c039b6a12d9c2f201ea520fb030000000009ac5352005165acac6a5efc6072f1a421dc7dc714fc6368f6d763a5d76d0278b95fc0503b9268ccfadb48213a2500000000026a53ffffffff039ee1c4020000000009ac5353ab6353535163184018000000000005655265526a9a4a8a050000000001ac00000000\", \"65ab53ab6a00ab6553\", 2, 1902561212, \"7928ae8e86c0b0cad1b2c120ea313087437974382ee6d46443ca5ac3f5878b88\"],\n\t[\"972128b904e7b673517e96e98d80c0c8ceceae76e2f5c126d63da77ffd7893fb53308bb2da0300000006ac6552ab52acffffffff4cac767c797d297c079a93d06dc8569f016b4bf7a7d79b605c526e1d36a40e2202000000095365ab636aac6a6a6a69928d2eddc836133a690cfb72ec2d3115bf50fb3b0d10708fa5d2ebb09b4810c426a1db01000000060052526300001e8e89585da7e77b2dd2e30625887f0660accdf29e53a614d23cf698e6fc8ab03310e87700000000076a520051acac6555231ddb0330ec2d03000000000200abfaf457040000000004ab6a6352bdc42400000000000153d6dd2f04\", \"\", 0, 209234698, \"4a92fec1eb03f5bd754ee9bfd70707dc4420cc13737374f4675f48529be518e4\"],\n\t[\"1fb4085b022c6cfb848f8af7ba3ba8d21bd23ffa9f0bfd181cb68bcaaf2074e66d4974a31602000000090000006a6a6500acab6c12c07d9f3dbd2d93295c3a49e3757119767097e7fd5371f7d1ba9ba32f1a67a5a426f00000000000ffffffff018fd2fc04000000000363ac5100000000\", \"65ab006a6aab526a\", 0, 1431502299, \"8b7dd0ff12ca0d8f4dbf9abf0abba00e897c2f6fd3b92c79f5f6a534e0b33b32\"],\n\t[\"5374f0c603d727f63006078bd6c3dce48bd5d0a4b6ea00a47e5832292d86af258ea0825c260000000009655353636352526a6af2221067297d42a9f8933dfe07f61a574048ff9d3a44a3535cd8eb7de79fb7c45b6f47320200000003ac006affffffff153d917c447d367e75693c5591e0abf4c94bbdd88a98ab8ad7f75bfe69a08c470200000005ac65516365ffffffff037b5b7b000000000001515dc4d904000000000004bb26010000000004536a6aac00000000\", \"516552516352ac\", 2, 328538756, \"8bb7a0129eaf4b8fc23e911c531b9b7637a21ab11a246352c6c053ff6e93fcb6\"],\n\t[\"c441132102cc82101b6f31c1025066ab089f28108c95f18fa67db179610247086350c163bd010000000651525263ab00ffffffff9b8d56b1f16746f075249b215bdb3516cbbe190fef6292c75b1ad8a8988897c3000000000751ab6553abab00ffffffff02f9078b000000000009ab0053ac51ac00ab51c0422105000000000651006563525200000000\", \"ac51\", 0, -197051790, \"55acd8293ed0be6792150a3d7ced6c5ccd153ca7daf09cee035c1b0dac92bb96\"],\n\t[\"ab82ad3b04545bd86b3bb937eb1af304d3ef1a6d1343ed809b4346cafb79b7297c09e1648202000000086351ac5200535353ffffffff95d32795bbaaf5977a81c2128a9ec0b3c7551b9b1c3d952876fcb423b2dfb9e80000000005515363acac47a7d050ec1a603627ce6cd606b3af314fa7964abcc579d92e19c7aba00cf6c3090d6d4601000000056a516551633e794768bfe39277ebc0db18b5afb5f0c8117dde9b4dfd5697e9027210eca76a9be20d63000000000700520063ab6aacffffffff01ec2ddc050000000008ac52ac65ac65ac5100000000\", \"536300abab\", 1, -2070209841, \"b362da5634f20be7267de78b545d81773d711b82fe9310f23cd0414a8280801d\"],\n\t[\"8bff9d170419fa6d556c65fa227a185fe066efc1decf8a1c490bc5cbb9f742d68da2ab7f320100000007ab000053525365a7a43a80ab9593b9e8b6130a7849603b14b5c9397a190008d89d362250c3a2257504eb810200000007acabacac00ab51ee141be418f003e75b127fd3883dbf4e8c3f6cd05ca4afcaac52edd25dd3027ae70a62a00000000008ac52526a5200536affffffffb8058f4e1d7f220a1d1fa17e96d81dfb9a304a2de4e004250c9a576963a586ae0300000005abacac5363b9bc856c039c01d804000000000951656aac53005365acb0724e00000000000565abab63acea7c7a0000000000036a00ac00000000\", \"6565\", 1, -1349282084, \"2b822737c2affeefae13451d7c9db22ff98e06490005aba57013f6b9bbc97250\"],\n\t[\"0e1633b4041c50f656e882a53fde964e7f0c853b0ada0964fc89ae124a2b7ffc5bc97ea6230100000006ac6aacacabacffffffff2e35f4dfcad2d53ea1c8ada8041d13ea6c65880860d96a14835b025f76b1fbd9000000000351515121270867ef6bf63a91adbaf790a43465c61a096acc5a776b8e5215d4e5cd1492e611f761000000000600ac6aab5265ffffffff63b5fc39bcac83ca80ac36124abafc5caee608f9f63a12479b68473bd4bae769000000000965ac52acac5263acabffffffff0163153e020000000008ab005165ab65515300000000\", \"6a6aac00\", 0, -968477862, \"20732d5073805419f275c53784e78db45e53332ee618a9fcf60a3417a6e2ca69\"],\n\t[\"2b052c24022369e956a8d318e38780ef73b487ba6a8f674a56bdb80a9a63634c6110fb5154010000000251acffffffff48fe138fb7fdaa014d67044bc05940f4127e70c113c6744fbd13f8d51d45143e01000000005710db3804e01aa9030000000008acac6a516a5152abfd55aa01000000000751ab510000ac636d6026010000000000b97da9000000000000fddf3b53\", \"006552\", 0, 595461670, \"685d67d84755906d67a007a7d4fa311519467b9bdc6a351913246a41e082a29f\"],\n\t[\"073bc856015245f03b2ea2da62ccedc44ecb99e4250c7042f596bcb23b294c9dc92cfceb6b02000000095163abab52abab636afe292fb303b7c3f001000000000352636af3c49502000000000400ac6a535851850100000000066aac6553ab6500000000\", \"ab6aab53006aab52\", 0, 247114317, \"123916c6485cf23bfea95654a8815fbf04ce4d21a3b7f862805c241472906658\"],\n\t[\"7888b71403f6d522e414d4ca2e12786247acf3e78f1918f6d727d081a79813d129ee8befce0100000009ab516a6353ab6365abffffffff4a882791bf6400fda7a8209fb2c83c6eef51831bdf0f5dacde648859090797ec030000000153ffffffffbb08957d59fa15303b681bad19ccf670d7d913697a2f4f51584bf85fcf91f1f30200000008526565ac52ac63acffffffff0227c0e8050000000001ac361dc801000000000800515165ab00ab0000000000\", \"656a\", 2, 1869281295, \"f43378a0b7822ad672773944884e866d7a46579ee34f9afc17b20afc1f6cf197\"],\n\t[\"cc4dda57047bd0ca6806243a6a4b108f7ced43d8042a1acaa28083c9160911cf47eab910c40200000007526a0000ab6a63e4154e581fcf52567836c9a455e8b41b162a78c85906ccc1c2b2b300b4c69caaaa2ba0230300000008ab5152ac5100ab65ffffffff69696b523ed4bd41ecd4d65b4af73c9cf77edf0e066138712a8e60a04614ea1c0300000004ab6a000016c9045c7df7836e05ac4b2e397e2dd72a5708f4a8bf6d2bc36adc5af3cacefcf074b8b403000000065352ac5252acffffffff01d7e380050000000000cf4e699a\", \"525163656351\", 1, -776533694, \"ff18c5bffd086e00917c2234f880034d24e7ea2d1e1933a28973d134ca9e35d2\"],\n\t[\"b7877f82019c832707a60cf14fba44cfa254d787501fdd676bd58c744f6e951dbba0b3b77f0200000009ac515263ac53525300a5a36e500148f89c0500000000085265ac6a6a65acab00000000\", \"6563\", 0, -1785108415, \"cb6e4322955af12eb29613c70e1a00ddbb559c887ba844df0bcdebed736dffbd\"],\n\t[\"aeb14046045a28cc59f244c2347134d3434faaf980961019a084f7547218785a2bd03916f3000000000165f852e6104304955bda5fa0b75826ee176211acc4a78209816bbb4419feff984377b2352200000000003a94a5032df1e0d60390715b4b188c330e4bb7b995f07cdef11ced9d17ee0f60bb7ffc8e0100000002516513e343a5c1dc1c80cd4561e9dddad22391a2dbf9c8d2b6048e519343ca1925a9c6f0800a020000000665516365ac513180144a0290db27000000000006ab655151ab5138b187010000000007ab5363abac516a9e5cd98a\", \"53ac\", 0, 478591320, \"e8d89a302ae626898d4775d103867a8d9e81f4fd387af07212adab99946311ef\"],\n\t[\"c9270fe004c7911b791a00999d108ce42f9f1b19ec59143f7b7b04a67400888808487bd59103000000066a0052ac6565b905e76687be2dd7723b22c5e8269bc0f2000a332a289cfc40bc0d617cfe3214a61a85a30300000007ac63ac00635251560871209f21eb0268f175b8b4a06edd0b04162a974cf8b5dada43e499a1f22380d35ede0300000000792213fc58b6342cc8100079f9f5f046fb89f2d92cf0a2cb6d07304d32d9da858757037c0000000008abab51636565516affffffff02c72a8b03000000000452acac530dfb9f05000000000096f94307\", \"5253ab536351\", 3, 543688436, \"0278adbcc476d135493ae9bdcd7b3c2002df17f2d81c17d631c50c73e546c264\"],\n\t[\"57a5a04c0278c8c8e243d2df4bb716f81d41ac41e2df153e7096f5682380c4f441888d9d260300000004ab63ab6afdbe4203525dff42a7b1e628fe22bccaa5edbb34d8ab02faff198e085580ea5fcdb0c61b0000000002ac6affffffff03375e6c05000000000663ab516a6a513cb6260400000000007ca328020000000006516a636a52ab94701cc7\", \"0053ac5152\", 0, -550925626, \"b7ca991ab2e20d0158168df2d3dd842a57ab4a3b67cca8f45b07c4b7d1d11126\"],\n\t[\"072b75a504ad2550c2e9a02614bc9b2a2f50b5b553af7b87c0ef07c64ddc8d8934c96d216401000000036aabaca1387242a5bcd21099b016ad6045bed7dce603472757d9822cc5f602caa4ae20414d378b02000000026a63e4ac816734acdc969538d6f70b8ab43a2589f55e0177a4dc471bdd0eb61d59f0f46f6bb801000000065351526aab52d9f2977be76a492c3a7617b7a16dc29a3b0a7618f328c2f7d4fd9bafe760dc427a5066ef000000000465635165ffffffff02c5793600000000000165296820050000000002ac6300000000\", \"53006a6aac0052ab\", 2, 66084636, \"437e89bb6f70fd2ed2feef33350b6f6483b891305e574da03e580b3efd81ae13\"],\n\t[\"7e27c42d0279c1a05eeb9b9faedcc9be0cab6303bde351a19e5cbb26dd0d594b9d74f40d2b020000000200518c8689a08a01e862d5c4dcb294a2331912ff11c13785be7dce3092f154a005624970f84e0200000000500cf5a601e74c1f0000000000076aab52636a6a5200000000\", \"6500006a5351\", 0, 449533391, \"535ba819d74770d4d613ee19369001576f98837e18e1777b8246238ff2381dd0\"],\n\t[\"11414de403d7f6c0135a9df01cb108c1359b8d4e105be50a3dcba5e6be595c8817217490b20000000003005263ffffffff0c6becb9c3ad301c8dcd92f5cbc07c8bed7973573806d1489316fc77a829da03030000000700005253535352ffffffff2346d74ff9e12e5111aa8779a2025981850d4bf788a48de72baa2e321e4bc9ca00000000056352acab63cc585b64045e0385050000000009ab5253ab516aacac00efa9cf0300000000065200635151acbe80330400000000070063635100ab000be159050000000007525300655300ac00000000\", \"51656a0051ab\", 0, 683137826, \"d4737f3b58f3e5081b35f36f91acde89dda00a6a09d447e516b523e7a99264d5\"],\n\t[\"1c6b5f29033fc139338658237a42456123727c8430019ca25bd71c6168a9e35a2bf54538d80100000008536aac52ac6a6a52ffffffff3fb36be74036ff0c940a0247c451d923c65f826793d0ac2bb3f01ecbec8033290100000007ab000051ab6363ffffffff5d9eca0cf711685105bd060bf7a67321eaef95367acffab36ce8dedddd632ee2000000000652ac6a63ac517167319e032d26de040000000003516363dc38fb010000000000b37b00000000000006ab520051ac534baba51f\", \"636300ababac6563\", 0, -2049129935, \"3282a2ec6b8c87c9303e6060c17b421687db1bd35fbfa0345b48f2490e15b6cc\"],\n\t[\"978b9dad0214cfc7ce392d74d9dcc507350dc34007d72e4125861c63071ebf2cc0a6fd4856020000000651ac6a6aab52ffffffff47f20734e3370e733f87a6edab95a7a268ae44db7a8974e255614836b22938720200000008635265ac51516553ffffffff0137b2560100000000035252ac2f3363e9\", \"006aab6352\", 1, 2014249801, \"55611a5fb1483bce4c14c33ed15198130e788b72cd8929b2ceef4dd68b1806bf\"],\n\t[\"442f1c8703ab39876153c241ab3d69f432ba6db4732bea5002be45c8ca10c3a2356fe0e9590300000001accb2b679cab7c58a660cb6d4b3452c21cd7251a1b77a52c300f655f5baeb6fa27ff5b79880300000003005252e5ccf55712bc8ed6179f6726f8a78f3018a7a0391594b7e286ef5ee99efdcde302a102cc0200000009006352526351536a63ffffffff04443f63030000000006536a63ab63651405fb020000000009ac535351525300ab6a9f172b000000000004ab535263ad5c50050000000008656a65ab630000ac00000000\", \"65636aab006552\", 2, 2125838294, \"b3ff10f21e71ebc8b25fe058c4074c42f08617e0dcc03f9e75d20539d3242644\"],\n\t[\"2b3470dd028083910117f86614cdcfb459ee56d876572510be4df24c72e8f58c70d5f5948b03000000066aab65635265da2c3aac9d42c9baafd4b655c2f3efc181784d8cba5418e053482132ee798408ba43ccf90300000000ffffffff047dda4703000000000765516a52ac53009384a603000000000651636a63ab6a8cf57a03000000000352ab6a8cf6a405000000000952636a6a6565525100661e09cb\", \"ac520063ac6a6a52\", 1, 1405647183, \"9b360c3310d55c845ef537125662b9fe56840c72136891274e9fedfef56f9bb5\"],\n\t[\"d74282b501be95d3c19a5d9da3d49c8a88a7049c573f3788f2c42fc6fa594f59715560b9b00000000009655353525265ac52ac9772121f028f8303030000000003510065af5f47040000000007ac516a6551630000000000\", \"acab53006363ac\", 0, -1113209770, \"2f482b97178f17286f693796a756f4d7bd2dfcdbecd4142528eec1c7a3e5101a\"],\n\t[\"3a5644a9010f199f253f858d65782d3caec0ac64c3262b56893022b9796086275c9d4d097b02000000009d168f7603a67b30050000000007ac51536a0053acd9d88a050000000007655363535263ab3cf1f403000000000352ac6a00000000\", \"005363536565acac6a\", 0, -1383947195, \"6390ab0963cf611e0cea35a71dc958b494b084e6fd71d22217fdc5524787ade6\"],\n\t[\"67b3cc43049d13007485a8133b90d94648bcf30e83ba174f5486ab42c9107c69c5530c5e1f0000000003005100ffffffff9870ebb65c14263282ea8d41e4f4f40df16b565c2cf86f1d22a9494cad03a67f01000000016a5a121bee5e359da548e808ae1ad6dfccae7c67cbb8898d811638a1f455a671e822f228ef030000000151c1fcc9f9825f27c0dde27ea709da62a80a2ff9f6b1b86a5874c50d6c37d39ae31fb6c8a0030000000163553b8786020ca74a00000000000665635153ab5275c0760000000000020052e659b05d\", \"636aab6a6a\", 0, -342795451, \"f77c3322c97b1681c17b1eba461fa27b07e04c1534e8aaf735a49cab72c7c2e2\"],\n\t[\"bda1ff6804a3c228b7a12799a4c20917301dd501c67847d35da497533a606701ad31bf9d5e0300000001ac16a6c5d03cf516cd7364e4cbbf5aeccd62f8fd03cb6675883a0636a7daeb650423cb1291010000000500656553ac4a63c30b6a835606909c9efbae1b2597e9db020c5ecfc0642da6dc583fba4e84167539a8020000000865525353515200acffffffff990807720a5803c305b7da08a9f24b92abe343c42ac9e917a84e1f335aad785d00000000026a52ffffffff04981f20030000000001ab8c762200000000000253ab690b9605000000000151ce88b301000000000753526a6a51006500000000\", \"000052ac52530000\", 1, -1809193140, \"5299b0fb7fc16f40a5d6b337e71fcd1eb04d2600aefd22c06fe9c71fe0b0ba54\"],\n\t[\"2ead28ff0243b3ab285e5d1067f0ec8724224402b21b9cef9be962a8b0d153d401be99bbee0000000004ac635153ffffffff6985987b7c1360c9fa8406dd6e0a61141709f0d5195f946da55ed83be4e3895301000000020053ffffffff016503d20500000000085251ac6a65656a6a00000000\", \"51abab\", 1, 1723793403, \"67483ee62516be17a2431a163e96fd88a08ff2ce8634a52e42c1bc04e30f3f8a\"],\n\t[\"db4904e6026b6dd8d898f278c6428a176410d1ffbde75a4fa37cda12263108ccd4ca6137440100000007656a0000515263ffffffff1db7d5005c1c40da0ed17b74cf6b2a6ee2c33c9e0bacda76c0da2017dcac2fc70200000004abab6a53ffffffff0454cf2103000000000153463aef000000000009ab6a630065ab52636387e0ed050000000000e8d16f05000000000352ac63e4521b22\", \"\", 1, 1027042424, \"48315a95e49277ab6a2d561ee4626820b7bab919eea372b6bf4e9931ab221d04\"],\n\t[\"dca31ad10461ead74751e83d9a81dcee08db778d3d79ad9a6d079cfdb93919ac1b0b61871102000000086500525365ab51ac7f7e9aed78e1ef8d213d40a1c50145403d196019985c837ffe83836222fe3e5955e177e70100000006525152525300ffffffff5e98482883cc08a6fe946f674cca479822f0576a43bf4113de9cbf414ca628060100000006ac53516a5253ffffffff07490b0b898198ec16c23b75d606e14fa16aa3107ef9818594f72d5776805ec502000000036a0052ffffffff01932a2803000000000865ab6551ac6a516a2687aa06\", \"635300ac\", 2, -1880362326, \"74d6a2fa7866fd8b74b2e34693e2d6fd690410384b7afdcd6461b1ae71d265ce\"],\n\t[\"e14e1a9f0442ab44dfc5f6d945ad1ff8a376bc966aad5515421e96ddbe49e529614995cafc03000000055165515165fffffffff97582b8290e5a5cfeb2b0f018882dbe1b43f60b7f45e4dd21dbd3a8b0cfca3b0200000000daa267726fe075db282d694b9fee7d6216d17a8c1f00b2229085495c5dc5b260c8f8cd5d000000000363ac6affffffffaab083d22d0465471c896a438c6ac3abf4d383ae79420617a8e0ba8b9baa872b010000000963526563ac5363ababd948b5ce022113440200000000076a636552006a53229017040000000000e6f62ac8\", \"526353636a65\", 3, -485265025, \"1bc8ad76f9b7c366c5d052dc479d6a8a2015566d3a42e93ab12f727692c89d65\"],\n\t[\"720d4693025ca3d347360e219e9bc746ef8f7bc88e8795162e5e2f0b0fc99dc17116fc937100000000046353520045cb1fd79824a100d30b6946eab9b219daea2b0cdca6c86367c0c36af98f19ac64f3575002000000008a1c881003ed16f3050000000008536a63630000abac45e0e704000000000151f6551a05000000000963536565515363abab00000000\", \"6553ab6a6a510000ab\", 1, 1249091393, \"a575fa4f59a8e90cd07de012c78fe8f981183bb170b9c50fcc292b8c164cbc3b\"],\n\t[\"69df842a04c1410bfca10896467ce664cfa31c681a5dac10106b34d4b9d4d6d0dc1eac01c1000000000551536a5165269835ca4ad7268667b16d0a2df154ec81e304290d5ed69e0069b43f8c89e673328005e200000000076a5153006aacabffffffffc9314bd80b176488f3d634360fcba90c3a659e74a52e100ac91d3897072e3509010000000765abac51636363ffffffff0e0768b13f10f0fbd2fa3f68e4b4841809b3b5ba0e53987c3aaffcf09eee12bf0300000008ac535263526a53ac514f4c2402da8fab0400000000001ef15201000000000451526a52d0ec9aca\", \"525365ac52\", 1, 313967049, \"a72a760b361af41832d2c667c7488dc9702091918d11e344afc234a4aea3ec44\"],\n\t[\"adf2340d03af5c589cb5d28c06635ac07dd0757b884d4777ba85a6a7c410408ad5efa8b19001000000045100ab00ffffffff808dc0231c96e6667c04786865727013922bcb7db20739b686f0c17f5ba70e8f0300000000fd2332a654b580881a5e2bfec8313f5aa878ae94312f37441bf2d226e7fc953dcf0c77ab000000000163aa73dc580412f8c2050000000005636aacac63da02d502000000000153e74b52020000000001536b293d030000000009636552ababacab526500000000\", \"000052ab52ababab\", 0, -568651175, \"2c45d021db545df7167ac03c9ee56473f2398d9b2b739cf3ff3e074501d324f8\"],\n\t[\"e4fec9f10378a95199c1dd23c6228732c9de0d7997bf1c83918a5cfd36012476c0c3cba24002000000085165536500ac0000ad08ab93fb49d77d12a7ccdbb596bc5110876451b53a79fdce43104ff1c316ad63501de801000000046a6352ab76af9908463444aeecd32516a04dd5803e02680ed7f16307242a794024d93287595250f4000000000089807279041a82e603000000000200521429100200000000055253636a63f20b940400000000004049ed04000000000500ab5265ab43dfaf7d\", \"6563526aac\", 2, -1923470368, \"32f3c012eca9a823bebb9b282240aec40ca65df9f38da43b1dcfa0cac0c0df7e\"],\n\t[\"4000d3600100b7a3ff5b41ec8d6ccdc8b2775ad034765bad505192f05d1f55d2bc39d0cbe10100000007ab5165ac6a5163ffffffff034949150100000000026a6a92c9f6000000000008ab6553ab6aab635200e697040000000007636a5353525365237ae7d2\", \"52000063\", 0, -880046683, \"c76146f68f43037289aaeb2bacf47408cddc0fb326b350eb4f5ef6f0f8564793\"],\n\t[\"eabc0aa701fe489c0e4e6222d72b52f083166b49d63ad1410fb98caed027b6a71c02ab830c03000000075253ab63530065ffffffff01a5dc0b05000000000253533e820177\", \"\", 0, 954499283, \"1d849b92eedb9bf26bd4ced52ce9cb0595164295b0526842ab1096001fcd31b1\"],\n\t[\"d48d55d304aad0139783b44789a771539d052db565379f668def5084daba0dfd348f7dcf6b00000000006826f59e5ffba0dd0ccbac89c1e2d69a346531d7f995dea2ca6d7e6d9225d81aec257c6003000000096a655200ac656552acffffffffa188ffbd5365cae844c8e0dea6213c4d1b2407274ae287b769ab0bf293e049eb0300000005ac6a6aab51ad1c407c5b116ca8f65ed496b476183f85f072c5f8a0193a4273e2015b1cc288bf03e9e2030000000252abffffffff04076f44040000000006655353abab53be6500050000000003ac65ac3c15040500000000095100ab536353516a52ed3aba04000000000900ac53ab53636aabac00000000\", \"5253526563acac\", 2, -1506108646, \"bbee17c8582514744bab5df50012c94b0db4aff5984d2e13a8d09421674404e2\"],\n\t[\"9746f45b039bfe723258fdb6be77eb85917af808211eb9d43b15475ee0b01253d33fc3bfc502000000065163006a655312b12562dc9c54e11299210266428632a7d0ee31d04dfc7375dcad2da6e9c11947ced0e000000000009074095a5ac4df057554566dd04740c61490e1d3826000ad9d8f777a93373c8dddc4918a00000000025351ffffffff01287564030000000004636a00ab00000000\", \"52\", 2, -1380411075, \"84af1623366c4db68d81f452b86346832344734492b9c23fbb89015e516c60b2\"],\n\t[\"8731b64903d735ba16da64af537eaf487b57d73977f390baac57c7b567cb2770dfa2ef65870100000001635aedd990c42645482340eacb0bfa4a0a9e888057389c728b5b6a8691cdeb1a6a67b45e140200000008ac53526a52516551ffffffff45c4f567c47b8d999916fd49642cbc5d10d43c304b99e32d044d35091679cb860100000003006a51ffffffff0176d6c200000000000000000000\", \"ab6a65ab53\", 2, -1221546710, \"ccfdba36d9445f4451fb7cbf0752cc89c23d4fc6fff0f3930d20e116f9db0b95\"],\n\t[\"f5cfc52f016209ab1385e890c2865a74e93076595d1ca77cbe8fbf2022a2f2061a90fb0f3e010000000253acffffffff027de73f0200000000085252ac510052acac49cd6a020000000000e6c2cb56\", \"516552535300ab63\", 0, -1195302704, \"5532717402a2da01a1da912d824964024185ca7e8d4ad1748659dc393a14182b\"],\n\t[\"df0a32ae01c4672fd1abd0b2623aae0a1a8256028df57e532f9a472d1a9ceb194267b6ee190200000009536a6a51516a525251b545f9e803469a2302000000000465526500810631040000000000441f5b050000000006530051006aaceb183c76\", \"536a635252ac6a\", 0, 1601138113, \"9a0435996cc58bdba09643927fe48c1fc908d491a050abbef8daec87f323c58f\"],\n\t[\"d102d10c028b9c721abb259fe70bc68962f6cae384dabd77477c59cbeb1fb26266e091ba3e0100000002516affffffffe8d7305a74f43e30c772109849f4cd6fb867c7216e6d92e27605e69a0818899700000000026a65ecf82d58027db4620500000000026552c28ed3010000000001ab00000000\", \"0051ab515365\", 1, -131815460, \"1d1757a782cb5860302128bcbe9398243124a2f82d671a113f74f8e582c7a182\"],\n\t[\"cef930ed01c36fcb1d62ceef931bef57098f27a77a4299904cc0cbb44504802d535fb11557010000000153ffffffff02c8657403000000000863ac655253520063d593380400000000046aab536a00000000\", \"656a0051ab6365ab53\", 0, -351313308, \"e69dba3efb5c02af2ab1087d0a990678784671f4744d01ca097d71aec14dd8e9\"],\n\t[\"b1c0b71804dff30812b92eefb533ac77c4b9fdb9ab2f77120a76128d7da43ad70c20bbfb990200000002536392693e6001bc59411aebf15a3dc62a6566ec71a302141b0c730a3ecc8de5d76538b30f55010000000665535252ac514b740c6271fb9fe69fdf82bf98b459a7faa8a3b62f3af34943ad55df4881e0d93d3ce0ac0200000000c4158866eb9fb73da252102d1e64a3ce611b52e873533be43e6883137d0aaa0f63966f060000000001abffffffff04a605b604000000000851006a656a630052f49a0300000000000252515a94e1050000000009abac65ab0052abab00fd8dd002000000000651535163526a2566852d\", \"ac5363\", 0, -1718831517, \"b0dc030661783dd9939e4bf1a6dfcba809da2017e1b315a6312e5942d714cf05\"],\n\t[\"6a270ee404ebc8d137cfd4bb6b92aa3702213a3139a579c1fc6f56fbc7edd9574ef17b13f30100000009ab00ab656565ababacffffffffaa65b1ab6c6d87260d9e27a472edceb7dd212483e72d90f08857abf1dbfd46d10100000000fffffffff93c4c9c84c4dbbe8a912b99a2830cfe3401aebc919041de063d660e585fc9f002000000096aabacab52ac6a53acfa6dcef3f28355a8d98eee53839455445eeee83eecd2c854e784efa53cee699dbfecaebd0100000003ab6a51ffffffff04f7d71b050000000009ac6a536aac6a6365513c37650500000000065265abab6a53fa742002000000000039ed82030000000009516aac635165ab51ab2fdabd17\", \"ab535252526563\", 1, -1326210506, \"1dec0d5eb921bf5b2df39c8576e19c38d0c17254a4a0b78ac4b5422bcc426258\"],\n\t[\"3657e4260304ccdc19936e47bdf058d36167ee3d4eb145c52b224eff04c9eb5d1b4e434dfc0000000001ab58aefe57707c66328d3cceef2e6f56ab6b7465e587410c5f73555a513ace2b232793a74400000000036a006522e69d3a785b61ad41a635d59b3a06b2780a92173f85f8ed428491d0aaa436619baa9c4501000000046351abab2609629902eb7793050000000000a1b967040000000003525353a34d6192\", \"516a\", 0, -1761874713, \"0a2ff41f6d155d8d0e37cd9438f3b270df9f9214cda8e95c76d5a239ca189df2\"],\n\t[\"a0eb6dc402994e493c787b45d1f946d267b09c596c5edde043e620ce3d59e95b2b5b93d43002000000096a5252526aac63ab6555694287a279e29ee491c177a801cd685b8744a2eab83824255a3bcd08fc0e3ea13fb8820000000009abab6365ab52ab0063ffffffff029e424a040000000008acab53ab516a636a23830f0400000000016adf49c1f9\", \"ac0065ac6500005252\", 1, 669294500, \"e05e3d383631a7ed1b78210c13c2eb26564e5577db7ddfcea2583c7c014091d4\"],\n\t[\"6e67c0d3027701ef71082204c85ed63c700ef1400c65efb62ce3580d187fb348376a23e9710200000001655b91369d3155ba916a0bc6fe4f5d94cad461d899bb8aaac3699a755838bfc229d6828920010000000765536353526a52ffffffff04c0c792000000000005650052535372f79e000000000001527fc0ee010000000005ac5300ab65d1b3e902000000000251aba942b278\", \"6a5151\", 0, 1741407676, \"e657e2c8ec4ebc769ddd3198a83267b47d4f2a419fc737e813812acefad92ff7\"],\n\t[\"8f53639901f1d643e01fc631f632b7a16e831d846a0184cdcda289b8fa7767f0c292eb221a00000000046a53abacffffffff037a2daa01000000000553ac6a6a51eac349020000000005ac526552638421b3040000000007006a005100ac63048a1492\", \"ac65\", 0, 1033685559, \"da86c260d42a692358f46893d6f91563985d86eeb9ea9e21cd38c2d8ffcfcc4d\"],\n\t[\"491f99cb01bdfba1aa235e5538dac081fae9ce55f9622de483afe7e65105c2b0db75d360d200000000045251636340b60f0f041421330300000000096351ac000051636553ce2822040000000005516a00ac5180c8e40300000000025100caa8570400000000020000cfdc8da6\", \"6a5100516aab655365\", 0, -953727341, \"397c68803b7ce953666830b0221a5e2bcf897aa2ded8e36a6b76c497dcb1a2e1\"],\n\t[\"b3cad3a7041c2c17d90a2cd994f6c37307753fa3635e9ef05ab8b1ff121ca11239a0902e700300000009ab635300006aac5163ffffffffcec91722c7468156dce4664f3c783afef147f0e6f80739c83b5f09d5a09a57040200000004516a6552ffffffff969d1c6daf8ef53a70b7cdf1b4102fb3240055a8eaeaed2489617cd84cfd56cf020000000352ab53ffffffff46598b6579494a77b593681c33422a99559b9993d77ca2fa97833508b0c169f80200000009655300655365516351ffffffff04d7ddf800000000000853536a65ac6351ab09f3420300000000056aab65abac33589d04000000000952656a65655151acac944d6f0400000000006a8004ba\", \"005165\", 1, 1035865506, \"fe1dc9e8554deecf8f50c417c670b839cc9d650722ebaaf36572418756075d58\"],\n\t[\"e1cfd73b0125add9e9d699f5a45dca458355af175a7bd4486ebef28f1928d87864384d02df02000000036a0051ffffffff0357df030100000000036a5365777e2d04000000000763ab6a00005265f434a601000000000351655100000000\", \"ab53ab\", 0, -1936500914, \"950f4b4f72ccdf8a6a0f381265d6c8842fdb7e8b3df3e9742905f643b2432b69\"],\n\t[\"cf781855040a755f5ba85eef93837236b34a5d3daeb2dbbdcf58bb811828d806ed05754ab8010000000351ac53ffffffffda1e264727cf55c67f06ebcc56dfe7fa12ac2a994fecd0180ce09ee15c480f7d00000000096351516a51acac00ab53dd49ff9f334befd6d6f87f1a832cddfd826a90b78fd8cf19a52cb8287788af94e939d6020000000700525251ac526310d54a7e8900ed633f0f6f0841145aae7ee0cbbb1e2a0cae724ee4558dbabfdc58ba6855010000000552536a53abfd1b101102c51f910500000000096300656a525252656a300bee010000000009ac52005263635151abe19235c9\", \"53005365\", 2, 1422854188, \"d5981bd4467817c1330da72ddb8760d6c2556cd809264b2d85e6d274609fc3a3\"],\n\t[\"fea256ce01272d125e577c0a09570a71366898280dda279b021000db1325f27edda41a53460100000002ab53c752c21c013c2b3a01000000000000000000\", \"65\", 0, 1145543262, \"076b9f844f6ae429de228a2c337c704df1652c292b6c6494882190638dad9efd\"]\n]"
  },
  {
    "path": "test/src/sig/segwit/utils.ts",
    "content": "import { Buff } from '@cmdcode/buff-utils'\nimport { InputData } from '../../../../src'\n\ntype TestInput = [\n  prev_hash : string,\n  prev_idx  : number,\n  prev_spk  : string,\n  prev_amt  : number\n]\n\ntype TestData = [\n  inputs : TestInput[],\n  txhex  : string,\n  flags  : string\n]\n\ninterface TestVector {\n  txhex  : string\n  inputs : InputData\n  flags  : string[]\n}\n\nexport function parseVectors(vectors : any) : TestVector[] {\n  const test_vectors = vectors.filter(e => e.length > 1).map(e => {\n    const [ inputs, txhex, flags ] = e as TestData\n    const vin = inputs.map(e => {\n      const [ prev_hash, prev_idx, prev_spk, prev_value ] = e as TestInput\n      const script = prev_spk.split(' ')\n        .filter(e => !(e.startsWith('0x') && e.length === 4))\n        .map(e => e.startsWith('0x') \n          ? e.slice(2)\n          : (/^[0-9]+$/.test(e))\n            ? parseInt(e)\n            : 'OP_' + e\n      )\n      return {\n        txid: Buff.hex(prev_hash).reverse().hex,\n        vout: prev_idx,\n        prevout: {\n          value: prev_value ?? 0,\n          scriptPubKey: script\n        },\n        sequence: 0xFFFFFFFF\n      }\n    })\n\n    return {\n      txhex,\n      inputs : vin,\n      flags  : flags.split(',')\n    }\n  })\n  return test_vectors\n}"
  },
  {
    "path": "test/src/sig/sig.test.ts",
    "content": "import { Test } from 'tape'\n\nimport {\n  sighash_vector_test\n} from './segwit/sighash.test.js'\n\nimport {\n  test_computehash,\n  test_signatures\n} from './taproot/sig.test.js'\n\nexport default async function sig_tests (t : Test) : Promise<void> {\n  t.test('Segwit signature tests', async t => {\n    await sighash_vector_test(t)\n  })\n  t.test('Taproot signature tests', async t => {\n    test_computehash(t)\n    await test_signatures(t)\n  })\n}\n"
  },
  {
    "path": "test/src/sig/taproot/sig.test.ts",
    "content": "import { Test }    from 'tape'\nimport { Buff }    from '@cmdcode/buff-utils'\nimport { util }    from '@cmdcode/crypto-utils'\nimport { schnorr } from '@noble/curves/secp256k1'\n\nimport { decodeTx }        from '../../../../src/lib/tx/decode.js'\nimport * as HASH           from '../../../../src/lib/sig/taproot/hash.js'\nimport { TRSigner as SIG } from '../../../../src/lib/sig/taproot/index.js'\nimport { sign, verify }    from '../../../../src/lib/sig/taproot/sign.js'\nimport test_vectors        from './sig.vectors.json' assert { type: 'json' }\nimport { Tap }             from '../../../../src/index.js'\n\nconst { txhex, utxos, spends, precompute } = test_vectors\n\nconst tx = decodeTx(txhex)\n\nexport function test_computehash(t : Test) : void {\n  t.test('Test the intermediary hashes used for sighash construction.', t => {\n    t.plan(5)\n    const outpoints = HASH.hashOutpoints(tx.vin)\n    t.equal(Buff.raw(outpoints).hex, precompute.hashPrevouts, 'Outpoint hash should match.')\n    const sequence = HASH.hashSequence(tx.vin)\n    t.equal(Buff.raw(sequence).hex, precompute.hashSequences, 'Sequence hash should match.')\n    const outputs  = HASH.hashOutputs(tx.vout)\n    t.equal(Buff.raw(outputs).hex, precompute.hashOutputs, 'Output hash should match.')\n    const amounts  = HASH.hashAmounts(utxos)\n    t.equal(Buff.raw(amounts).hex, precompute.hashAmounts, 'Amounts hash should match.')\n    const scripts  = HASH.hashScripts(utxos)\n    t.equal(Buff.raw(scripts).hex, precompute.hashScriptPubkeys, 'Scripts hash should match.')\n  })\n}\n\nexport async function test_signatures(t : Test) : Promise<void> {\n  t.test('Test vectors for signature hash construction.', async t => {\n    const vectors = spends\n    t.plan(vectors.length * 11)\n    tx.vin.map((e, i) => e.prevout = utxos[i])\n    for (const { given, intermediary, expected } of vectors) {\n      // Unpack our vector data.\n      const { txinIndex, hashType, internalPrivkey, merkleRoot } = given\n      const { sigHash, tweak, internalPubkey, tweakedPrivkey }   = intermediary\n      let { witness : [ witsig ] } = expected\n      // Test our ability to create the tweak.\n      const taptweak = Tap.tweak.getTweak(internalPubkey, merkleRoot ?? undefined)\n      t.equal(taptweak.hex, tweak, 'The tap tweak should match.')\n      // Test our ability to tweak the private key.\\\n      const tweakedPrv = Tap.tweak.tweakSecKey(internalPrivkey, taptweak)\n      t.equal(tweakedPrv.hex, tweakedPrivkey, 'The tweaked prvkey should match.')\n      // Test our ability to calculate the signature hash.\n      const actual_hash = SIG.hash(tx, txinIndex, { sigflag: hashType })\n      t.equal(actual_hash.hex, sigHash, 'The signature hashes should match.')\n      // Test our ability to sign the transaction.\n      const pubkey        = util.getPublicKey(tweakedPrivkey, true)\n      const tweakedpub    = Buff.raw(schnorr.getPublicKey(tweakedPrivkey))\n      t.equal(pubkey.hex, tweakedpub.hex, 'The tweaked pubkeys should be equal.')\n      const signature     = SIG.sign(tweakedPrivkey, tx, txinIndex, { sigflag: hashType, throws : true })\n      const testsig       = sign(tweakedPrivkey, sigHash)\n      const isVerify      = verify(testsig, sigHash, tweakedpub)\n      t.true(isVerify, 'Signature made with sign should be valid using verify.')\n      const schnorrVerify = schnorr.verify(signature.slice(0, 64), sigHash, tweakedpub)\n      t.true(schnorrVerify, 'The signTx signature should be valid using schnorr.')\n      const sigVerify     = verify(signature, actual_hash, tweakedpub)\n      t.true(sigVerify, 'The signTx signature should be valid using verify.')\n      const vectVerify    = verify(witsig, sigHash, tweakedpub)\n      t.true(vectVerify, 'The vector signature should be valid using verify.')\n      const checkVerify   = schnorr.verify(Buff.hex(witsig).slice(0, 64), sigHash, tweakedpub)\n      t.true(checkVerify, 'The vector signature should be valid using schnorr.')\n      const schnorrSig    = schnorr.sign(actual_hash, tweakedPrivkey)\n      const testVerify    = verify(schnorrSig, actual_hash, tweakedpub)\n      t.true(testVerify, 'The schnorr signature should be valid using verify.')\n      tx.vin[txinIndex].witness = [ signature ]\n      const isVerified    = SIG.verify(tx, txinIndex, { sigflag: hashType, throws : true })\n      t.true(isVerified, 'The signature should pass verifyTx')\n    }\n  })\n}\n"
  },
  {
    "path": "test/src/sig/taproot/sig.vectors.json",
    "content": "{\n    \"txhex\": \"02000000097de20cbff686da83a54981d2b9bab3586f4ca7e48f57f5b55963115f3b334e9c010000000000000000d7b7cab57b1393ace2d064f4d4a2cb8af6def61273e127517d44759b6dafdd990000000000fffffffff8e1f583384333689228c5d28eac13366be082dc57441760d957275419a418420000000000fffffffff0689180aa63b30cb162a73c6d2a38b7eeda2a83ece74310fda0843ad604853b0100000000feffffffaa5202bdf6d8ccd2ee0f0202afbbb7461d9264a25e5bfd3c5a52ee1239e0ba6c0000000000feffffff956149bdc66faa968eb2be2d2faa29718acbfe3941215893a2a3446d32acd050000000000000000000e664b9773b88c09c32cb70a2a3e4da0ced63b7ba3b22f848531bbb1d5d5f4c94010000000000000000e9aa6b8e6c9de67619e6a3924ae25696bb7b694bb677a632a74ef7eadfd4eabf0000000000ffffffffa778eb6a263dc090464cd125c466b5a99667720b1c110468831d058aa1b82af10100000000ffffffff0200ca9a3b000000001976a91406afd46bcdfd22ef94ac122aa11f241244a37ecc88ac807840cb0000000020ac9a87f5594be208f8532db38cff670c450ed2fea8fcdefcc9a663f78bab962b0065cd1d\",\n    \"utxos\": [\n        {\n            \"scriptPubKey\": \"512053a1f6e454df1aa2776a2814a721372d6258050de330b3c6d10ee8f4e0dda343\",\n            \"value\": 420000000\n        },\n        {\n            \"scriptPubKey\": \"5120147c9c57132f6e7ecddba9800bb0c4449251c92a1e60371ee77557b6620f3ea3\",\n            \"value\": 462000000\n        },\n        {\n            \"scriptPubKey\": \"76a914751e76e8199196d454941c45d1b3a323f1433bd688ac\",\n            \"value\": 294000000\n        },\n        {\n            \"scriptPubKey\": \"5120e4d810fd50586274face62b8a807eb9719cef49c04177cc6b76a9a4251d5450e\",\n            \"value\": 504000000\n        },\n        {\n            \"scriptPubKey\": \"512091b64d5324723a985170e4dc5a0f84c041804f2cd12660fa5dec09fc21783605\",\n            \"value\": 630000000\n        },\n        {\n            \"scriptPubKey\": \"00147dd65592d0ab2fe0d0257d571abf032cd9db93dc\",\n            \"value\": 378000000\n        },\n        {\n            \"scriptPubKey\": \"512075169f4001aa68f15bbed28b218df1d0a62cbbcf1188c6665110c293c907b831\",\n            \"value\": 672000000\n        },\n        {\n            \"scriptPubKey\": \"5120712447206d7a5238acc7ff53fbe94a3b64539ad291c7cdbc490b7577e4b17df5\",\n            \"value\": 546000000\n        },\n        {\n            \"scriptPubKey\": \"512077e30a5522dd9f894c3f8b8bd4c4b2cf82ca7da8a3ea6a239655c39c050ab220\",\n            \"value\": 588000000\n        }\n    ],\n    \"precompute\": {\n        \"hashAmounts\": \"58a6964a4f5f8f0b642ded0a8a553be7622a719da71d1f5befcefcdee8e0fde6\",\n        \"hashOutputs\": \"a2e6dab7c1f0dcd297c8d61647fd17d821541ea69c3cc37dcbad7f90d4eb4bc5\",\n        \"hashPrevouts\": \"e3b33bb4ef3a52ad1fffb555c0d82828eb22737036eaeb02a235d82b909c4c3f\",\n        \"hashScriptPubkeys\": \"23ad0f61ad2bca5ba6a7693f50fce988e17c3780bf2b1e720cfbb38fbdd52e21\",\n        \"hashSequences\": \"18959c7221ab5ce9e26c3cd67b22c24f8baa54bac281d8e6b05e400e6c3a957e\"\n    },\n    \"spends\": [\n        {\n            \"given\": {\n                \"txinIndex\": 0,\n                \"internalPrivkey\": \"6b973d88838f27366ed61c9ad6367663045cb456e28335c109e30717ae0c6baa\",\n                \"merkleRoot\": null,\n                \"hashType\": 3\n            },\n            \"intermediary\": {\n                \"internalPubkey\": \"d6889cb081036e0faefa3a35157ad71086b123b2b144b649798b494c300a961d\",\n                \"tweak\": \"b86e7be8f39bab32a6f2c0443abbc210f0edac0e2c53d501b36b64437d9c6c70\",\n                \"tweakedPrivkey\": \"2405b971772ad26915c8dcdf10f238753a9b837e5f8e6a86fd7c0cce5b7296d9\",\n                \"sigMsg\": \"0003020000000065cd1de3b33bb4ef3a52ad1fffb555c0d82828eb22737036eaeb02a235d82b909c4c3f58a6964a4f5f8f0b642ded0a8a553be7622a719da71d1f5befcefcdee8e0fde623ad0f61ad2bca5ba6a7693f50fce988e17c3780bf2b1e720cfbb38fbdd52e2118959c7221ab5ce9e26c3cd67b22c24f8baa54bac281d8e6b05e400e6c3a957e0000000000d0418f0e9a36245b9a50ec87f8bf5be5bcae434337b87139c3a5b1f56e33cba0\",\n                \"precomputedUsed\": [\n                    \"hashAmounts\",\n                    \"hashPrevouts\",\n                    \"hashScriptPubkeys\",\n                    \"hashSequences\"\n                ],\n                \"sigHash\": \"2514a6272f85cfa0f45eb907fcb0d121b808ed37c6ea160a5a9046ed5526d555\"\n            },\n            \"expected\": {\n                \"witness\": [\n                    \"ed7c1647cb97379e76892be0cacff57ec4a7102aa24296ca39af7541246d8ff14d38958d4cc1e2e478e4d4a764bbfd835b16d4e314b72937b29833060b87276c03\"\n                ]\n            }\n        },\n        {\n            \"given\": {\n                \"txinIndex\": 1,\n                \"internalPrivkey\": \"1e4da49f6aaf4e5cd175fe08a32bb5cb4863d963921255f33d3bc31e1343907f\",\n                \"merkleRoot\": \"5b75adecf53548f3ec6ad7d78383bf84cc57b55a3127c72b9a2481752dd88b21\",\n                \"hashType\": 131\n            },\n            \"intermediary\": {\n                \"internalPubkey\": \"187791b6f712a8ea41c8ecdd0ee77fab3e85263b37e1ec18a3651926b3a6cf27\",\n                \"tweak\": \"cbd8679ba636c1110ea247542cfbd964131a6be84f873f7f3b62a777528ed001\",\n                \"tweakedPrivkey\": \"ea260c3b10e60f6de018455cd0278f2f5b7e454be1999572789e6a9565d26080\",\n                \"sigMsg\": \"0083020000000065cd1d00d7b7cab57b1393ace2d064f4d4a2cb8af6def61273e127517d44759b6dafdd9900000000808f891b00000000225120147c9c57132f6e7ecddba9800bb0c4449251c92a1e60371ee77557b6620f3ea3ffffffffffcef8fb4ca7efc5433f591ecfc57391811ce1e186a3793024def5c884cba51d\",\n                \"precomputedUsed\": [],\n                \"sigHash\": \"325a644af47e8a5a2591cda0ab0723978537318f10e6a63d4eed783b96a71a4d\"\n            },\n            \"expected\": {\n                \"witness\": [\n                    \"052aedffc554b41f52b521071793a6b88d6dbca9dba94cf34c83696de0c1ec35ca9c5ed4ab28059bd606a4f3a657eec0bb96661d42921b5f50a95ad33675b54f83\"\n                ]\n            }\n        },\n        {\n            \"given\": {\n                \"txinIndex\": 3,\n                \"internalPrivkey\": \"d3c7af07da2d54f7a7735d3d0fc4f0a73164db638b2f2f7c43f711f6d4aa7e64\",\n                \"merkleRoot\": \"c525714a7f49c28aedbbba78c005931a81c234b2f6c99a73e4d06082adc8bf2b\",\n                \"hashType\": 1\n            },\n            \"intermediary\": {\n                \"internalPubkey\": \"93478e9488f956df2396be2ce6c5cced75f900dfa18e7dabd2428aae78451820\",\n                \"tweak\": \"6af9e28dbf9d6aaf027696e2598a5b3d056f5fd2355a7fd5a37a0e5008132d30\",\n                \"tweakedPrivkey\": \"97323385e57015b75b0339a549c56a948eb961555973f0951f555ae6039ef00d\",\n                \"sigMsg\": \"0001020000000065cd1de3b33bb4ef3a52ad1fffb555c0d82828eb22737036eaeb02a235d82b909c4c3f58a6964a4f5f8f0b642ded0a8a553be7622a719da71d1f5befcefcdee8e0fde623ad0f61ad2bca5ba6a7693f50fce988e17c3780bf2b1e720cfbb38fbdd52e2118959c7221ab5ce9e26c3cd67b22c24f8baa54bac281d8e6b05e400e6c3a957ea2e6dab7c1f0dcd297c8d61647fd17d821541ea69c3cc37dcbad7f90d4eb4bc50003000000\",\n                \"precomputedUsed\": [\n                    \"hashAmounts\",\n                    \"hashOutputs\",\n                    \"hashPrevouts\",\n                    \"hashScriptPubkeys\",\n                    \"hashSequences\"\n                ],\n                \"sigHash\": \"bf013ea93474aa67815b1b6cc441d23b64fa310911d991e713cd34c7f5d46669\"\n            },\n            \"expected\": {\n                \"witness\": [\n                    \"ff45f742a876139946a149ab4d9185574b98dc919d2eb6754f8abaa59d18b025637a3aa043b91817739554f4ed2026cf8022dbd83e351ce1fabc272841d2510a01\"\n                ]\n            }\n        },\n        {\n            \"given\": {\n                \"txinIndex\": 4,\n                \"internalPrivkey\": \"f36bb07a11e469ce941d16b63b11b9b9120a84d9d87cff2c84a8d4affb438f4e\",\n                \"merkleRoot\": \"ccbd66c6f7e8fdab47b3a486f59d28262be857f30d4773f2d5ea47f7761ce0e2\",\n                \"hashType\": 0\n            },\n            \"intermediary\": {\n                \"internalPubkey\": \"e0dfe2300b0dd746a3f8674dfd4525623639042569d829c7f0eed9602d263e6f\",\n                \"tweak\": \"b57bfa183d28eeb6ad688ddaabb265b4a41fbf68e5fed2c72c74de70d5a786f4\",\n                \"tweakedPrivkey\": \"a8e7aa924f0d58854185a490e6c41f6efb7b675c0f3331b7f14b549400b4d501\",\n                \"sigMsg\": \"0000020000000065cd1de3b33bb4ef3a52ad1fffb555c0d82828eb22737036eaeb02a235d82b909c4c3f58a6964a4f5f8f0b642ded0a8a553be7622a719da71d1f5befcefcdee8e0fde623ad0f61ad2bca5ba6a7693f50fce988e17c3780bf2b1e720cfbb38fbdd52e2118959c7221ab5ce9e26c3cd67b22c24f8baa54bac281d8e6b05e400e6c3a957ea2e6dab7c1f0dcd297c8d61647fd17d821541ea69c3cc37dcbad7f90d4eb4bc50004000000\",\n                \"precomputedUsed\": [\n                    \"hashAmounts\",\n                    \"hashOutputs\",\n                    \"hashPrevouts\",\n                    \"hashScriptPubkeys\",\n                    \"hashSequences\"\n                ],\n                \"sigHash\": \"4f900a0bae3f1446fd48490c2958b5a023228f01661cda3496a11da502a7f7ef\"\n            },\n            \"expected\": {\n                \"witness\": [\n                    \"b4010dd48a617db09926f729e79c33ae0b4e94b79f04a1ae93ede6315eb3669de185a17d2b0ac9ee09fd4c64b678a0b61a0a86fa888a273c8511be83bfd6810f\"\n                ]\n            }\n        },\n        {\n            \"given\": {\n                \"txinIndex\": 6,\n                \"internalPrivkey\": \"415cfe9c15d9cea27d8104d5517c06e9de48e2f986b695e4f5ffebf230e725d8\",\n                \"merkleRoot\": \"2f6b2c5397b6d68ca18e09a3f05161668ffe93a988582d55c6f07bd5b3329def\",\n                \"hashType\": 2\n            },\n            \"intermediary\": {\n                \"internalPubkey\": \"55adf4e8967fbd2e29f20ac896e60c3b0f1d5b0efa9d34941b5958c7b0a0312d\",\n                \"tweak\": \"6579138e7976dc13b6a92f7bfd5a2fc7684f5ea42419d43368301470f3b74ed9\",\n                \"tweakedPrivkey\": \"241c14f2639d0d7139282aa6abde28dd8a067baa9d633e4e7230287ec2d02901\",\n                \"sigMsg\": \"0002020000000065cd1de3b33bb4ef3a52ad1fffb555c0d82828eb22737036eaeb02a235d82b909c4c3f58a6964a4f5f8f0b642ded0a8a553be7622a719da71d1f5befcefcdee8e0fde623ad0f61ad2bca5ba6a7693f50fce988e17c3780bf2b1e720cfbb38fbdd52e2118959c7221ab5ce9e26c3cd67b22c24f8baa54bac281d8e6b05e400e6c3a957e0006000000\",\n                \"precomputedUsed\": [\n                    \"hashAmounts\",\n                    \"hashPrevouts\",\n                    \"hashScriptPubkeys\",\n                    \"hashSequences\"\n                ],\n                \"sigHash\": \"15f25c298eb5cdc7eb1d638dd2d45c97c4c59dcaec6679cfc16ad84f30876b85\"\n            },\n            \"expected\": {\n                \"witness\": [\n                    \"a3785919a2ce3c4ce26f298c3d51619bc474ae24014bcdd31328cd8cfbab2eff3395fa0a16fe5f486d12f22a9cedded5ae74feb4bbe5351346508c5405bcfee002\"\n                ]\n            }\n        },\n        {\n            \"given\": {\n                \"txinIndex\": 7,\n                \"internalPrivkey\": \"c7b0e81f0a9a0b0499e112279d718cca98e79a12e2f137c72ae5b213aad0d103\",\n                \"merkleRoot\": \"6c2dc106ab816b73f9d07e3cd1ef2c8c1256f519748e0813e4edd2405d277bef\",\n                \"hashType\": 130\n            },\n            \"intermediary\": {\n                \"internalPubkey\": \"ee4fe085983462a184015d1f782d6a5f8b9c2b60130aff050ce221ecf3786592\",\n                \"tweak\": \"9e0517edc8259bb3359255400b23ca9507f2a91cd1e4250ba068b4eafceba4a9\",\n                \"tweakedPrivkey\": \"65b6000cd2bfa6b7cf736767a8955760e62b6649058cbc970b7c0871d786346b\",\n                \"sigMsg\": \"0082020000000065cd1d00e9aa6b8e6c9de67619e6a3924ae25696bb7b694bb677a632a74ef7eadfd4eabf00000000804c8b2000000000225120712447206d7a5238acc7ff53fbe94a3b64539ad291c7cdbc490b7577e4b17df5ffffffff\",\n                \"precomputedUsed\": [],\n                \"sigHash\": \"cd292de50313804dabe4685e83f923d2969577191a3e1d2882220dca88cbeb10\"\n            },\n            \"expected\": {\n                \"witness\": [\n                    \"ea0c6ba90763c2d3a296ad82ba45881abb4f426b3f87af162dd24d5109edc1cdd11915095ba47c3a9963dc1e6c432939872bc49212fe34c632cd3ab9fed429c482\"\n                ]\n            }\n        },\n        {\n            \"given\": {\n                \"txinIndex\": 8,\n                \"internalPrivkey\": \"77863416be0d0665e517e1c375fd6f75839544eca553675ef7fdf4949518ebaa\",\n                \"merkleRoot\": \"ab179431c28d3b68fb798957faf5497d69c883c6fb1e1cd9f81483d87bac90cc\",\n                \"hashType\": 129\n            },\n            \"intermediary\": {\n                \"internalPubkey\": \"f9f400803e683727b14f463836e1e78e1c64417638aa066919291a225f0e8dd8\",\n                \"tweak\": \"639f0281b7ac49e742cd25b7f188657626da1ad169209078e2761cefd91fd65e\",\n                \"tweakedPrivkey\": \"ec18ce6af99f43815db543f47b8af5ff5df3b2cb7315c955aa4a86e8143d2bf5\",\n                \"sigMsg\": \"0081020000000065cd1da2e6dab7c1f0dcd297c8d61647fd17d821541ea69c3cc37dcbad7f90d4eb4bc500a778eb6a263dc090464cd125c466b5a99667720b1c110468831d058aa1b82af101000000002b0c230000000022512077e30a5522dd9f894c3f8b8bd4c4b2cf82ca7da8a3ea6a239655c39c050ab220ffffffff\",\n                \"precomputedUsed\": [\n                    \"hashOutputs\"\n                ],\n                \"sigHash\": \"cccb739eca6c13a8a89e6e5cd317ffe55669bbda23f2fd37b0f18755e008edd2\"\n            },\n            \"expected\": {\n                \"witness\": [\n                    \"bbc9584a11074e83bc8c6759ec55401f0ae7b03ef290c3139814f545b58a9f8127258000874f44bc46db7646322107d4d86aec8e73b8719a61fff761d75b5dd981\"\n                ]\n            }\n        }\n    ],\n    \"targethex\": \"020000000001097de20cbff686da83a54981d2b9bab3586f4ca7e48f57f5b55963115f3b334e9c010000000000000000d7b7cab57b1393ace2d064f4d4a2cb8af6def61273e127517d44759b6dafdd990000000000fffffffff8e1f583384333689228c5d28eac13366be082dc57441760d957275419a41842000000006b4830450221008f3b8f8f0537c420654d2283673a761b7ee2ea3c130753103e08ce79201cf32a022079e7ab904a1980ef1c5890b648c8783f4d10103dd62f740d13daa79e298d50c201210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798fffffffff0689180aa63b30cb162a73c6d2a38b7eeda2a83ece74310fda0843ad604853b0100000000feffffffaa5202bdf6d8ccd2ee0f0202afbbb7461d9264a25e5bfd3c5a52ee1239e0ba6c0000000000feffffff956149bdc66faa968eb2be2d2faa29718acbfe3941215893a2a3446d32acd050000000000000000000e664b9773b88c09c32cb70a2a3e4da0ced63b7ba3b22f848531bbb1d5d5f4c94010000000000000000e9aa6b8e6c9de67619e6a3924ae25696bb7b694bb677a632a74ef7eadfd4eabf0000000000ffffffffa778eb6a263dc090464cd125c466b5a99667720b1c110468831d058aa1b82af10100000000ffffffff0200ca9a3b000000001976a91406afd46bcdfd22ef94ac122aa11f241244a37ecc88ac807840cb0000000020ac9a87f5594be208f8532db38cff670c450ed2fea8fcdefcc9a663f78bab962b0141ed7c1647cb97379e76892be0cacff57ec4a7102aa24296ca39af7541246d8ff14d38958d4cc1e2e478e4d4a764bbfd835b16d4e314b72937b29833060b87276c030141052aedffc554b41f52b521071793a6b88d6dbca9dba94cf34c83696de0c1ec35ca9c5ed4ab28059bd606a4f3a657eec0bb96661d42921b5f50a95ad33675b54f83000141ff45f742a876139946a149ab4d9185574b98dc919d2eb6754f8abaa59d18b025637a3aa043b91817739554f4ed2026cf8022dbd83e351ce1fabc272841d2510a010140b4010dd48a617db09926f729e79c33ae0b4e94b79f04a1ae93ede6315eb3669de185a17d2b0ac9ee09fd4c64b678a0b61a0a86fa888a273c8511be83bfd6810f0247304402202b795e4de72646d76eab3f0ab27dfa30b810e856ff3a46c9a702df53bb0d8cc302203ccc4d822edab5f35caddb10af1be93583526ccfbade4b4ead350781e2f8adcd012102f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f90141a3785919a2ce3c4ce26f298c3d51619bc474ae24014bcdd31328cd8cfbab2eff3395fa0a16fe5f486d12f22a9cedded5ae74feb4bbe5351346508c5405bcfee0020141ea0c6ba90763c2d3a296ad82ba45881abb4f426b3f87af162dd24d5109edc1cdd11915095ba47c3a9963dc1e6c432939872bc49212fe34c632cd3ab9fed429c4820141bbc9584a11074e83bc8c6759ec55401f0ae7b03ef290c3139814f545b58a9f8127258000874f44bc46db7646322107d4d86aec8e73b8719a61fff761d75b5dd9810065cd1d\"\n}\n"
  },
  {
    "path": "test/src/sig/taproot/tx.test.ts",
    "content": ""
  },
  {
    "path": "test/src/sig/taproot/tx.vectors.json",
    "content": ""
  },
  {
    "path": "test/src/tap/tree.test.ts",
    "content": "import { Test } from 'tape'\nimport { Buff } from '@cmdcode/buff-utils'\nimport { Tap }  from '../../../src/index.js'\nimport tree_vectors     from './tree.vectors.json' assert { type: 'json' }\nimport { encodeScript } from '../../../src/lib/script/encode.js'\n\ninterface Vector {\n  internalPubkey : string\n  scripts        : string[]\n  leafHashes     : Array<string | string[]>\n  merkleRoot     : string | null\n  tweak          : string\n  tweakedPubkey  : string\n  scriptPubKey   : string\n  address        : string\n  cblocks        : string[]\n}\n\nfunction flattenArray (\n  arr : Array<string | string[]>\n) : string[] {\n  const ret : string[] = []\n  for (const e of arr) {\n    if (Array.isArray(e)) {\n      ret.push(...flattenArray(e))\n    } else { ret.push(e) }\n  }\n  return ret\n}\n\nexport function tweak_test(t : Test) : void {\n  t.test('E2E test of tap-key tweaking', t => {\n    const vectors : Vector[] = tree_vectors.vectors\n    for (const vector of vectors) {\n      // Unpack our vector data.\n      const { internalPubkey, scripts, merkleRoot, tweakedPubkey, tweak, cblocks, leafHashes } = vector\n      // Copy leaf array (so the original does not get mutated).\n      if (scripts.length === 0) {\n        t.test('Testing empty key tweak.', t => {\n          t.plan(1)\n          const tapkey = Tap.tweak.getPubKey(internalPubkey).slice(1)\n          t.equal(tapkey.hex, tweakedPubkey, 'Tweaked pubs should match.')\n        })\n      } else {\n        t.test('Testing key: ' + tweakedPubkey, t => {\n          t.plan(3)\n          const root = Tap.tree.getRoot(leafHashes)\n          t.equal(Buff.raw(root).hex, merkleRoot, 'Root hash should match.')\n          const taptweak = Tap.tweak.getTweak(internalPubkey, merkleRoot as string)\n          t.equal(taptweak.hex, tweak, 'Tweak hash should match.')\n          const tapkey = Tap.tweak.tweakPubKey(internalPubkey, taptweak).slice(1)\n          t.equal(tapkey.hex, tweakedPubkey, 'Tweaked pubs should match.')\n        })\n\n        const leaves = flattenArray(leafHashes)\n        \n        for (let i = 0; i < leaves.length; i++) {\n          t.test('Testing leaf: ' + leaves[i], t => {\n            t.plan(2)\n            const cbyte   = Buff.hex(cblocks[i]).slice(0, 1).num\n            const version = cbyte & 0xfe\n            const sbytes  = encodeScript(scripts[i]).hex\n            const target = Tap.tree.getLeaf(sbytes, version)\n            t.equal(target, leaves[i], 'Leaf hash should match.')\n            const [ _, cblock ] = Tap.getPubKey(internalPubkey, { tree: leafHashes, target,  version })\n            t.equal(cblock, cblocks[i], 'Control blocks should be equal.')\n          })\n        }\n      }\n    }\n  })\n}\n"
  },
  {
    "path": "test/src/tap/tree.vectors.json",
    "content": "{\n  \"vectors\": [\n    {\n      \"internalPubkey\": \"d6889cb081036e0faefa3a35157ad71086b123b2b144b649798b494c300a961d\",\n      \"scripts\": [],\n      \"leafHashes\": [],\n      \"merkleRoot\": \"\",\n      \"tweak\": \"b86e7be8f39bab32a6f2c0443abbc210f0edac0e2c53d501b36b64437d9c6c70\",\n      \"tweakedPubkey\": \"53a1f6e454df1aa2776a2814a721372d6258050de330b3c6d10ee8f4e0dda343\",\n      \"scriptPubKey\": \"512053a1f6e454df1aa2776a2814a721372d6258050de330b3c6d10ee8f4e0dda343\",\n      \"address\": \"bc1p2wsldez5mud2yam29q22wgfh9439spgduvct83k3pm50fcxa5dps59h4z5\",\n      \"cblocks\": []\n    },\n    {\n      \"internalPubkey\": \"187791b6f712a8ea41c8ecdd0ee77fab3e85263b37e1ec18a3651926b3a6cf27\",\n      \"scripts\": [\n        \"20d85a959b0290bf19bb89ed43c916be835475d013da4b362117393e25a48229b8ac\"\n      ],\n      \"leafHashes\": [\n          \"5b75adecf53548f3ec6ad7d78383bf84cc57b55a3127c72b9a2481752dd88b21\"\n      ],\n      \"merkleRoot\": \"5b75adecf53548f3ec6ad7d78383bf84cc57b55a3127c72b9a2481752dd88b21\",\n      \"tweak\": \"cbd8679ba636c1110ea247542cfbd964131a6be84f873f7f3b62a777528ed001\",\n      \"tweakedPubkey\": \"147c9c57132f6e7ecddba9800bb0c4449251c92a1e60371ee77557b6620f3ea3\",\n      \"scriptPubKey\": \"5120147c9c57132f6e7ecddba9800bb0c4449251c92a1e60371ee77557b6620f3ea3\",\n      \"address\": \"bc1pz37fc4cn9ah8anwm4xqqhvxygjf9rjf2resrw8h8w4tmvcs0863sa2e586\",\n      \"cblocks\": [\n          \"c1187791b6f712a8ea41c8ecdd0ee77fab3e85263b37e1ec18a3651926b3a6cf27\"\n      ]\n    },\n    {\n      \"internalPubkey\": \"93478e9488f956df2396be2ce6c5cced75f900dfa18e7dabd2428aae78451820\",\n      \"scripts\": [ \n        \"20b617298552a72ade070667e86ca63b8f5789a9fe8731ef91202a91c9f3459007ac\" \n      ],\n      \"leafHashes\": [\n          \"c525714a7f49c28aedbbba78c005931a81c234b2f6c99a73e4d06082adc8bf2b\"\n      ],\n      \"merkleRoot\": \"c525714a7f49c28aedbbba78c005931a81c234b2f6c99a73e4d06082adc8bf2b\",\n      \"tweak\": \"6af9e28dbf9d6aaf027696e2598a5b3d056f5fd2355a7fd5a37a0e5008132d30\",\n      \"tweakedPubkey\": \"e4d810fd50586274face62b8a807eb9719cef49c04177cc6b76a9a4251d5450e\",\n      \"scriptPubKey\": \"5120e4d810fd50586274face62b8a807eb9719cef49c04177cc6b76a9a4251d5450e\",\n      \"address\": \"bc1punvppl2stp38f7kwv2u2spltjuvuaayuqsthe34hd2dyy5w4g58qqfuag5\",\n      \"cblocks\": [\n          \"c093478e9488f956df2396be2ce6c5cced75f900dfa18e7dabd2428aae78451820\"\n      ]\n    },\n    {\n      \"internalPubkey\": \"ee4fe085983462a184015d1f782d6a5f8b9c2b60130aff050ce221ecf3786592\",\n      \"scripts\": [\n        \"20387671353e273264c495656e27e39ba899ea8fee3bb69fb2a680e22093447d48ac\",\n        \"06424950333431\"\n      ],\n      \"leafHashes\": [\n          \"8ad69ec7cf41c2a4001fd1f738bf1e505ce2277acdcaa63fe4765192497f47a7\",\n          \"f224a923cd0021ab202ab139cc56802ddb92dcfc172b9212261a539df79a112a\"\n      ],\n      \"merkleRoot\": \"6c2dc106ab816b73f9d07e3cd1ef2c8c1256f519748e0813e4edd2405d277bef\",\n      \"tweak\": \"9e0517edc8259bb3359255400b23ca9507f2a91cd1e4250ba068b4eafceba4a9\",\n      \"tweakedPubkey\": \"712447206d7a5238acc7ff53fbe94a3b64539ad291c7cdbc490b7577e4b17df5\",\n      \"scriptPubKey\": \"5120712447206d7a5238acc7ff53fbe94a3b64539ad291c7cdbc490b7577e4b17df5\",\n      \"address\": \"bc1pwyjywgrd0ffr3tx8laflh6228dj98xkjj8rum0zfpd6h0e930h6saqxrrm\",\n      \"cblocks\": [\n          \"c0ee4fe085983462a184015d1f782d6a5f8b9c2b60130aff050ce221ecf3786592f224a923cd0021ab202ab139cc56802ddb92dcfc172b9212261a539df79a112a\",\n          \"faee4fe085983462a184015d1f782d6a5f8b9c2b60130aff050ce221ecf37865928ad69ec7cf41c2a4001fd1f738bf1e505ce2277acdcaa63fe4765192497f47a7\"\n      ]\n    },\n    {\n      \"internalPubkey\": \"f9f400803e683727b14f463836e1e78e1c64417638aa066919291a225f0e8dd8\",\n      \"scripts\": [\n        \"2044b178d64c32c4a05cc4f4d1407268f764c940d20ce97abfd44db5c3592b72fdac\",\n        \"07546170726f6f74\"\n      ],\n      \"leafHashes\": [\n          \"64512fecdb5afa04f98839b50e6f0cb7b1e539bf6f205f67934083cdcc3c8d89\",\n          \"2cb2b90daa543b544161530c925f285b06196940d6085ca9474d41dc3822c5cb\"\n      ],\n      \"merkleRoot\": \"ab179431c28d3b68fb798957faf5497d69c883c6fb1e1cd9f81483d87bac90cc\",\n      \"tweak\": \"639f0281b7ac49e742cd25b7f188657626da1ad169209078e2761cefd91fd65e\",\n      \"tweakedPubkey\": \"77e30a5522dd9f894c3f8b8bd4c4b2cf82ca7da8a3ea6a239655c39c050ab220\",\n      \"scriptPubKey\": \"512077e30a5522dd9f894c3f8b8bd4c4b2cf82ca7da8a3ea6a239655c39c050ab220\",\n      \"address\": \"bc1pwl3s54fzmk0cjnpl3w9af39je7pv5ldg504x5guk2hpecpg2kgsqaqstjq\",\n      \"cblocks\": [\n          \"c1f9f400803e683727b14f463836e1e78e1c64417638aa066919291a225f0e8dd82cb2b90daa543b544161530c925f285b06196940d6085ca9474d41dc3822c5cb\",\n          \"c1f9f400803e683727b14f463836e1e78e1c64417638aa066919291a225f0e8dd864512fecdb5afa04f98839b50e6f0cb7b1e539bf6f205f67934083cdcc3c8d89\"\n      ]\n    },\n    {\n      \"internalPubkey\": \"e0dfe2300b0dd746a3f8674dfd4525623639042569d829c7f0eed9602d263e6f\",\n      \"scripts\": [\n        \"2072ea6adcf1d371dea8fba1035a09f3d24ed5a059799bae114084130ee5898e69ac\",\n        \"202352d137f2f3ab38d1eaa976758873377fa5ebb817372c71e2c542313d4abda8ac\",\n        \"207337c0dd4253cb86f2c43a2351aadd82cccb12a172cd120452b9bb8324f2186aac\"\n      ],\n      \"leafHashes\": [\n        \"2645a02e0aac1fe69d69755733a9b7621b694bb5b5cde2bbfc94066ed62b9817\",\n        [ \n          \"ba982a91d4fc552163cb1c0da03676102d5b7a014304c01f0c77b2b8e888de1c\",\n          \"9e31407bffa15fefbf5090b149d53959ecdf3f62b1246780238c24501d5ceaf6\"\n        ]\n      ],\n      \"merkleRoot\": \"ccbd66c6f7e8fdab47b3a486f59d28262be857f30d4773f2d5ea47f7761ce0e2\",\n      \"tweak\": \"b57bfa183d28eeb6ad688ddaabb265b4a41fbf68e5fed2c72c74de70d5a786f4\",\n      \"tweakedPubkey\": \"91b64d5324723a985170e4dc5a0f84c041804f2cd12660fa5dec09fc21783605\",\n      \"scriptPubKey\": \"512091b64d5324723a985170e4dc5a0f84c041804f2cd12660fa5dec09fc21783605\",\n      \"address\": \"bc1pjxmy65eywgafs5tsunw95ruycpqcqnev6ynxp7jaasylcgtcxczs6n332e\",\n      \"cblocks\": [\n          \"c0e0dfe2300b0dd746a3f8674dfd4525623639042569d829c7f0eed9602d263e6fffe578e9ea769027e4f5a3de40732f75a88a6353a09d767ddeb66accef85e553\",\n          \"c0e0dfe2300b0dd746a3f8674dfd4525623639042569d829c7f0eed9602d263e6f9e31407bffa15fefbf5090b149d53959ecdf3f62b1246780238c24501d5ceaf62645a02e0aac1fe69d69755733a9b7621b694bb5b5cde2bbfc94066ed62b9817\",\n          \"c0e0dfe2300b0dd746a3f8674dfd4525623639042569d829c7f0eed9602d263e6fba982a91d4fc552163cb1c0da03676102d5b7a014304c01f0c77b2b8e888de1c2645a02e0aac1fe69d69755733a9b7621b694bb5b5cde2bbfc94066ed62b9817\"\n      ]\n    },\n    {\n      \"internalPubkey\": \"55adf4e8967fbd2e29f20ac896e60c3b0f1d5b0efa9d34941b5958c7b0a0312d\",\n      \"scripts\": [\n        \"2071981521ad9fc9036687364118fb6ccd2035b96a423c59c5430e98310a11abe2ac\",\n        \"20d5094d2dbe9b76e2c245a2b89b6006888952e2faa6a149ae318d69e520617748ac\",\n        \"20c440b462ad48c7a77f94cd4532d8f2119dcebbd7c9764557e62726419b08ad4cac\"\n      ],\n      \"leafHashes\": [\n          \"f154e8e8e17c31d3462d7132589ed29353c6fafdb884c5a6e04ea938834f0d9d\",\n          [\n            \"737ed1fe30bc42b8022d717b44f0d93516617af64a64753b7a06bf16b26cd711\",\n            \"d7485025fceb78b9ed667db36ed8b8dc7b1f0b307ac167fa516fe4352b9f4ef7\"\n          ]\n      ],\n      \"merkleRoot\": \"2f6b2c5397b6d68ca18e09a3f05161668ffe93a988582d55c6f07bd5b3329def\",\n      \"tweak\": \"6579138e7976dc13b6a92f7bfd5a2fc7684f5ea42419d43368301470f3b74ed9\",\n      \"tweakedPubkey\": \"75169f4001aa68f15bbed28b218df1d0a62cbbcf1188c6665110c293c907b831\",\n      \"scriptPubKey\": \"512075169f4001aa68f15bbed28b218df1d0a62cbbcf1188c6665110c293c907b831\",\n      \"address\": \"bc1pw5tf7sqp4f50zka7629jrr036znzew70zxyvvej3zrpf8jg8hqcssyuewe\",\n      \"cblocks\": [\n          \"c155adf4e8967fbd2e29f20ac896e60c3b0f1d5b0efa9d34941b5958c7b0a0312d3cd369a528b326bc9d2133cbd2ac21451acb31681a410434672c8e34fe757e91\",\n          \"c155adf4e8967fbd2e29f20ac896e60c3b0f1d5b0efa9d34941b5958c7b0a0312dd7485025fceb78b9ed667db36ed8b8dc7b1f0b307ac167fa516fe4352b9f4ef7f154e8e8e17c31d3462d7132589ed29353c6fafdb884c5a6e04ea938834f0d9d\",\n          \"c155adf4e8967fbd2e29f20ac896e60c3b0f1d5b0efa9d34941b5958c7b0a0312d737ed1fe30bc42b8022d717b44f0d93516617af64a64753b7a06bf16b26cd711f154e8e8e17c31d3462d7132589ed29353c6fafdb884c5a6e04ea938834f0d9d\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test/src/tap/unit.test.ts",
    "content": "import { Test }         from 'tape'\nimport { Buff }         from '@cmdcode/buff-utils'\nimport test_vectors     from './unit.vectors.json' assert { type: 'json' }\nimport { encodeScript } from '../../../src/lib/script/encode.js'\n\nimport { Tap, Script, Address } from '../../../src/index.js'\n\nexport async function unit_tests(t : Test) : Promise<void> {\n  t.test('Testing tapleaf creation:', async t => {\n    const vectors = test_vectors.tapleaf\n    t.plan(vectors.length)\n    for (const [ src, ans ] of vectors) {\n      const s = encodeScript(src)\n      const leaf = Tap.tree.getLeaf(s, 0xc0)\n      t.equal(leaf, ans, 'Tapleaf should match')\n    }\n  })\n  t.test('Testing tapbranch creation', async t => {\n    const vectors = test_vectors.tapbranch\n    t.plan(vectors.length)\n    for (const [ src1, src2, ans ] of vectors) {\n      const branch = Tap.tree.getBranch(src1, src2)\n      t.equal(branch, ans, 'Tapbranch should match')\n    }\n  })\n  t.test('Testing taproot creation', async t => {\n    const vectors = test_vectors.taproot\n    t.plan(vectors.length)\n    for (const [ pub, root, ans ] of vectors) {\n      const key = Tap.tweak.getTweak(Buff.hex(pub), Buff.hex(root))\n      t.equal(Buff.raw(key).hex, ans, 'Taptweak should match')\n    }\n  }),\n  t.test('Testing control block creation', async t => {\n    const vectors = test_vectors.ctrlblock\n    t.plan(vectors.length)\n    for (const { scripts, index, pubkey, cblock } of vectors) {\n      const data   = scripts.map(e => Script.encode(e))\n      const leaves = data.map(e => Tap.tree.getLeaf(e, 0xc0))\n      const script = Buff.raw(data[index]).hex\n      const target = Tap.tree.getLeaf(script)\n      const [ _, block ] = Tap.getPubKey(pubkey, { tree: leaves, target })\n      t.equal(block, cblock, 'Control block should match')\n    }\n  }),\n  t.test('Testing control block validation', async t => {\n    const vectors = test_vectors.ctrlblock\n    t.plan(vectors.length)\n    for (const { address, scripts, index, cblock } of vectors) {\n      const tapkey  = Address.p2tr.decode(address)\n      const script  = Script.encode(scripts[index])\n      const target  = Tap.tree.getLeaf(script)\n      const isValid = Tap.checkPath(tapkey, target, cblock)\n      t.true(isValid, 'Control block should be valid.')\n    }\n  })\n}\n"
  },
  {
    "path": "test/src/tap/unit.vectors.json",
    "content": "{\n  \"tapleaf\": [\n    [\n      \"029000b275209997a497d964fc1a62885b05a51166a65a90df00492c8d7cf61d6accf54803beac\",\n      \"c81451874bd9ebd4b6fd4bba1f84cdfb533c532365d22a0a702205ff658b17c9\"\n    ],\n    [\n      \"a8206c60f404f8167a38fc70eaf8aa17ac351023bef86bcb9d1086a19afe95bd533388204edfcf9dfe6c0b5c83d1ab3f78d1b39a46ebac6798e08e19761f5ed89ec83c10ac\",\n      \"632c8632b4f29c6291416e23135cf78ecb82e525788ea5ed6483e3c6ce943b42\"\n    ],\n    [\n      \"76a91463a3c9bbb29995e9984e67f7b627c6916df7a39488ac\",\n      \"b4b368abc58b8a818a560958725ae23c400759dfb48188ac60192d4eac98abe7\"\n    ]\n  ],\n  \"tapbranch\": [\n    [\n      \"632c8632b4f29c6291416e23135cf78ecb82e525788ea5ed6483e3c6ce943b42\",\n      \"c81451874bd9ebd4b6fd4bba1f84cdfb533c532365d22a0a702205ff658b17c9\",\n      \"41646f8c1fe2a96ddad7f5471bc4fee7da98794ef8c45a4f4fc6a559d60c9f6b\"\n    ],\n    [\n      \"b4b368abc58b8a818a560958725ae23c400759dfb48188ac60192d4eac98abe7\",\n      \"b4b368abc58b8a818a560958725ae23c400759dfb48188ac60192d4eac98abe7\",\n      \"9a645e96720bff16d0e1421a74b4aa43dc16453489a7e6c55be2c3f4cc9d1686\"\n    ],\n    [\n      \"41646f8c1fe2a96ddad7f5471bc4fee7da98794ef8c45a4f4fc6a559d60c9f6b\",\n      \"9a645e96720bff16d0e1421a74b4aa43dc16453489a7e6c55be2c3f4cc9d1686\",\n      \"637d38612e290a7ec781b65e662a17d5a51a9a5a6736e669b1c2751a67119687\"\n    ]\n  ],\n  \"taproot\": [\n    [\n      \"5bf08d58a430f8c222bffaf9127249c5cdff70a2d68b2b45637eb662b6b88eb5\",\n      \"41646f8c1fe2a96ddad7f5471bc4fee7da98794ef8c45a4f4fc6a559d60c9f6b\",\n      \"0b0e6981ce6cac74d055d0e4c25e5b4455a083b3217761327867f26460e0a776\"\n    ]\n  ],\n  \"ctrlblock\": [\n    {\n      \"scripts\" : [ \n        [ \"9000\", \"OP_CHECKSEQUENCEVERIFY\", \"OP_DROP\", \"9997a497d964fc1a62885b05a51166a65a90df00492c8d7cf61d6accf54803be\", \"OP_CHECKSIG\" ],\n        [ \"OP_SHA256\", \"6c60f404f8167a38fc70eaf8aa17ac351023bef86bcb9d1086a19afe95bd5333\", \"OP_EQUALVERIFY\", \"4edfcf9dfe6c0b5c83d1ab3f78d1b39a46ebac6798e08e19761f5ed89ec83c10\", \"OP_CHECKSIG\" ]\n      ],\n      \"index\"   : 1,\n      \"pubkey\"  : \"5bf08d58a430f8c222bffaf9127249c5cdff70a2d68b2b45637eb662b6b88eb5\",\n      \"parity\"  : 1,\n      \"cblock\"  : \"c15bf08d58a430f8c222bffaf9127249c5cdff70a2d68b2b45637eb662b6b88eb5c81451874bd9ebd4b6fd4bba1f84cdfb533c532365d22a0a702205ff658b17c9\",\n      \"address\" : \"bcrt1p7y52329xxmse7q9gq9542rldlsntdawaqnvntmz99z224kfcauxqag4w9y\"\n    }\n  ]\n}"
  },
  {
    "path": "test/src/tx/segwit/segwit.test.ts",
    "content": "import { Test }  from 'tape'\nimport { Tx }    from '../../../../src/index.js'\nimport test_data from './valid.vectors.json' assert { type: 'json' }\nimport { parseVectors } from './utils.js'\n\nexport function segwit_vector_test(t :Test) : void {\n  const vectors = parseVectors(test_data)\n  t.test('Testing segwit valid transaction vectors.', t => {\n    let throws = 0\n    for (const vector of vectors) {\n      const { txhex } = vector\n      let newhex : string = 'undefined'\n      try {\n        const txdata = Tx.decode(txhex)\n        newhex = Tx.encode(txdata).hex\n        if (txhex !== newhex) {\n          throw 'Transaction failed to parse:'\n        }\n      } catch (err) {\n        console.log(err)\n        console.log('Error:', err.message)\n        console.log('Target:', txhex)\n        console.log('Result:', newhex)\n        throws += 1\n      }\n    }\n    t.plan(1)\n    t.equal(throws, 0, 'All transaction hex should be equal.')\n  })\n}"
  },
  {
    "path": "test/src/tx/segwit/utils.ts",
    "content": "import { Buff } from '@cmdcode/buff-utils'\nimport { InputData } from '../../../../src'\n\ntype TestInput = [\n  prev_hash : string,\n  prev_idx  : number,\n  prev_spk  : string,\n  prev_amt  : number\n]\n\ntype TestData = [\n  inputs : TestInput[],\n  txhex  : string,\n  flags  : string\n]\n\ninterface TestVector {\n  txhex  : string\n  inputs : InputData\n  flags  : string[]\n}\n\nexport function parseVectors(vectors : any) : TestVector[] {\n  const test_vectors = vectors.filter(e => e.length > 1).map(e => {\n    const [ inputs, txhex, flags ] = e as TestData\n    const vin = inputs.map(e => {\n      const [ prev_hash, prev_idx, prev_spk, prev_value ] = e as TestInput\n      const script = prev_spk.split(' ')\n        .filter(e => !(e.startsWith('0x') && e.length === 4))\n        .map(e => e.startsWith('0x') \n          ? e.slice(2)\n          : (/^[0-9]+$/.test(e))\n            ? parseInt(e)\n            : 'OP_' + e\n      )\n      return {\n        txid: Buff.hex(prev_hash).reverse().hex,\n        vout: prev_idx,\n        prevout: {\n          value: prev_value ?? 0,\n          scriptPubKey: script\n        },\n        sequence: 0xFFFFFFFF\n      }\n    })\n\n    return {\n      txhex,\n      inputs : vin,\n      flags  : flags.split(',')\n    }\n  })\n  return test_vectors\n}"
  },
  {
    "path": "test/src/tx/segwit/valid.vectors.json",
    "content": "[\n[\"The following are deserialized transactions which are valid.\"],\n[\"They are in the form\"],\n[\"[[[prevout hash, prevout index, prevout scriptPubKey, amount?], [input 2], ...],\"],\n[\"serializedTransaction, excluded verifyFlags]\"],\n[\"Objects that are only a single string (like this one) are ignored\"],\n\n[\"The following is 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63\"],\n[\"It is of particular interest because it contains an invalidly-encoded signature which OpenSSL accepts\"],\n[\"See http://r6.ca/blog/20111119T211504Z.html\"],\n[\"It is also the first OP_CHECKMULTISIG transaction in standard form\"],\n[[[\"60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1\", 0, \"1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG\"]],\n\"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000490047304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000\", \"DERSIG,LOW_S,STRICTENC\"],\n\n[\"The following is a tweaked form of 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63\"],\n[\"It is an OP_CHECKMULTISIG with an arbitrary extra byte stuffed into the signature at pos length - 2\"],\n[\"The dummy byte is fine however, so the NULLDUMMY flag should be happy\"],\n[[[\"60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1\", 0, \"1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG\"]],\n\"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004a0048304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2bab01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000\", \"DERSIG,LOW_S,STRICTENC\"],\n\n[\"The following is a tweaked form of 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63\"],\n[\"It is an OP_CHECKMULTISIG with the dummy value set to something other than an empty string\"],\n[[[\"60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1\", 0, \"1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG\"]],\n\"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba260000000004a01ff47304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000\", \"DERSIG,LOW_S,STRICTENC,NULLDUMMY\"],\n\n[\"As above, but using an OP_1\"],\n[[[\"60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1\", 0, \"1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG\"]],\n\"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000495147304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000\", \"DERSIG,LOW_S,STRICTENC,NULLDUMMY\"],\n\n[\"As above, but using an OP_1NEGATE\"],\n[[[\"60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1\", 0, \"1 0x41 0x04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0x41 0x0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG\"]],\n\"0100000001b14bdcbc3e01bdaad36cc08e81e69c82e1060bc14e518db2b49aa43ad90ba26000000000494f47304402203f16c6f40162ab686621ef3000b04e75418a0c0cb2d8aebeac894ae360ac1e780220ddc15ecdfc3507ac48e1681a33eb60996631bf6bf5bc0a0682c4db743ce7ca2b01ffffffff0140420f00000000001976a914660d4ef3a743e3e696ad990364e555c271ad504b88ac00000000\", \"DERSIG,LOW_S,STRICTENC,NULLDUMMY\"],\n\n[\"The following is c99c49da4c38af669dea436d3e73780dfdb6c1ecf9958baa52960e8baee30e73\"],\n[\"It is of interest because it contains a 0-sequence as well as a signature of SIGHASH type 0 (which is not a real type)\"],\n[[[\"406b2b06bcd34d3c8733e6b79f7a394c8a431fbf4ff5ac705c93f4076bb77602\", 0, \"DUP HASH160 0x14 0xdc44b1164188067c3a32d4780f5996fa14a4f2d9 EQUALVERIFY CHECKSIG\"]],\n\"01000000010276b76b07f4935c70acf54fbf1f438a4c397a9fb7e633873c4dd3bc062b6b40000000008c493046022100d23459d03ed7e9511a47d13292d3430a04627de6235b6e51a40f9cd386f2abe3022100e7d25b080f0bb8d8d5f878bba7d54ad2fda650ea8d158a33ee3cbd11768191fd004104b0e2c879e4daf7b9ab68350228c159766676a14f5815084ba166432aab46198d4cca98fa3e9981d0a90b2effc514b76279476550ba3663fdcaff94c38420e9d5000000000100093d00000000001976a9149a7b0f3b80c6baaeedce0a0842553800f832ba1f88ac00000000\", \"LOW_S,STRICTENC\"],\n\n[\"A nearly-standard transaction with CHECKSIGVERIFY 1 instead of CHECKSIG\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000006a473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000\", \"NONE\"],\n\n[\"Same as above, but with the signature duplicated in the scriptPubKey with the proper pushdata prefix\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"DUP HASH160 0x14 0x5b6462475454710f3c22f5fdf0b40704c92f25c3 EQUALVERIFY CHECKSIGVERIFY 1 0x47 0x3044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a01\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000006a473044022067288ea50aa799543a536ff9306f8e1cba05b9c6b10951175b924f96732555ed022026d7b5265f38d21541519e4a1e55044d5b9e17e15cdbaf29ae3792e99e883e7a012103ba8c8b86dea131c22ab967e6dd99bdae8eff7a1f75a2c35f1f944109e3fe5e22ffffffff010000000000000000015100000000\", \"CLEANSTACK,CONST_SCRIPTCODE\"],\n\n[\"The following is f7fdd091fa6d8f5e7a8c2458f5c38faffff2d3f1406b6e4fe2c99dcc0d2d1cbb\"],\n[\"It caught a bug in the workaround for 23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63 in an overly simple implementation. In a signature, it contains an ASN1 integer which isn't strict-DER conformant due to being negative, which doesn't make sense in a signature. Before BIP66 activated, it was a valid signature. After it activated, it's not valid any more.\"],\n[[[\"b464e85df2a238416f8bdae11d120add610380ea07f4ef19c5f9dfd472f96c3d\", 0, \"DUP HASH160 0x14 0xbef80ecf3a44500fda1bc92176e442891662aed2 EQUALVERIFY CHECKSIG\"],\n[\"b7978cc96e59a8b13e0865d3f95657561a7f725be952438637475920bac9eb21\", 1, \"DUP HASH160 0x14 0xbef80ecf3a44500fda1bc92176e442891662aed2 EQUALVERIFY CHECKSIG\"]],\n\"01000000023d6cf972d4dff9c519eff407ea800361dd0a121de1da8b6f4138a2f25de864b4000000008a4730440220ffda47bfc776bcd269da4832626ac332adfca6dd835e8ecd83cd1ebe7d709b0e022049cffa1cdc102a0b56e0e04913606c70af702a1149dc3b305ab9439288fee090014104266abb36d66eb4218a6dd31f09bb92cf3cfa803c7ea72c1fc80a50f919273e613f895b855fb7465ccbc8919ad1bd4a306c783f22cd3227327694c4fa4c1c439affffffff21ebc9ba20594737864352e95b727f1a565756f9d365083eb1a8596ec98c97b7010000008a4730440220503ff10e9f1e0de731407a4a245531c9ff17676eda461f8ceeb8c06049fa2c810220c008ac34694510298fa60b3f000df01caa244f165b727d4896eb84f81e46bcc4014104266abb36d66eb4218a6dd31f09bb92cf3cfa803c7ea72c1fc80a50f919273e613f895b855fb7465ccbc8919ad1bd4a306c783f22cd3227327694c4fa4c1c439affffffff01f0da5200000000001976a914857ccd42dded6df32949d4646dfa10a92458cfaa88ac00000000\", \"DERSIG,LOW_S,STRICTENC\"],\n\n[\"The following tests for the presence of a bug in the handling of SIGHASH_SINGLE\"],\n[\"It results in signing the constant 1, instead of something generated based on the transaction,\"],\n[\"when the input doing the signing has an index greater than the maximum output index\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000200\", 0, \"1\"], [\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"DUP HASH160 0x14 0xe52b482f2faa8ecbf0db344f93c84ac908557f33 EQUALVERIFY CHECKSIG\"]],\n\"01000000020002000000000000000000000000000000000000000000000000000000000000000000000151ffffffff0001000000000000000000000000000000000000000000000000000000000000000000006b483045022100c9cdd08798a28af9d1baf44a6c77bcc7e279f47dc487c8c899911bc48feaffcc0220503c5c50ae3998a733263c5c0f7061b483e2b56c4c41b456e7d2f5a78a74c077032102d5c25adb51b61339d2b05315791e21bbe80ea470a49db0135720983c905aace0ffffffff010000000000000000015100000000\", \"CLEANSTACK\"],\n\n[\"The following tests SIGHASH_SINGLE|SIGHASHANYONECANPAY inputs\"],\n[[[\"437a1002eb125dec0f93f635763e0ae45f28ff8e81d82945753d0107611cd390\", 1, \"DUP HASH160 0x14 0x383fb81cb0a3fc724b5e08cf8bbd404336d711f6 EQUALVERIFY CHECKSIG\"],\n  [\"2d48d32ccad087bcda0ac5b31555bd58d1d2568184cbc8e752dd2be2684af03f\", 1, \"DUP HASH160 0x14 0x275ec2a233e5b23d43fa19e7bf9beb0cb3996117 EQUALVERIFY CHECKSIG\"],\n  [\"c76168ef1a272a4f176e55e73157ecfce040cfad16a5272f6296eb7089dca846\", 1, \"DUP HASH160 0x14 0x34fea2c5a75414fd945273ae2d029ce1f28dafcf EQUALVERIFY CHECKSIG\"]],\n\"010000000390d31c6107013d754529d8818eff285fe40a3e7635f6930fec5d12eb02107a43010000006b483045022100f40815ae3c81a0dd851cc8d376d6fd226c88416671346a9033468cca2cdcc6c202204f764623903e6c4bed1b734b75d82c40f1725e4471a55ad4f51218f86130ac038321033d710ab45bb54ac99618ad23b3c1da661631aa25f23bfe9d22b41876f1d46e4effffffff3ff04a68e22bdd52e7c8cb848156d2d158bd5515b3c50adabc87d0ca2cd3482d010000006a4730440220598d263c107004008e9e26baa1e770be30fd31ee55ded1898f7c00da05a75977022045536bead322ca246779698b9c3df3003377090f41afeca7fb2ce9e328ec4af2832102b738b531def73020bd637f32935924cc88549c8206976226d968edd3a42fc2d7ffffffff46a8dc8970eb96622f27a516adcf40e0fcec5731e7556e174f2a271aef6861c7010000006b483045022100c5b90a777a9fdc90c208dbef7290d1fc1be651f47151ee4ccff646872a454cf90220640cfbc4550446968fbbe9d12528f3adf7d87b31541569c59e790db8a220482583210391332546e22bbe8fe3af54addfad6f8b83d05fa4f5e047593d4c07ae938795beffffffff028036be26000000001976a914ddfb29efad43a667465ac59ff14dc6442a1adfca88ac3d5cba01000000001976a914b64dde7a505a13ca986c40e86e984a8dc81368b688ac00000000\", \"NONE\"],\n\n[\"A valid P2SH Transaction using the standard transaction type put forth in BIP 16\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"HASH160 0x14 0x8febbed40483661de6958d957412f82deed8e2f7 EQUAL\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000006e493046022100c66c9cdf4c43609586d15424c54707156e316d88b0a1534c9e6b0d4f311406310221009c0fe51dbc9c4ab7cc25d3fdbeccf6679fe6827f08edf2b4a9f16ee3eb0e438a0123210338e8034509af564c62644c07691942e0c056752008a173c89f60ab2a88ac2ebfacffffffff010000000000000000015100000000\", \"LOW_S\"],\n\n[\"Tests for CheckTransaction()\"],\n[\"MAX_MONEY output\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"HASH160 0x14 0x32afac281462b822adbec5094b8d4d337dd5bd6a EQUAL\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000006e493046022100e1eadba00d9296c743cb6ecc703fd9ddc9b3cd12906176a226ae4c18d6b00796022100a71aef7d2874deff681ba6080f1b278bac7bb99c61b08a85f4311970ffe7f63f012321030c0588dc44d92bdcbf8e72093466766fdc265ead8db64517b0c542275b70fffbacffffffff010040075af0750700015100000000\", \"LOW_S\"],\n\n[\"MAX_MONEY output + 0 output\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"HASH160 0x14 0xb558cbf4930954aa6a344363a15668d7477ae716 EQUAL\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000006d483045022027deccc14aa6668e78a8c9da3484fbcd4f9dcc9bb7d1b85146314b21b9ae4d86022100d0b43dece8cfb07348de0ca8bc5b86276fa88f7f2138381128b7c36ab2e42264012321029bb13463ddd5d2cc05da6e84e37536cb9525703cfd8f43afdb414988987a92f6acffffffff020040075af075070001510000000000000000015100000000\", \"LOW_S\"],\n\n[\"Coinbase of size 2\"],\n[\"Note the input is just required to make the tester happy\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000000\", -1, \"1\"]],\n\"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff025151ffffffff010000000000000000015100000000\", \"CLEANSTACK\"],\n\n[\"Coinbase of size 100\"],\n[\"Note the input is just required to make the tester happy\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000000\", -1, \"1\"]],\n\"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff6451515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151ffffffff010000000000000000015100000000\", \"CLEANSTACK\"],\n\n[\"Simple transaction with first input is signed with SIGHASH_ALL, second with SIGHASH_ANYONECANPAY\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG\"],\n  [\"0000000000000000000000000000000000000000000000000000000000000200\", 0, \"0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG\"]],\n \"010000000200010000000000000000000000000000000000000000000000000000000000000000000049483045022100d180fd2eb9140aeb4210c9204d3f358766eb53842b2a9473db687fa24b12a3cc022079781799cd4f038b85135bbe49ec2b57f306b2bb17101b17f71f000fcab2b6fb01ffffffff0002000000000000000000000000000000000000000000000000000000000000000000004847304402205f7530653eea9b38699e476320ab135b74771e1c48b81a5d041e2ca84b9be7a802200ac8d1f40fb026674fe5a5edd3dea715c27baa9baca51ed45ea750ac9dc0a55e81ffffffff010100000000000000015100000000\", \"NONE\"],\n\n[\"Same as above, but we change the sequence number of the first input to check that SIGHASH_ANYONECANPAY is being followed\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG\"],\n  [\"0000000000000000000000000000000000000000000000000000000000000200\", 0, \"0x21 0x035e7f0d4d0841bcd56c39337ed086b1a633ee770c1ffdd94ac552a95ac2ce0efc CHECKSIG\"]],\n \"01000000020001000000000000000000000000000000000000000000000000000000000000000000004948304502203a0f5f0e1f2bdbcd04db3061d18f3af70e07f4f467cbc1b8116f267025f5360b022100c792b6e215afc5afc721a351ec413e714305cb749aae3d7fee76621313418df101010000000002000000000000000000000000000000000000000000000000000000000000000000004847304402205f7530653eea9b38699e476320ab135b74771e1c48b81a5d041e2ca84b9be7a802200ac8d1f40fb026674fe5a5edd3dea715c27baa9baca51ed45ea750ac9dc0a55e81ffffffff010100000000000000015100000000\", \"LOW_S\"],\n\n[\"afd9c17f8913577ec3509520bd6e5d63e9c0fd2a5f70c787993b097ba6ca9fae which has several SIGHASH_SINGLE signatures\"],\n[[[\"63cfa5a09dc540bf63e53713b82d9ea3692ca97cd608c384f2aa88e51a0aac70\", 0, \"DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG\"],\n [\"04e8d0fcf3846c6734477b98f0f3d4badfb78f020ee097a0be5fe347645b817d\", 1, \"DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG\"],\n [\"ee1377aff5d0579909e11782e1d2f5f7b84d26537be7f5516dd4e43373091f3f\", 1, \"DUP HASH160 0x14 0xdcf72c4fd02f5a987cf9b02f2fabfcac3341a87d EQUALVERIFY CHECKSIG\"]],\n \"010000000370ac0a1ae588aaf284c308d67ca92c69a39e2db81337e563bf40c59da0a5cf63000000006a4730440220360d20baff382059040ba9be98947fd678fb08aab2bb0c172efa996fd8ece9b702201b4fb0de67f015c90e7ac8a193aeab486a1f587e0f54d0fb9552ef7f5ce6caec032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff7d815b6447e35fbea097e00e028fb7dfbad4f3f0987b4734676c84f3fcd0e804010000006b483045022100c714310be1e3a9ff1c5f7cacc65c2d8e781fc3a88ceb063c6153bf950650802102200b2d0979c76e12bb480da635f192cc8dc6f905380dd4ac1ff35a4f68f462fffd032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff3f1f097333e4d46d51f5e77b53264db8f7f5d2e18217e1099957d0f5af7713ee010000006c493046022100b663499ef73273a3788dea342717c2640ac43c5a1cf862c9e09b206fcb3f6bb8022100b09972e75972d9148f2bdd462e5cb69b57c1214b88fc55ca638676c07cfc10d8032103579ca2e6d107522f012cd00b52b9a65fb46f0c57b9b8b6e377c48f526a44741affffffff0380841e00000000001976a914bfb282c70c4191f45b5a6665cad1682f2c9cfdfb88ac80841e00000000001976a9149857cc07bed33a5cf12b9c5e0500b675d500c81188ace0fd1c00000000001976a91443c52850606c872403c0601e69fa34b26f62db4a88ac00000000\", \"LOW_S\"],\n\n [\"ddc454a1c0c35c188c98976b17670f69e586d9c0f3593ea879928332f0a069e7, which spends an input that pushes using a PUSHDATA1 that is negative when read as signed\"],\n [[[\"c5510a5dd97a25f43175af1fe649b707b1df8e1a41489bac33a23087027a2f48\", 0, \"0x4c 0xae 0x606563686f2022553246736447566b58312b5a536e587574356542793066794778625456415675534a6c376a6a334878416945325364667657734f53474f36633338584d7439435c6e543249584967306a486956304f376e775236644546673d3d22203e20743b206f70656e73736c20656e63202d7061737320706173733a5b314a564d7751432d707269766b65792d6865785d202d64202d6165732d3235362d636263202d61202d696e207460 DROP DUP HASH160 0x14 0xbfd7436b6265aa9de506f8a994f881ff08cc2872 EQUALVERIFY CHECKSIG\"]],\n \"0100000001482f7a028730a233ac9b48411a8edfb107b749e61faf7531f4257ad95d0a51c5000000008b483045022100bf0bbae9bde51ad2b222e87fbf67530fbafc25c903519a1e5dcc52a32ff5844e022028c4d9ad49b006dd59974372a54291d5764be541574bb0c4dc208ec51f80b7190141049dd4aad62741dc27d5f267f7b70682eee22e7e9c1923b9c0957bdae0b96374569b460eb8d5b40d972e8c7c0ad441de3d94c4a29864b212d56050acb980b72b2bffffffff0180969800000000001976a914e336d0017a9d28de99d16472f6ca6d5a3a8ebc9988ac00000000\", \"NONE\"],\n\n[\"Correct signature order\"],\n[\"Note the input is just required to make the tester happy\"],\n[[[\"b3da01dd4aae683c7aee4d5d8b52a540a508e1115f77cd7fa9a291243f501223\", 0, \"HASH160 0x14 0xb1ce99298d5f07364b57b1e5c9cc00be0b04a954 EQUAL\"]],\n\"01000000012312503f2491a2a97fcd775f11e108a540a5528b5d4dee7a3c68ae4add01dab300000000fdfe0000483045022100f6649b0eddfdfd4ad55426663385090d51ee86c3481bdc6b0c18ea6c0ece2c0b0220561c315b07cffa6f7dd9df96dbae9200c2dee09bf93cc35ca05e6cdf613340aa0148304502207aacee820e08b0b174e248abd8d7a34ed63b5da3abedb99934df9fddd65c05c4022100dfe87896ab5ee3df476c2655f9fbe5bd089dccbef3e4ea05b5d121169fe7f5f4014c695221031d11db38972b712a9fe1fc023577c7ae3ddb4a3004187d41c45121eecfdbb5b7210207ec36911b6ad2382860d32989c7b8728e9489d7bbc94a6b5509ef0029be128821024ea9fac06f666a4adc3fc1357b7bec1fd0bdece2b9d08579226a8ebde53058e453aeffffffff0180380100000000001976a914c9b99cddf847d10685a4fabaa0baf505f7c3dfab88ac00000000\", \"LOW_S\"],\n\n[\"cc60b1f899ec0a69b7c3f25ddf32c4524096a9c5b01cbd84c6d0312a0c478984, which is a fairly strange transaction which relies on OP_CHECKSIG returning 0 when checking a completely invalid sig of length 0\"],\n[[[\"cbebc4da731e8995fe97f6fadcd731b36ad40e5ecb31e38e904f6e5982fa09f7\", 0, \"0x2102085c6600657566acc2d6382a47bc3f324008d2aa10940dd7705a48aa2a5a5e33ac7c2103f5d0fb955f95dd6be6115ce85661db412ec6a08abcbfce7da0ba8297c6cc0ec4ac7c5379a820d68df9e32a147cffa36193c6f7c43a1c8c69cda530e1c6db354bfabdcfefaf3c875379a820f531f3041d3136701ea09067c53e7159c8f9b2746a56c3d82966c54bbc553226879a5479827701200122a59a5379827701200122a59a6353798277537982778779679a68\"]],\n\"0100000001f709fa82596e4f908ee331cb5e0ed46ab331d7dcfaf697fe95891e73dac4ebcb000000008c20ca42095840735e89283fec298e62ac2ddea9b5f34a8cbb7097ad965b87568100201b1b01dc829177da4a14551d2fc96a9db00c6501edfa12f22cd9cefd335c227f483045022100a9df60536df5733dd0de6bc921fab0b3eee6426501b43a228afa2c90072eb5ca02201c78b74266fac7d1db5deff080d8a403743203f109fbcabf6d5a760bf87386d20100ffffffff01c075790000000000232103611f9a45c18f28f06f19076ad571c344c82ce8fcfe34464cf8085217a2d294a6ac00000000\", \"CLEANSTACK\"],\n\n[\"Empty pubkey\"],\n[[[\"229257c295e7f555421c1bfec8538dd30a4b5c37c1c8810bbe83cafa7811652c\", 0, \"0x00 CHECKSIG NOT\"]],\n\"01000000012c651178faca83be0b81c8c1375c4b0ad38d53c8fe1b1c4255f5e795c25792220000000049483045022100d6044562284ac76c985018fc4a90127847708c9edb280996c507b28babdc4b2a02203d74eca3f1a4d1eea7ff77b528fde6d5dc324ec2dbfdb964ba885f643b9704cd01ffffffff010100000000000000232102c2410f8891ae918cab4ffc4bb4a3b0881be67c7a1e7faa8b5acf9ab8932ec30cac00000000\", \"STRICTENC,NULLFAIL\"],\n\n[\"Empty signature\"],\n[[[\"9ca93cfd8e3806b9d9e2ba1cf64e3cc6946ee0119670b1796a09928d14ea25f7\", 0, \"0x21 0x028a1d66975dbdf97897e3a4aef450ebeb5b5293e4a0b4a6d3a2daaa0b2b110e02 CHECKSIG NOT\"]],\n\"0100000001f725ea148d92096a79b1709611e06e94c63c4ef61cbae2d9b906388efd3ca99c000000000100ffffffff0101000000000000002321028a1d66975dbdf97897e3a4aef450ebeb5b5293e4a0b4a6d3a2daaa0b2b110e02ac00000000\", \"NONE\"],\n\n[[[\"444e00ed7840d41f20ecd9c11d3f91982326c731a02f3c05748414a4fa9e59be\", 0, \"1 0x00 0x21 0x02136b04758b0b6e363e7a6fbe83aaf527a153db2b060d36cc29f7f8309ba6e458 2 CHECKMULTISIG\"]],\n\"0100000001be599efaa4148474053c2fa031c7262398913f1dc1d9ec201fd44078ed004e44000000004900473044022022b29706cb2ed9ef0cb3c97b72677ca2dfd7b4160f7b4beb3ba806aa856c401502202d1e52582412eba2ed474f1f437a427640306fd3838725fab173ade7fe4eae4a01ffffffff010100000000000000232103ac4bba7e7ca3e873eea49e08132ad30c7f03640b6539e9b59903cf14fd016bbbac00000000\", \"NONE\"],\n\n[[[\"e16abbe80bf30c080f63830c8dbf669deaef08957446e95940227d8c5e6db612\", 0, \"1 0x21 0x03905380c7013e36e6e19d305311c1b81fce6581f5ee1c86ef0627c68c9362fc9f 0x00 2 CHECKMULTISIG\"]],\n\"010000000112b66d5e8c7d224059e946749508efea9d66bf8d0c83630f080cf30be8bb6ae100000000490047304402206ffe3f14caf38ad5c1544428e99da76ffa5455675ec8d9780fac215ca17953520220779502985e194d84baa36b9bd40a0dbd981163fa191eb884ae83fc5bd1c86b1101ffffffff010100000000000000232103905380c7013e36e6e19d305311c1b81fce6581f5ee1c86ef0627c68c9362fc9fac00000000\", \"STRICTENC\"],\n\n[[[\"ebbcf4bfce13292bd791d6a65a2a858d59adbf737e387e40370d4e64cc70efb0\", 0, \"2 0x21 0x033bcaa0a602f0d44cc9d5637c6e515b0471db514c020883830b7cefd73af04194 0x21 0x03a88b326f8767f4f192ce252afe33c94d25ab1d24f27f159b3cb3aa691ffe1423 2 CHECKMULTISIG NOT\"]],\n\"0100000001b0ef70cc644e0d37407e387e73bfad598d852a5aa6d691d72b2913cebff4bceb000000004a00473044022068cd4851fc7f9a892ab910df7a24e616f293bcb5c5fbdfbc304a194b26b60fba022078e6da13d8cb881a22939b952c24f88b97afd06b4c47a47d7f804c9a352a6d6d0100ffffffff0101000000000000002321033bcaa0a602f0d44cc9d5637c6e515b0471db514c020883830b7cefd73af04194ac00000000\", \"NULLFAIL\"],\n\n[[[\"ba4cd7ae2ad4d4d13ebfc8ab1d93a63e4a6563f25089a18bf0fc68f282aa88c1\", 0, \"2 0x21 0x037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1 0x21 0x02edc823cd634f2c4033d94f5755207cb6b60c4b1f1f056ad7471c47de5f2e4d50 2 CHECKMULTISIG NOT\"]],\n\"0100000001c188aa82f268fcf08ba18950f263654a3ea6931dabc8bf3ed1d4d42aaed74cba000000004b0000483045022100940378576e069aca261a6b26fb38344e4497ca6751bb10905c76bb689f4222b002204833806b014c26fd801727b792b1260003c55710f87c5adbd7a9cb57446dbc9801ffffffff0101000000000000002321037c615d761e71d38903609bf4f46847266edc2fb37532047d747ba47eaae5ffe1ac00000000\", \"NULLFAIL\"],\n\n\n[\"OP_CODESEPARATOR tests\"],\n\n[\"Test that SignatureHash() removes OP_CODESEPARATOR with FindAndDelete()\"],\n[[[\"bc7fd132fcf817918334822ee6d9bd95c889099c96e07ca2c1eb2cc70db63224\", 0, \"CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIG\"]],\n\"01000000012432b60dc72cebc1a27ce0969c0989c895bdd9e62e8234839117f8fc32d17fbc000000004a493046022100a576b52051962c25e642c0fd3d77ee6c92487048e5d90818bcf5b51abaccd7900221008204f8fb121be4ec3b24483b1f92d89b1b0548513a134e345c5442e86e8617a501ffffffff010000000000000000016a00000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n[[[\"83e194f90b6ef21fa2e3a365b63794fb5daa844bdc9b25de30899fcfe7b01047\", 0, \"CODESEPARATOR CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIG\"]],\n\"01000000014710b0e7cf9f8930de259bdc4b84aa5dfb9437b665a3e3a21ff26e0bf994e183000000004a493046022100a166121a61b4eeb19d8f922b978ff6ab58ead8a5a5552bf9be73dc9c156873ea02210092ad9bc43ee647da4f6652c320800debcf08ec20a094a0aaf085f63ecb37a17201ffffffff010000000000000000016a00000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n\n[\"Hashed data starts at the CODESEPARATOR\"],\n[[[\"326882a7f22b5191f1a0cc9962ca4b878cd969cf3b3a70887aece4d801a0ba5e\", 0, \"0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CODESEPARATOR CHECKSIG\"]],\n\"01000000015ebaa001d8e4ec7a88703a3bcf69d98c874bca6299cca0f191512bf2a7826832000000004948304502203bf754d1c6732fbf87c5dcd81258aefd30f2060d7bd8ac4a5696f7927091dad1022100f5bcb726c4cf5ed0ed34cc13dadeedf628ae1045b7cb34421bc60b89f4cecae701ffffffff010000000000000000016a00000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n\n[\"But only if execution has reached it\"],\n[[[\"a955032f4d6b0c9bfe8cad8f00a8933790b9c1dc28c82e0f48e75b35da0e4944\", 0, \"0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIGVERIFY CODESEPARATOR 0x21 0x038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041 CHECKSIGVERIFY CODESEPARATOR 1\"]],\n\"010000000144490eda355be7480f2ec828dcc1b9903793a8008fad8cfe9b0c6b4d2f0355a900000000924830450221009c0a27f886a1d8cb87f6f595fbc3163d28f7a81ec3c4b252ee7f3ac77fd13ffa02203caa8dfa09713c8c4d7ef575c75ed97812072405d932bd11e6a1593a98b679370148304502201e3861ef39a526406bad1e20ecad06be7375ad40ddb582c9be42d26c3a0d7b240221009d0a3985e96522e59635d19cc4448547477396ce0ef17a58e7d74c3ef464292301ffffffff010000000000000000016a00000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n\n[\"CODESEPARATOR in an unexecuted IF block does not change what is hashed\"],\n[[[\"a955032f4d6b0c9bfe8cad8f00a8933790b9c1dc28c82e0f48e75b35da0e4944\", 0, \"IF CODESEPARATOR ENDIF 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 CHECKSIGVERIFY CODESEPARATOR 1\"]],\n\"010000000144490eda355be7480f2ec828dcc1b9903793a8008fad8cfe9b0c6b4d2f0355a9000000004a48304502207a6974a77c591fa13dff60cabbb85a0de9e025c09c65a4b2285e47ce8e22f761022100f0efaac9ff8ac36b10721e0aae1fb975c90500b50c56e8a0cc52b0403f0425dd0100ffffffff010000000000000000016a00000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n\n[\"As above, with the IF block executed\"],\n[[[\"a955032f4d6b0c9bfe8cad8f00a8933790b9c1dc28c82e0f48e75b35da0e4944\", 0, \"IF CODESEPARATOR ENDIF 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 CHECKSIGVERIFY CODESEPARATOR 1\"]],\n\"010000000144490eda355be7480f2ec828dcc1b9903793a8008fad8cfe9b0c6b4d2f0355a9000000004a483045022100fa4a74ba9fd59c59f46c3960cf90cbe0d2b743c471d24a3d5d6db6002af5eebb02204d70ec490fd0f7055a7c45f86514336e3a7f03503dacecabb247fc23f15c83510151ffffffff010000000000000000016a00000000\", \"CONST_SCRIPTCODE\"],\n\n\n[\"CHECKSIG is legal in scriptSigs\"],\n[[[\"ccf7f4053a02e653c36ac75c891b7496d0dc5ce5214f6c913d9cf8f1329ebee0\", 0, \"DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG\"]],\n\"0100000001e0be9e32f1f89c3d916c4f21e55cdcd096741b895cc76ac353e6023a05f4f7cc00000000d86149304602210086e5f736a2c3622ebb62bd9d93d8e5d76508b98be922b97160edc3dcca6d8c47022100b23c312ac232a4473f19d2aeb95ab7bdf2b65518911a0d72d50e38b5dd31dc820121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac4730440220508fa761865c8abd81244a168392876ee1d94e8ed83897066b5e2df2400dad24022043f5ee7538e87e9c6aef7ef55133d3e51da7cc522830a9c4d736977a76ef755c0121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000\", \"SIGPUSHONLY,CONST_SCRIPTCODE,LOW_S,CLEANSTACK\"],\n\n[\"Same semantics for OP_CODESEPARATOR\"],\n[[[\"10c9f0effe83e97f80f067de2b11c6a00c3088a4bce42c5ae761519af9306f3c\", 1, \"DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG\"]],\n\"01000000013c6f30f99a5161e75a2ce4bca488300ca0c6112bde67f0807fe983feeff0c91001000000e608646561646265656675ab61493046022100ce18d384221a731c993939015e3d1bcebafb16e8c0b5b5d14097ec8177ae6f28022100bcab227af90bab33c3fe0a9abfee03ba976ee25dc6ce542526e9b2e56e14b7f10121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac493046022100c3b93edcc0fd6250eb32f2dd8a0bba1754b0f6c3be8ed4100ed582f3db73eba2022100bf75b5bd2eff4d6bf2bda2e34a40fcc07d4aa3cf862ceaa77b47b81eff829f9a01ab21038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000\", \"SIGPUSHONLY,CONST_SCRIPTCODE,LOW_S,CLEANSTACK\"],\n\n[\"Signatures are removed from the script they are in by FindAndDelete() in the CHECKSIG code; even multiple instances of one signature can be removed.\"],\n[[[\"6056ebd549003b10cbbd915cea0d82209fe40b8617104be917a26fa92cbe3d6f\", 0, \"DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG\"]],\n\"01000000016f3dbe2ca96fa217e94b1017860be49f20820dea5c91bdcb103b0049d5eb566000000000fd1d0147304402203989ac8f9ad36b5d0919d97fa0a7f70c5272abee3b14477dc646288a8b976df5022027d19da84a066af9053ad3d1d7459d171b7e3a80bc6c4ef7a330677a6be548140147304402203989ac8f9ad36b5d0919d97fa0a7f70c5272abee3b14477dc646288a8b976df5022027d19da84a066af9053ad3d1d7459d171b7e3a80bc6c4ef7a330677a6be548140121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ac47304402203757e937ba807e4a5da8534c17f9d121176056406a6465054bdd260457515c1a02200f02eccf1bec0f3a0d65df37889143c2e88ab7acec61a7b6f5aa264139141a2b0121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000\", \"SIGPUSHONLY,CONST_SCRIPTCODE,CLEANSTACK\"],\n\n[\"That also includes ahead of the opcode being executed.\"],\n[[[\"5a6b0021a6042a686b6b94abc36b387bef9109847774e8b1e51eb8cc55c53921\", 1, \"DUP HASH160 0x14 0xee5a6aa40facefb2655ac23c0c28c57c65c41f9b EQUALVERIFY CHECKSIG\"]],\n\"01000000012139c555ccb81ee5b1e87477840991ef7b386bc3ab946b6b682a04a621006b5a01000000fdb40148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390121038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f2204148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a5800390175ac4830450220646b72c35beeec51f4d5bc1cbae01863825750d7f490864af354e6ea4f625e9c022100f04b98432df3a9641719dbced53393022e7249fb59db993af1118539830aab870148304502201723e692e5f409a7151db386291b63524c5eb2030df652b1f53022fd8207349f022100b90d9bbf2f3366ce176e5e780a00433da67d9e5c79312c6388312a296a580039017521038479a0fa998cd35259a2ef0a7a5c68662c1474f88ccb6d08a7677bbec7f22041ffffffff010000000000000000016a00000000\", \"SIGPUSHONLY,CONST_SCRIPTCODE,LOW_S,CLEANSTACK\"],\n\n[\"Finally CHECKMULTISIG removes all signatures prior to hashing the script containing those signatures. In conjunction with the SIGHASH_SINGLE bug this lets us test whether or not FindAndDelete() is actually present in scriptPubKey/redeemScript evaluation by including a signature of the digest 0x01 We can compute in advance for our pubkey, embed it in the scriptPubKey, and then also using a normal SIGHASH_ALL signature. If FindAndDelete() wasn't run, the 'bugged' signature would still be in the hashed script, and the normal signature would fail.\"],\n\n[\"Here's an example on mainnet within a P2SH redeemScript. Remarkably it's a standard transaction in <0.9\"],\n[[[\"b5b598de91787439afd5938116654e0b16b7a0d0f82742ba37564219c5afcbf9\", 0, \"DUP HASH160 0x14 0xf6f365c40f0739b61de827a44751e5e99032ed8f EQUALVERIFY CHECKSIG\"],\n  [\"ab9805c6d57d7070d9a42c5176e47bb705023e6b67249fb6760880548298e742\", 0, \"HASH160 0x14 0xd8dacdadb7462ae15cd906f1878706d0da8660e6 EQUAL\"]],\n\"0100000002f9cbafc519425637ba4227f8d0a0b7160b4e65168193d5af39747891de98b5b5000000006b4830450221008dd619c563e527c47d9bd53534a770b102e40faa87f61433580e04e271ef2f960220029886434e18122b53d5decd25f1f4acb2480659fea20aabd856987ba3c3907e0121022b78b756e2258af13779c1a1f37ea6800259716ca4b7f0b87610e0bf3ab52a01ffffffff42e7988254800876b69f24676b3e0205b77be476512ca4d970707dd5c60598ab00000000fd260100483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a53034930460221008431bdfa72bc67f9d41fe72e94c88fb8f359ffa30b33c72c121c5a877d922e1002210089ef5fc22dd8bfc6bf9ffdb01a9862d27687d424d1fefbab9e9c7176844a187a014c9052483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71210378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c7153aeffffffff01a08601000000000017a914d8dacdadb7462ae15cd906f1878706d0da8660e68700000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n\n[\"Same idea, but with bare CHECKMULTISIG\"],\n[[[\"ceafe58e0f6e7d67c0409fbbf673c84c166e3c5d3c24af58f7175b18df3bb3db\", 0, \"DUP HASH160 0x14 0xf6f365c40f0739b61de827a44751e5e99032ed8f EQUALVERIFY CHECKSIG\"],\n  [\"ceafe58e0f6e7d67c0409fbbf673c84c166e3c5d3c24af58f7175b18df3bb3db\", 1, \"2 0x48 0x3045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 0x21 0x0378d430274f8c5ec1321338151e9f27f4c676a008bdf8638d07c0b6be9ab35c71 3 CHECKMULTISIG\"]],\n\"0100000002dbb33bdf185b17f758af243c5d3c6e164cc873f6bb9f40c0677d6e0f8ee5afce000000006b4830450221009627444320dc5ef8d7f68f35010b4c050a6ed0d96b67a84db99fda9c9de58b1e02203e4b4aaa019e012e65d69b487fdf8719df72f488fa91506a80c49a33929f1fd50121022b78b756e2258af13779c1a1f37ea6800259716ca4b7f0b87610e0bf3ab52a01ffffffffdbb33bdf185b17f758af243c5d3c6e164cc873f6bb9f40c0677d6e0f8ee5afce010000009300483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303483045022015bd0139bcccf990a6af6ec5c1c52ed8222e03a0d51c334df139968525d2fcd20221009f9efe325476eb64c3958e4713e9eefe49bf1d820ed58d2112721b134e2a1a5303ffffffff01a0860100000000001976a9149bc0bbdd3024da4d0c38ed1aecf5c68dd1d3fa1288ac00000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n\n\n[\"CHECKLOCKTIMEVERIFY tests\"],\n\n[\"By-height locks, with argument == 0 and == tx nLockTime\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0 CHECKLOCKTIMEVERIFY 1\"]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000\", \"CLEANSTACK\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"499999999 CHECKLOCKTIMEVERIFY\"]],\n\"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0 CHECKLOCKTIMEVERIFY 1\"]],\n\"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ff64cd1d\", \"CLEANSTACK\"],\n\n[\"By-time locks, with argument just beyond tx nLockTime (but within numerical boundaries)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"500000000 CHECKLOCKTIMEVERIFY\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4294967295 CHECKLOCKTIMEVERIFY\"]],\n\"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"500000000 CHECKLOCKTIMEVERIFY\"]],\n\"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000ffffffff\", \"NONE\"],\n\n[\"Any non-maxint nSequence is fine\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0 CHECKLOCKTIMEVERIFY 1\"]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000feffffff0100000000000000000000000000\", \"CLEANSTACK\"],\n\n[\"The argument can be calculated rather than created directly by a PUSHDATA\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"499999999 1ADD CHECKLOCKTIMEVERIFY\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000065cd1d\", \"NONE\"],\n\n[\"Perhaps even by an ADD producing a 5-byte result that is out of bounds for other opcodes\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483647 2147483647 ADD CHECKLOCKTIMEVERIFY\"]],\n\"0100000001000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000feffffff\", \"NONE\"],\n\n[\"5 byte non-minimally-encoded arguments are valid\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x05 0x0000000000 CHECKLOCKTIMEVERIFY 1\"]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000\", \"CLEANSTACK,MINIMALDATA\"],\n\n[\"Valid CHECKLOCKTIMEVERIFY in scriptSig\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"1\"]],\n\"01000000010001000000000000000000000000000000000000000000000000000000000000000000000251b1000000000100000000000000000001000000\", \"SIGPUSHONLY,CLEANSTACK\"],\n\n[\"Valid CHECKLOCKTIMEVERIFY in redeemScript\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"HASH160 0x14 0xc5b93064159b3b2d6ab506a41b1f50463771b988 EQUAL\"]],\n\"0100000001000100000000000000000000000000000000000000000000000000000000000000000000030251b1000000000100000000000000000001000000\", \"NONE\"],\n\n[\"A transaction with a non-standard DER signature.\"],\n[[[\"b1dbc81696c8a9c0fccd0693ab66d7c368dbc38c0def4e800685560ddd1b2132\", 0, \"DUP HASH160 0x14 0x4b3bd7eba3bc0284fd3007be7f3be275e94f5826 EQUALVERIFY CHECKSIG\"]],\n\"010000000132211bdd0d568506804eef0d8cc3db68c3d766ab9306cdfcc0a9c89616c8dbb1000000006c493045022100c7bb0faea0522e74ff220c20c022d2cb6033f8d167fb89e75a50e237a35fd6d202203064713491b1f8ad5f79e623d0219ad32510bfaa1009ab30cbee77b59317d6e30001210237af13eb2d84e4545af287b919c2282019c9691cc509e78e196a9d8274ed1be0ffffffff0100000000000000001976a914f1b3ed2eda9a2ebe5a9374f692877cdf87c0f95b88ac00000000\", \"DERSIG,LOW_S,STRICTENC\"],\n\n[\"CHECKSEQUENCEVERIFY tests\"],\n\n[\"By-height locks, with argument == 0 and == txin.nSequence\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0 CHECKSEQUENCEVERIFY 1\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000\", \"CLEANSTACK\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"65535 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffff00000100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"65535 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffbf7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0 CHECKSEQUENCEVERIFY 1\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffbf7f0100000000000000000000000000\", \"CLEANSTACK\"],\n\n[\"By-time locks, with argument == 0 and == txin.nSequence\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4194304 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000040000100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4259839 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffff40000100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4259839 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffff7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4194304 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffff7f0100000000000000000000000000\", \"NONE\"],\n\n[\"Upper sequence with upper sequence is fine\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483648 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000000800100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4294967295 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000000800100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483648 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000feffffff0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4294967295 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000feffffff0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483648 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4294967295 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000\", \"NONE\"],\n\n[\"Argument 2^31 with various nSequence\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483648 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffbf7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483648 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffff7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483648 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000\", \"NONE\"],\n\n[\"Argument 2^32-1 with various nSequence\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4294967295 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffbf7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4294967295 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffff7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4294967295 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000\", \"NONE\"],\n\n[\"Argument 3<<31 with various nSequence\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x050000008001 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffbf7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x050000008001 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffff7f0100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x050000008001 CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff0100000000000000000000000000\", \"NONE\"],\n\n[\"5 byte non-minimally-encoded operandss are valid\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x05 0x0000000000 CHECKSEQUENCEVERIFY 1\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000\", \"MINIMALDATA,CLEANSTACK\"],\n\n[\"The argument can be calculated rather than created directly by a PUSHDATA\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4194303 1ADD CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000040000100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"4194304 1SUB CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000ffff00000100000000000000000000000000\", \"NONE\"],\n\n[\"An ADD producing a 5-byte result that sets CTxIn::SEQUENCE_LOCKTIME_DISABLE_FLAG\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483647 65536 ADD CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000\", \"NONE\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"2147483647 4259840 ADD CHECKSEQUENCEVERIFY\"]],\n\"020000000100010000000000000000000000000000000000000000000000000000000000000000000000000040000100000000000000000000000000\", \"NONE\"],\n\n[\"Valid CHECKSEQUENCEVERIFY in scriptSig\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"1\"]],\n\"02000000010001000000000000000000000000000000000000000000000000000000000000000000000251b2010000000100000000000000000000000000\", \"SIGPUSHONLY,CLEANSTACK\"],\n\n[\"Valid CHECKSEQUENCEVERIFY in redeemScript\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"HASH160 0x14 0x7c17aff532f22beb54069942f9bf567a66133eaf EQUAL\"]],\n\"0200000001000100000000000000000000000000000000000000000000000000000000000000000000030251b2010000000100000000000000000000000000\", \"NONE\"],\n\n[\"Valid P2WPKH (Private key of segwit tests is L5AQtV2HDm4xGsseLokK2VAT2EtYKcTm3c7HwqnJBFt9LdaQULsM)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1000]],\n\"0100000000010100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff01e8030000000000001976a9144c9c3dfac4207d5d8cb89df5722cb3d712385e3f88ac02483045022100cfb07164b36ba64c1b1e8c7720a56ad64d96f6ef332d3d37f9cb3c96477dc44502200a464cd7a9cf94cd70f66ce4f4f0625ef650052c7afcfe29d7d7e01830ff91ed012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc7100000000\", \"NONE\"],\n\n[\"Valid P2WSH\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x00 0x20 0xff25429251b5a84f452230a3c75fd886b7fc5a7865ce4a7bb7a9d7c5be6da3db\", 1000]],\n\"0100000000010100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff01e8030000000000001976a9144c9c3dfac4207d5d8cb89df5722cb3d712385e3f88ac02483045022100aa5d8aa40a90f23ce2c3d11bc845ca4a12acd99cbea37de6b9f6d86edebba8cb022022dedc2aa0a255f74d04c0b76ece2d7c691f9dd11a64a8ac49f62a99c3a05f9d01232103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ac00000000\", \"NONE\"],\n\n[\"Valid P2SH(P2WPKH)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"HASH160 0x14 0xfe9c7dacc9fcfbf7e3b7d5ad06aa2b28c5a7b7e3 EQUAL\", 1000]],\n\"01000000000101000100000000000000000000000000000000000000000000000000000000000000000000171600144c9c3dfac4207d5d8cb89df5722cb3d712385e3fffffffff01e8030000000000001976a9144c9c3dfac4207d5d8cb89df5722cb3d712385e3f88ac02483045022100cfb07164b36ba64c1b1e8c7720a56ad64d96f6ef332d3d37f9cb3c96477dc44502200a464cd7a9cf94cd70f66ce4f4f0625ef650052c7afcfe29d7d7e01830ff91ed012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc7100000000\", \"NONE\"],\n\n[\"Valid P2SH(P2WSH)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"HASH160 0x14 0x2135ab4f0981830311e35600eebc7376dce3a914 EQUAL\", 1000]],\n\"0100000000010100010000000000000000000000000000000000000000000000000000000000000000000023220020ff25429251b5a84f452230a3c75fd886b7fc5a7865ce4a7bb7a9d7c5be6da3dbffffffff01e8030000000000001976a9144c9c3dfac4207d5d8cb89df5722cb3d712385e3f88ac02483045022100aa5d8aa40a90f23ce2c3d11bc845ca4a12acd99cbea37de6b9f6d86edebba8cb022022dedc2aa0a255f74d04c0b76ece2d7c691f9dd11a64a8ac49f62a99c3a05f9d01232103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ac00000000\", \"NONE\"],\n\n[\"Witness with SigHash Single|AnyoneCanPay\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3100],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1100],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 3, \"0x51\", 4100]],\n\"0100000000010400010000000000000000000000000000000000000000000000000000000000000200000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000300000000ffffffff05540b0000000000000151d0070000000000000151840300000000000001513c0f00000000000001512c010000000000000151000248304502210092f4777a0f17bf5aeb8ae768dec5f2c14feabf9d1fe2c89c78dfed0f13fdb86902206da90a86042e252bcd1e80a168c719e4a1ddcc3cebea24b9812c5453c79107e9832103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71000000000000\", \"NONE\"],\n\n[\"Witness with SigHash Single|AnyoneCanPay (same signature as previous)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff03e8030000000000000151d0070000000000000151b80b0000000000000151000248304502210092f4777a0f17bf5aeb8ae768dec5f2c14feabf9d1fe2c89c78dfed0f13fdb86902206da90a86042e252bcd1e80a168c719e4a1ddcc3cebea24b9812c5453c79107e9832103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash Single\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff0484030000000000000151d0070000000000000151540b0000000000000151c800000000000000015100024730440220699e6b0cfe015b64ca3283e6551440a34f901ba62dd4c72fe1cb815afb2e6761022021cc5e84db498b1479de14efda49093219441adc6c543e5534979605e273d80b032103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash Single (same signature as previous)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff03e8030000000000000151d0070000000000000151b80b000000000000015100024730440220699e6b0cfe015b64ca3283e6551440a34f901ba62dd4c72fe1cb815afb2e6761022021cc5e84db498b1479de14efda49093219441adc6c543e5534979605e273d80b032103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash None|AnyoneCanPay\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3100],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1100],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 3, \"0x51\", 4100]],\n\"0100000000010400010000000000000000000000000000000000000000000000000000000000000200000000ffffffff00010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000300000000ffffffff04b60300000000000001519e070000000000000151860b00000000000001009600000000000000015100000248304502210091b32274295c2a3fa02f5bce92fb2789e3fc6ea947fbe1a76e52ea3f4ef2381a022079ad72aefa3837a2e0c033a8652a59731da05fa4a813f4fc48e87c075037256b822103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash None|AnyoneCanPay (same signature as previous)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff03e8030000000000000151d0070000000000000151b80b0000000000000151000248304502210091b32274295c2a3fa02f5bce92fb2789e3fc6ea947fbe1a76e52ea3f4ef2381a022079ad72aefa3837a2e0c033a8652a59731da05fa4a813f4fc48e87c075037256b822103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash None\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff04b60300000000000001519e070000000000000151860b0000000000000100960000000000000001510002473044022022fceb54f62f8feea77faac7083c3b56c4676a78f93745adc8a35800bc36adfa022026927df9abcf0a8777829bcfcce3ff0a385fa54c3f9df577405e3ef24ee56479022103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash None (same signature as previous)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff03e8030000000000000151d0070000000000000151b80b00000000000001510002473044022022fceb54f62f8feea77faac7083c3b56c4676a78f93745adc8a35800bc36adfa022026927df9abcf0a8777829bcfcce3ff0a385fa54c3f9df577405e3ef24ee56479022103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash None (same signature, only sequences changed)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"01000000000103000100000000000000000000000000000000000000000000000000000000000000000000000200000000010000000000000000000000000000000000000000000000000000000000000100000000ffffffff000100000000000000000000000000000000000000000000000000000000000002000000000200000003e8030000000000000151d0070000000000000151b80b00000000000001510002473044022022fceb54f62f8feea77faac7083c3b56c4676a78f93745adc8a35800bc36adfa022026927df9abcf0a8777829bcfcce3ff0a385fa54c3f9df577405e3ef24ee56479022103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash All|AnyoneCanPay\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3100],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1100],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 3, \"0x51\", 4100]],\n\"0100000000010400010000000000000000000000000000000000000000000000000000000000000200000000ffffffff00010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000300000000ffffffff03e8030000000000000151d0070000000000000151b80b0000000000000151000002483045022100a3cec69b52cba2d2de623eeef89e0ba1606184ea55476c0f8189fda231bc9cbb022003181ad597f7c380a7d1c740286b1d022b8b04ded028b833282e055e03b8efef812103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Witness with SigHash All|AnyoneCanPay (same signature as previous)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff03e8030000000000000151d0070000000000000151b80b00000000000001510002483045022100a3cec69b52cba2d2de623eeef89e0ba1606184ea55476c0f8189fda231bc9cbb022003181ad597f7c380a7d1c740286b1d022b8b04ded028b833282e055e03b8efef812103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Unknown witness program version  (without DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x60 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 2000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"0x51\", 3000]],\n\"0100000000010300010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000200000000ffffffff03e8030000000000000151d0070000000000000151b80b00000000000001510002483045022100a3cec69b52cba2d2de623ffffffffff1606184ea55476c0f8189fda231bc9cbb022003181ad597f7c380a7d1c740286b1d022b8b04ded028b833282e055e03b8efef812103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM\"],\n\n[\"Witness with a push of 520 bytes\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x00 0x20 0x33198a9bfef674ebddb9ffaa52928017b8472791e54c609cb95f278ac6b1e349\", 1000]],\n\"0100000000010100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff010000000000000000015102fd08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002755100000000\", \"NONE\"],\n\n[\"Transaction mixing all SigHash, segwit and normal inputs\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1001],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 2, \"DUP HASH160 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f EQUALVERIFY CHECKSIG\", 1002],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 3, \"DUP HASH160 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f EQUALVERIFY CHECKSIG\", 1003],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 4, \"DUP HASH160 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f EQUALVERIFY CHECKSIG\", 1004],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 5, \"DUP HASH160 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f EQUALVERIFY CHECKSIG\", 1005],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 6, \"DUP HASH160 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f EQUALVERIFY CHECKSIG\", 1006],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 7, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1007],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 8, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1008],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 9, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1009],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 10, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1010],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 11, \"DUP HASH160 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f EQUALVERIFY CHECKSIG\", 1011]],\n\"0100000000010c00010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff0001000000000000000000000000000000000000000000000000000000000000020000006a473044022026c2e65b33fcd03b2a3b0f25030f0244bd23cc45ae4dec0f48ae62255b1998a00220463aa3982b718d593a6b9e0044513fd67a5009c2fdccc59992cffc2b167889f4012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ffffffff0001000000000000000000000000000000000000000000000000000000000000030000006a4730440220008bd8382911218dcb4c9f2e75bf5c5c3635f2f2df49b36994fde85b0be21a1a02205a539ef10fb4c778b522c1be852352ea06c67ab74200977c722b0bc68972575a012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ffffffff0001000000000000000000000000000000000000000000000000000000000000040000006b483045022100d9436c32ff065127d71e1a20e319e4fe0a103ba0272743dbd8580be4659ab5d302203fd62571ee1fe790b182d078ecfd092a509eac112bea558d122974ef9cc012c7012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ffffffff0001000000000000000000000000000000000000000000000000000000000000050000006a47304402200e2c149b114ec546015c13b2b464bbcb0cdc5872e6775787527af6cbc4830b6c02207e9396c6979fb15a9a2b96ca08a633866eaf20dc0ff3c03e512c1d5a1654f148012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ffffffff0001000000000000000000000000000000000000000000000000000000000000060000006b483045022100b20e70d897dc15420bccb5e0d3e208d27bdd676af109abbd3f88dbdb7721e6d6022005836e663173fbdfe069f54cde3c2decd3d0ea84378092a5d9d85ec8642e8a41012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ffffffff00010000000000000000000000000000000000000000000000000000000000000700000000ffffffff00010000000000000000000000000000000000000000000000000000000000000800000000ffffffff00010000000000000000000000000000000000000000000000000000000000000900000000ffffffff00010000000000000000000000000000000000000000000000000000000000000a00000000ffffffff00010000000000000000000000000000000000000000000000000000000000000b0000006a47304402206639c6e05e3b9d2675a7f3876286bdf7584fe2bbd15e0ce52dd4e02c0092cdc60220757d60b0a61fc95ada79d23746744c72bac1545a75ff6c2c7cdb6ae04e7e9592012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71ffffffff0ce8030000000000000151e9030000000000000151ea030000000000000151eb030000000000000151ec030000000000000151ed030000000000000151ee030000000000000151ef030000000000000151f0030000000000000151f1030000000000000151f2030000000000000151f30300000000000001510248304502210082219a54f61bf126bfc3fa068c6e33831222d1d7138c6faa9d33ca87fd4202d6022063f9902519624254d7c2c8ea7ba2d66ae975e4e229ae38043973ec707d5d4a83012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc7102473044022017fb58502475848c1b09f162cb1688d0920ff7f142bed0ef904da2ccc88b168f02201798afa61850c65e77889cbcd648a5703b487895517c88f85cdd18b021ee246a012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc7100000000000247304402202830b7926e488da75782c81a54cd281720890d1af064629ebf2e31bf9f5435f30220089afaa8b455bbeb7d9b9c3fe1ed37d07685ade8455c76472cda424d93e4074a012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc7102473044022026326fcdae9207b596c2b05921dbac11d81040c4d40378513670f19d9f4af893022034ecd7a282c0163b89aaa62c22ec202cef4736c58cd251649bad0d8139bcbf55012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71024730440220214978daeb2f38cd426ee6e2f44131a33d6b191af1c216247f1dd7d74c16d84a02205fdc05529b0bc0c430b4d5987264d9d075351c4f4484c16e91662e90a72aab24012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710247304402204a6e9f199dc9672cf2ff8094aaa784363be1eb62b679f7ff2df361124f1dca3302205eeb11f70fab5355c9c8ad1a0700ea355d315e334822fa182227e9815308ee8f012103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710000000000\", \"NONE\"],\n\n[\"Unknown version witness program with empty witness\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x60 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1000]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff01e803000000000000015100000000\", \"DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM\"],\n\n[\"Witness SIGHASH_SINGLE with output out of bound\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x51\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x20 0x4d6c2a32c87821d68fc016fca70797abdb80df6cd84651d40a9300c6bad79e62\", 1000]],\n\"0100000000010200010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff01d00700000000000001510003483045022100e078de4e96a0e05dcdc0a414124dd8475782b5f3f0ed3f607919e9a5eeeb22bf02201de309b3a3109adb3de8074b3610d4cf454c49b61247a2779a0bcbf31c889333032103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc711976a9144c9c3dfac4207d5d8cb89df5722cb3d712385e3f88ac00000000\", \"NONE\"],\n\n[\"1 byte push should not be considered a witness scriptPubKey\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x60 0x01 0x01\", 1000]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff01e803000000000000015100000000\", \"MINIMALDATA,CLEANSTACK\"],\n\n[\"41 bytes push should not be considered a witness scriptPubKey\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x60 0x29 0xff25429251b5a84f452230a3c75fd886b7fc5a7865ce4a7bb7a9d7c5be6da3dbff0000000000000000\", 1000]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff01e803000000000000015100000000\", \"CLEANSTACK\"],\n\n[\"The witness version must use OP_1 to OP_16 only\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x01 0x10 0x02 0x0001\", 1000]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff01e803000000000000015100000000\", \"MINIMALDATA,CLEANSTACK\"],\n\n[\"The witness program push must be canonical\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x60 0x4c02 0x0001\", 1000]],\n\"010000000100010000000000000000000000000000000000000000000000000000000000000000000000ffffffff01e803000000000000015100000000\", \"MINIMALDATA,CLEANSTACK\"],\n\n[\"Witness Single|AnyoneCanPay does not hash input's position\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1001]],\n\"0100000000010200010000000000000000000000000000000000000000000000000000000000000000000000ffffffff00010000000000000000000000000000000000000000000000000000000000000100000000ffffffff02e8030000000000000151e90300000000000001510247304402206d59682663faab5e4cb733c562e22cdae59294895929ec38d7c016621ff90da0022063ef0af5f970afe8a45ea836e3509b8847ed39463253106ac17d19c437d3d56b832103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710248304502210085001a820bfcbc9f9de0298af714493f8a37b3b354bfd21a7097c3e009f2018c022050a8b4dbc8155d4d04da2f5cdd575dcf8dd0108de8bec759bd897ea01ecb3af7832103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc7100000000\", \"NONE\"],\n\n[\"Witness Single|AnyoneCanPay does not hash input's position (permutation)\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1001],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x00 0x14 0x4c9c3dfac4207d5d8cb89df5722cb3d712385e3f\", 1000]],\n\"0100000000010200010000000000000000000000000000000000000000000000000000000000000100000000ffffffff00010000000000000000000000000000000000000000000000000000000000000000000000ffffffff02e9030000000000000151e80300000000000001510248304502210085001a820bfcbc9f9de0298af714493f8a37b3b354bfd21a7097c3e009f2018c022050a8b4dbc8155d4d04da2f5cdd575dcf8dd0108de8bec759bd897ea01ecb3af7832103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc710247304402206d59682663faab5e4cb733c562e22cdae59294895929ec38d7c016621ff90da0022063ef0af5f970afe8a45ea836e3509b8847ed39463253106ac17d19c437d3d56b832103596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc7100000000\", \"NONE\"],\n\n[\"Non witness Single|AnyoneCanPay hash input's position\"],\n[[[\"0000000000000000000000000000000000000000000000000000000000000100\", 0, \"0x21 0x03596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71 CHECKSIG\", 1000],\n[\"0000000000000000000000000000000000000000000000000000000000000100\", 1, \"0x21 0x03596d3451025c19dbbdeb932d6bf8bfb4ad499b95b6f88db8899efac102e5fc71 CHECKSIG\", 1001]],\n\"01000000020001000000000000000000000000000000000000000000000000000000000000000000004847304402202a0b4b1294d70540235ae033d78e64b4897ec859c7b6f1b2b1d8a02e1d46006702201445e756d2254b0f1dfda9ab8e1e1bc26df9668077403204f32d16a49a36eb6983ffffffff00010000000000000000000000000000000000000000000000000000000000000100000049483045022100acb96cfdbda6dc94b489fd06f2d720983b5f350e31ba906cdbd800773e80b21c02200d74ea5bdf114212b4bbe9ed82c36d2e369e302dff57cb60d01c428f0bd3daab83ffffffff02e8030000000000000151e903000000000000015100000000\", \"NONE\"],\n\n[\"BIP143 examples: details and private keys are available in BIP143\"],\n[\"BIP143 example: P2WSH with OP_CODESEPARATOR and out-of-range SIGHASH_SINGLE.\"],\n[[[\"6eb316926b1c5d567cd6f5e6a84fec606fc53d7b474526d1fff3948020c93dfe\", 0, \"0x21 0x036d5c20fa14fb2f635474c1dc4ef5909d4568e5569b79fc94d3448486e14685f8 CHECKSIG\", 156250000],\n[\"f825690aee1b3dc247da796cacb12687a5e802429fd291cfd63e010f02cf1508\", 0, \"0x00 0x20 0x5d1b56b63d714eebe542309525f484b7e9d6f686b3781b6f61ef925d66d6f6a0\", 4900000000]],\n\"01000000000102fe3dc9208094f3ffd12645477b3dc56f60ec4fa8e6f5d67c565d1c6b9216b36e000000004847304402200af4e47c9b9629dbecc21f73af989bdaa911f7e6f6c2e9394588a3aa68f81e9902204f3fcf6ade7e5abb1295b6774c8e0abd94ae62217367096bc02ee5e435b67da201ffffffff0815cf020f013ed6cf91d29f4202e8a58726b1ac6c79da47c23d1bee0a6925f80000000000ffffffff0100f2052a010000001976a914a30741f8145e5acadf23f751864167f32e0963f788ac000347304402200de66acf4527789bfda55fc5459e214fa6083f936b430a762c629656216805ac0220396f550692cd347171cbc1ef1f51e15282e837bb2b30860dc77c8f78bc8501e503473044022027dc95ad6b740fe5129e7e62a75dd00f291a2aeb1200b84b09d9e3789406b6c002201a9ecd315dd6a0e632ab20bbb98948bc0c6fb204f2c286963bb48517a7058e27034721026dccc749adc2a9d0d89497ac511f760f45c47dc5ed9cf352a58ac706453880aeadab210255a9626aebf5e29c0e6538428ba0d1dcf6ca98ffdf086aa8ced5e0d0215ea465ac00000000\", \"NONE\"],\n\n[\"BIP143 example: P2WSH with unexecuted OP_CODESEPARATOR and SINGLE|ANYONECANPAY\"],\n[[[\"01c0cf7fba650638e55eb91261b183251fbb466f90dff17f10086817c542b5e9\", 0, \"0x00 0x20 0xba468eea561b26301e4cf69fa34bde4ad60c81e70f059f045ca9a79931004a4d\", 16777215],\n[\"1b2a9a426ba603ba357ce7773cb5805cb9c7c2b386d100d1fc9263513188e680\", 0, \"0x00 0x20 0xd9bbfbe56af7c4b7f960a70d7ea107156913d9e5a26b0a71429df5e097ca6537\", 16777215]],\n\"01000000000102e9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc0010000000000ffffffff80e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b0000000000ffffffff0280969800000000001976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac80969800000000001976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac02483045022100f6a10b8604e6dc910194b79ccfc93e1bc0ec7c03453caaa8987f7d6c3413566002206216229ede9b4d6ec2d325be245c5b508ff0339bf1794078e20bfe0babc7ffe683270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac024730440220032521802a76ad7bf74d0e2c218b72cf0cbc867066e2e53db905ba37f130397e02207709e2188ed7f08f4c952d9d13986da504502b8c3be59617e043552f506c46ff83275163ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac00000000\", \"NONE\"],\n\n[\"BIP143 example: Same as the previous example with input-output pairs swapped\"],\n[[[\"1b2a9a426ba603ba357ce7773cb5805cb9c7c2b386d100d1fc9263513188e680\", 0, \"0x00 0x20 0xd9bbfbe56af7c4b7f960a70d7ea107156913d9e5a26b0a71429df5e097ca6537\", 16777215],\n[\"01c0cf7fba650638e55eb91261b183251fbb466f90dff17f10086817c542b5e9\", 0, \"0x00 0x20 0xba468eea561b26301e4cf69fa34bde4ad60c81e70f059f045ca9a79931004a4d\", 16777215]],\n\"0100000000010280e68831516392fcd100d186b3c2c7b95c80b53c77e77c35ba03a66b429a2a1b0000000000ffffffffe9b542c5176808107ff1df906f46bb1f2583b16112b95ee5380665ba7fcfc0010000000000ffffffff0280969800000000001976a9146648a8cd4531e1ec47f35916de8e259237294d1e88ac80969800000000001976a914de4b231626ef508c9a74a8517e6783c0546d6b2888ac024730440220032521802a76ad7bf74d0e2c218b72cf0cbc867066e2e53db905ba37f130397e02207709e2188ed7f08f4c952d9d13986da504502b8c3be59617e043552f506c46ff83275163ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac02483045022100f6a10b8604e6dc910194b79ccfc93e1bc0ec7c03453caaa8987f7d6c3413566002206216229ede9b4d6ec2d325be245c5b508ff0339bf1794078e20bfe0babc7ffe683270063ab68210392972e2eb617b2388771abe27235fd5ac44af8e61693261550447a4c3e39da98ac00000000\", \"NONE\"],\n\n[\"BIP143 example: P2SH-P2WSH 6-of-6 multisig signed with 6 different SIGHASH types\"],\n[[[\"6eb98797a21c6c10aa74edf29d618be109f48a8e94c694f3701e08ca69186436\", 1, \"HASH160 0x14 0x9993a429037b5d912407a71c252019287b8d27a5 EQUAL\", 987654321]],\n\"0100000000010136641869ca081e70f394c6948e8af409e18b619df2ed74aa106c1ca29787b96e0100000023220020a16b5755f7f6f96dbd65f5f0d6ab9418b89af4b1f14a1bb8a09062c35f0dcb54ffffffff0200e9a435000000001976a914389ffce9cd9ae88dcc0631e88a821ffdbe9bfe2688acc0832f05000000001976a9147480a33f950689af511e6e84c138dbbd3c3ee41588ac080047304402206ac44d672dac41f9b00e28f4df20c52eeb087207e8d758d76d92c6fab3b73e2b0220367750dbbe19290069cba53d096f44530e4f98acaa594810388cf7409a1870ce01473044022068c7946a43232757cbdf9176f009a928e1cd9a1a8c212f15c1e11ac9f2925d9002205b75f937ff2f9f3c1246e547e54f62e027f64eefa2695578cc6432cdabce271502473044022059ebf56d98010a932cf8ecfec54c48e6139ed6adb0728c09cbe1e4fa0915302e022007cd986c8fa870ff5d2b3a89139c9fe7e499259875357e20fcbb15571c76795403483045022100fbefd94bd0a488d50b79102b5dad4ab6ced30c4069f1eaa69a4b5a763414067e02203156c6a5c9cf88f91265f5a942e96213afae16d83321c8b31bb342142a14d16381483045022100a5263ea0553ba89221984bd7f0b13613db16e7a70c549a86de0cc0444141a407022005c360ef0ae5a5d4f9f2f87a56c1546cc8268cab08c73501d6b3be2e1e1a8a08824730440220525406a1482936d5a21888260dc165497a90a15669636d8edca6b9fe490d309c022032af0c646a34a44d1f4576bf6a4a74b67940f8faa84c7df9abe12a01a11e2b4783cf56210307b8ae49ac90a048e9b53357a2354b3334e9c8bee813ecb98e99a7e07e8c3ba32103b28f0c28bfab54554ae8c658ac5c3e0ce6e79ad336331f78c428dd43eea8449b21034b8113d703413d57761b8b9781957b8c0ac1dfe69f492580ca4195f50376ba4a21033400f6afecb833092a9a21cfdf1ed1376e58c5d1f47de74683123987e967a8f42103a6d48b1131e94ba04d9737d61acdaa1322008af9602b3b14862c07a1789aac162102d8b661b0b3302ee2f162b09e07a55ad5dfbe673a9f01d9f0c19617681024306b56ae00000000\", \"NONE\"],\n\n[\"FindAndDelete tests\"],\n[\"This is a test of FindAndDelete. The first tx is a spend of normal P2SH and the second tx is a spend of bare P2WSH.\"],\n[\"The redeemScript/witnessScript is CHECKSIGVERIFY <0x30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01>.\"],\n[\"The signature is <0x30450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01> <pubkey>,\"],\n[\"where the pubkey is obtained through key recovery with sig and correct sighash.\"],\n[\"This is to show that FindAndDelete is applied only to non-segwit scripts\"],\n[\"Non-segwit: correct sighash (with FindAndDelete) = 1ba1fe3bc90c5d1265460e684ce6774e324f0fabdf67619eda729e64e8b6bc08\"],\n[[[\"f18783ace138abac5d3a7a5cf08e88fe6912f267ef936452e0c27d090621c169\", 7000, \"HASH160 0x14 0x0c746489e2d83cdbb5b90b432773342ba809c134 EQUAL\", 200000]],\n\"010000000169c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f1581b0000b64830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0121037a3fb04bcdb09eba90f69961ba1692a3528e45e67c85b200df820212d7594d334aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e01ffffffff0101000000000000000000000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n[\"BIP143: correct sighash (without FindAndDelete) = 71c9cd9b2869b9c70b01b1f0360c148f42dee72297db312638df136f43311f23\"],\n[[[\"f18783ace138abac5d3a7a5cf08e88fe6912f267ef936452e0c27d090621c169\", 7500, \"0x00 0x20 0x9e1be07558ea5cc8e02ed1d80c0911048afad949affa36d5c3951e3159dbea19\", 200000]],\n\"0100000000010169c12106097dc2e0526493ef67f21269fe888ef05c7a3a5dacab38e1ac8387f14c1d000000ffffffff01010000000000000000034830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e012102a9781d66b61fb5a7ef00ac5ad5bc6ffc78be7b44a566e3c87870e1079368df4c4aad4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0100000000\", \"LOW_S\"],\n[\"This is multisig version of the FindAndDelete tests\"],\n[\"Script is 2 CHECKMULTISIGVERIFY <sig1> <sig2> DROP\"],\n[\"52af4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c0395960175\"],\n[\"Signature is 0 <sig1> <sig2> 2 <key1> <key2>\"],\n[\"Non-segwit: correct sighash (with FindAndDelete) = 1d50f00ba4db2917b903b0ec5002e017343bb38876398c9510570f5dce099295\"],\n[[[\"9628667ad48219a169b41b020800162287d2c0f713c04157e95c484a8dcb7592\", 7000, \"HASH160 0x14 0x5748407f5ca5cdca53ba30b79040260770c9ee1b EQUAL\", 200000]],\n\"01000000019275cb8d4a485ce95741c013f7c0d28722160008021bb469a11982d47a662896581b0000fd6f01004830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c03959601522102cd74a2809ffeeed0092bc124fd79836706e41f048db3f6ae9df8708cefb83a1c2102e615999372426e46fd107b76eaf007156a507584aa2cc21de9eee3bdbd26d36c4c9552af4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c0395960175ffffffff0101000000000000000000000000\", \"CONST_SCRIPTCODE,LOW_S\"],\n[\"BIP143: correct sighash (without FindAndDelete) = c1628a1e7c67f14ca0c27c06e4fdeec2e6d1a73c7a91d7c046ff83e835aebb72\"],\n[[[\"9628667ad48219a169b41b020800162287d2c0f713c04157e95c484a8dcb7592\", 7500, \"0x00 0x20 0x9b66c15b4e0b4eb49fa877982cafded24859fe5b0e2dbfbe4f0df1de7743fd52\", 200000]],\n\"010000000001019275cb8d4a485ce95741c013f7c0d28722160008021bb469a11982d47a6628964c1d000000ffffffff0101000000000000000007004830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c0395960101022102966f109c54e85d3aee8321301136cedeb9fc710fdef58a9de8a73942f8e567c021034ffc99dd9a79dd3cb31e2ab3e0b09e0e67db41ac068c625cd1f491576016c84e9552af4830450220487fb382c4974de3f7d834c1b617fe15860828c7f96454490edd6d891556dcc9022100baf95feb48f845d5bfc9882eb6aeefa1bc3790e39f59eaa46ff7f15ae626c53e0148304502205286f726690b2e9b0207f0345711e63fa7012045b9eb0f19c2458ce1db90cf43022100e89f17f86abc5b149eba4115d4f128bcf45d77fb3ecdd34f594091340c039596017500000000\", \"LOW_S\"],\n\n[\"Test long outputs, which are streamed using length-prefixed bitcoin strings. This might be surprising.\"],\n[[[\"1111111111111111111111111111111111111111111111111111111111111111\", 0, \"0x00 0x14 0x751e76e8199196d454941c45d1b3a323f1433bd6\", 5000000]],\n\"0100000000010111111111111111111111111111111111111111111111111111111111111111110000000000ffffffff0130244c0000000000fd02014cdc1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111175210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac02483045022100c1a4a6581996a7fdfea77d58d537955a5655c1d619b6f3ab6874f28bb2e19708022056402db6fede03caae045a3be616a1a2d0919a475ed4be828dc9ff21f24063aa01210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179800000000\", \"NONE\"],\n\n[\"Make diffs cleaner by leaving a comment here without comma at the end\"]\n]"
  },
  {
    "path": "test/src/tx/tx.test.ts",
    "content": "import { Test } from 'tape'\nimport { segwit_vector_test } from './segwit/segwit.test.js'\n\nexport default function tx_tests(t : Test) : void {\n  segwit_vector_test(t)\n}\n\n"
  },
  {
    "path": "test/tape.ts",
    "content": "import tape from 'tape'\n\nimport address_tests  from './src/addr/addr.test.js'\nimport sig_tests      from './src/sig/sig.test.js'\nimport tx_tests       from './src/tx/tx.test.js'\nimport { unit_tests } from './src/tap/unit.test.js'\nimport { tweak_test } from './src/tap/tree.test.js'\n\nimport example_tests  from './example/ex_test.js'\n\ntape('Tapscript Test Suite', async t => {\n\n  t.test('Address Tests', t => {\n    address_tests(t)\n  })\n\n  t.test('Signature Tests', async t => {\n    await sig_tests(t)\n  })\n\n  t.test('Transaction Tests', t => {\n    tx_tests(t)\n  })\n\n  t.test('Tapscript Tests', async t => {\n    tweak_test(t)\n    await unit_tests(t)\n  })\n\n  await example_tests(t)\n})\n"
  },
  {
    "path": "test/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"baseUrl\": \"..\",\n    \"paths\": {\n      \"@/*\" : [ \"src/*\" ],\n    },\n    \"module\": \"NodeNext\",\n    \"target\": \"ESNext\",\n    \"moduleResolution\": \"NodeNext\",\n    \"importHelpers\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"useDefineForClassFields\": false,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"pretty\": true,\n    \"removeComments\": true,\n    \"strictNullChecks\": true,\n    \"noImplicitAny\": true,\n    \"noImplicitThis\": true,\n    \"noImplicitReturns\": true,\n    \"noUncheckedIndexedAccess\": false,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true\n  },\n  \"exclude\": [ \"node_modules\" ],\n  \"include\": [ \"**/*.ts\" ]\n}\n"
  },
  {
    "path": "test/utils.ts",
    "content": "export class TxTest {\n  constructor () {\n    \n  }\n}"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"module\": \"ES2022\",\n    \"target\": \"ES2022\",\n    \"moduleResolution\": \"Node\",\n    \"rootDir\": \"./src\",\n    \"outDir\": \"./dist\",\n    \"sourceMap\": true,\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"emitDeclarationOnly\": true,\n    \"importHelpers\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"useDefineForClassFields\": false,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"pretty\": true,\n    \"removeComments\": true,\n    \"noImplicitAny\": true,\n    \"noImplicitThis\": true,\n    \"noImplicitReturns\": true,\n    \"noUncheckedIndexedAccess\": false,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true\n  },\n  \"exclude\": [ \"node_modules\", \"test\" ],\n  \"include\": [ \"src/**/*.ts\" ]\n}\n"
  }
]